Обсуждение статьи "Нейросети — это просто (Часть 2): Обучение и тестирование сети"

 

Опубликована статья Нейросети — это просто (Часть 2): Обучение и тестирование сети:

В данной статье мы продолжим изучение нейронных сетей, начатое в предыдущей статье и рассмотрим пример использования в советниках созданного нами класса CNet. Рассмотрены две модели нейронной сети, которые показали схожие результаты как по времени обучения, так и по точности предсказания.

Первая эпоха максимально зависима от случайно выбранных на начальном этапе весовых коэффициентов нейронной сети.

После 35 эпох обучения разрыв в статистических показателях немного увеличился в пользу регрессионной модели нейронной сети:

Показатель Нейронная сеть регрессии Нейронная сеть классификации
Среднеквадратичная ошибка 0.68 0.78
Процент "попадания" 12.68% 11.22%
"Пропущенных" фракталов 20.22% 24.65%

Результат 35-ой эпохи обучения нейронной сети регрессии (1 выходной нейрон) Результат 35-ой эпохи обучения нейронной сети классификации (3 выходных нейрона)

Результаты тестирования показывают, что оба варианта организации нейронной сети дают схожие результаты как по времени обучения, так и по точности предсказания. В тоже время полученные показатели говорят о необходимости дополнительных затрат времени и ресурсов на обучение. Желающие проанализировать динамику обучения нейронных сетей могут ознакомиться со скриншотами каждой эпохи обучения во вложении.

Автор: Dmitriy Gizlyk

 

Статья интересная. Я раньше даже не пытался смотреть в сторону нейронных сетей, полагая что "тёмный лес" и всё, что читал на эту тему раньше отталкивало изобилием непонятных слов, но в этой статье, действительно, теория достаточно простая и понятная, за это автору спасибо!

А вот эту фразу хотелось бы уточнить: "Оба советника показали схожие результаты с уровнем попадания чуть более 6%." Правильно ли я понял, что после первого "прохода" обучения прогноз нейросети оправдался только на 6%. 
А после 35 эпох обучения - только 12% ???

Такой низкий результат не мотивирует изучать тему дальше. 

Какие существуют методы повышения точности прогноза?

 

Добрый день, Дмитрий.

Тема очень интересная и нужная. Спасибо за эти статьи).

1. У меня вопрос по коду метода Traine(... ):

            TempData.Clear();
            bool sell=(High.GetData(i+2)<High.GetData(i+1) && High.GetData(i)<High.GetData(i+1));
            
            //в строчке ниже скорее всего не верно определяется Low фрактал  
            bool buy=(Low.GetData(i+2)<Low.GetData(i+1) && Low.GetData(i)<Low.GetData(i+1));
           
            //знаки сравнения нужно поменять наоборот
            buy=(Low.GetData(i+2)>Low.GetData(i+1) && Low.GetData(i)>Low.GetData(i+1));/

 Когда я запустил измененный вариант на обучение результаты улучшились: 

Уже на 8 эпохе точность была 16.98% против старого варианта на той же эпохе 10.87% 


2. Почему все таки у многослойной нейро - сети такой низкий % точности,не дотягивает до 50% ?

 
Alexandr Ishkov:

Добрый день, Дмитрий.

Тема очень интересная и нужная. Спасибо за эти статьи).

1. У меня вопрос по коду метода Traine(... ):

 Когда я запустил измененный вариант на обучение результаты улучшились: 

Уже на 8 эпохе точность была 16.98% против старого варианта на той же эпохе 10.87% 

Спасибо за замечание, Александр. Досадная ошибка с копипастом.

 
Alexandr Ishkov:

Добрый день, Дмитрий.

2. Почему все таки у многослойной нейро - сети такой низкий % точности,не дотягивает до 50% ?

Я писал в первой статье, что индикаторы взял случайные из стандартных с стандартными параметрами. А нейронная сеть хороший инструмент, но не что-то сверхъестественное. Она ищет закономерности там где они есть. Но если в исходных данных нет закономерностей, то она сама их не придумает. Точное попадание в фрактал довольно сложная задача и, если честно, я не ожидал получить точного попадания. Но то, что получилось дает почву для дальнейшей работы. 

 
Dmitriy Gizlyk:

Спасибо за замечание, Александр. Досадная ошибка с копипастом.

Бывает)

Dmitriy Gizlyk:

Я писал в первой статье, что индикаторы взял случайные из стандартных с стандартными параметрами. А нейронная сеть хороший инструмент, но не что-то сверхъестественное. Она ищет закономерности там где они есть. Но если в исходных данных нет закономерностей, то она сама их не придумает. Точное попадание в фрактал довольно сложная задача и, если честно, я не ожидал получить точного попадания. Но то, что получилось дает почву для дальнейшей работы. 

Логично).

Спасибо, ваша работа замечательная в любом случае  )

 

Дмитрий, добрый день!

Очень интересный цикл статей про нейронные сети. На данный момент экспериментирую с различными наборами индикаторов и задачами для сети. Решил поставить перед сетью задачу определить вероятность появления следующего бара либо с уровнем Hight большем, чем уровень Open текущего бара на 100 пунктов, либо с уровнем Low меньшим, чем уровень Open текущего бара на 100 пунктов. 

         if(add_loop && i<(int)(bars-MathMax(HistoryBars,0)-1) && i>1 && Time.GetData(i)>dtStudied && dPrevSignal!=-2)
           {
            TempData.Clear();
            double DiffMin=100;
            double DiffLow=Open.GetData(i+1)-Low.GetData(i);
            double DiffHigh=High.GetData(i)-Open.GetData(i+1);
            bool sell=(DiffLow>=DiffMin);
            bool buy=(DiffHigh>=DiffMin);
            TempData.Add((double)buy);
            TempData.Add((double)sell);
            TempData.Add((double)(!buy && !sell));
            Net.backProp(TempData);
	    ...
           }

При тестировании советника на график выводятся метки прогнозных фракталов, но статистика по правильно предсказанным и ненайденным фракталам не обновляется и всегда равно 0.00%.  Можете указать мне на ошибку, которую я допустил?

        if(DoubleToSignal(dPrevSignal)!=Undefine)
              {
               if(DoubleToSignal(dPrevSignal)==DoubleToSignal(TempData.At(0)))
                  dForecast+=(100-dForecast)/Net.recentAverageSmoothingFactor;
               else
                  dForecast-=dForecast/Net.recentAverageSmoothingFactor;
               dUndefine-=dUndefine/Net.recentAverageSmoothingFactor;
              }
            else
              {
               if(sell || buy)
                  dUndefine+=(100-dUndefine)/Net.recentAverageSmoothingFactor;
              }
Как протестировать торгового робота перед покупкой
Как протестировать торгового робота перед покупкой
  • www.mql5.com
Покупка торгового робота в MQL5 Маркете имеет одно большое преимущество перед всеми другими подобными предложениями -  вы можете устроить комплексную проверку предлагаемой автоматической системы прямо в терминале MetaTrader 5. Советник перед покупкой можно и нужно тщательно прогнать во всех неблагоприятных режимах во встроенном тестере торговых...
 
altec3:

Дмитрий, добрый день!

Очень интересный цикл статей про нейронные сети. На данный момент экспериментирую с различными наборами индикаторов и задачами для сети. Решил поставить перед сетью задачу определить вероятность появления следующего бара либо с уровнем Hight большем, чем уровень Open текущего бара на 100 пунктов, либо с уровнем Low меньшим, чем уровень Open текущего бара на 100 пунктов. 

При тестировании советника на график выводятся метки прогнозных фракталов, но статистика по правильно предсказанным и ненайденным фракталам не обновляется и всегда равно 0.00%.  Можете указать мне на ошибку, которую я допустил?

Добрый день,
Вы указали Diff=100, насколько я понимаю это в пунктах. А разница считается по цене. Т.е. для EURUSD посчитается как 1,16715-1,15615=0,01. В итоге, у Вас не сопоставимые данные и sell и buy всегда будут false.

 
Dmitriy Gizlyk:

Добрый день,
Вы указали Diff=100, насколько я понимаю это в пунктах. А разница считается по цене. Т.е. для EURUSD посчитается как 1,16715-1,15615=0,01. В итоге, у Вас не сопоставимые данные и sell и buy всегда будут false.

Спасибо! Действительно, как только привел все к общему знаменателю - проблема решилась.
 

У меня вопрос: На кой черт изучать тему аж целого цикла мега заумных статей если у этой нейронной сети точность мизерная ... мне кажется тему надо либо прекратить либо усовершенствовать советник.

сразу добавлю, моя нейронная сеть намного "сложнее" вашей, но гарантированно дает 70-80% правильных входов и при этом она значительно проще по структуре ... 

и еще добавлю что есть просто куча других нейронных сетей с гораздо большей точностью чем ваша

вообще сложилось впечатление что вам за статьи деньги платят а толку от них ноль ... уж извините

я также не согласен со названием "Нейросети - это просто", те кто занимается машинным обучением на больших данных знает - это очень не просто ... :-)

>Для оценки результатов работы сети можно использовать среднеквадратичную ошибку предсказания, процент правильного предсказания фракталов, процент пропущенных фракталов.

с этим не согласен вообще - результат только итоговый баланс, чистая прибыль и только и больше ничего ... вообще ничего, здесь не наука ради науки, здесь наука ради прибыли

и даже скажу почему: есть советники с точностью 60% ... но они благодаря хитрой системе дают большую прибыль чем советники с точностью 80% ...

а начинать надо с графика итогового стейта торговли вашего советника или читать смысла нет, я вот сразу вниз кручу если стейта нет или он не удовлетворяет моим требованиям то можно не читать вообще, ниже тест моей не очень умной нейронки

стейт

 
Boris Egorov:

а начинать надо с графика итогового стейта торговли вашего советника или читать смысла нет, я вот сразу вниз кручу если стейта нет или он не удовлетворяет моим требованиям то можно не читать вообще, ниже тест моей не очень умной нейронки

тогда Вам не нужен раздел статьи

под Ваши требования - прибыльный стейт, подходят разделы кодобаза и Маркет

да, кстати, под Ваши требования даже Ваше сообщение не подходит, получается его тоже можно игнорировать? )))


статьи нужны, нужны, чтобы правильно протестировать советника работающего на основе нейросети, высока вероятность, что Ваш стейт из тестера, мало того, что из МТ4, так и возможно Вы не поделили обучающую выборку на трейн/тест/валидация

статьи нужны, чтобы учиться писать хороший структурированный и читаемый код - у автора, имхо, идеальный под эти требования код в статье