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

 

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

Продвигаясь дальше в изучении нейронных сетей, наверное, стоит немного уделить внимания методам повышения их сходимости при обучении. Существует несколько таких методов. В этой статье предлагаю рассмотреть один из них — Dropout.

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

Для борьбы со сложной совместной адаптацией признаков в июле 2012 года группа ученных из университета Торонто предложила случайным образом исключать часть нейронов в процессе обучения [12]. Снижение количества признаков при обучении повышает значимость каждого, а постоянное изменение количественного и качественного состава признаков снижает риск их совместной адаптации. Такой метод и получил название Dropout. Некоторые сравнивают применение данного метода с деревьями решений, ведь согласитесь, исключая часть нейронов, мы на каждой итерации обучения получаем новую нейронную сеть со своими весовыми коэффициентами. А по правилам комбинаторики вариативность таких сетей довольно высока.


Автор: Dmitriy Gizlyk

 

Обратите внимание, при использовании в Fractal_OCL_AttentionMLMH_d вместо Net.feedForward(TempData,12,true);

проверку      if(!Net.feedForward(TempData,12,true))

            printf("error in Net feed forward. check topology and input data");

будет выдавать ошибку. В отличии от версии Fractal_OCL_AttentionMLMH, где такой ошибки не будет.

Прошу проверить причину.

 
Dmitry Nazarov:

Обратите внимание, при использовании в Fractal_OCL_AttentionMLMH_d вместо Net.feedForward(TempData,12,true);

проверку      if(!Net.feedForward(TempData,12,true))

            printf("error in Net feed forward. check topology and input data");

будет выдавать ошибку. В отличии от версии Fractal_OCL_AttentionMLMH, где такой ошибки не будет.

Прошу проверить причину.

Спасибо, проверю.

 
Надо проверку всех подаваемых значений на NaN, Inf, иначе ФидФорвард фальш ретурнит.
 
Dmitry Nazarov:

Обратите внимание, при использовании в Fractal_OCL_AttentionMLMH_d вместо Net.feedForward(TempData,12,true);

проверку      if(!Net.feedForward(TempData,12,true))

            printf("error in Net feed forward. check topology and input data");

будет выдавать ошибку. В отличии от версии Fractal_OCL_AttentionMLMH, где такой ошибки не будет.

Прошу проверить причину.

Попробуйте этот вариант, у меня не было ошибок.

Файлы:
 
Ок. Ошибки больше нет. Спасибо.
 

Большое спасибо за эту статью. Я уже адаптировал своих роботов для новых функций, и они отлично работают.

 
Я так понимаю, что без OCL ничего не работает? Жаль, я не игрун и карта старая...
 
Автору большое СПАСИБО за проделанную роботу, проверьте ошибку в коде самого советника так как во время обучения, когда алгоритм показывает сигнал undefine количество пропущенных паттернов стремится к 100 % , когда в конце эпохи на последнем баре появляется buy или sell, тогда на следующей эпохе значенние пропущенных паттернов уменьшается.
 
Alexey Volchanskiy:
Я так понимаю, что без OCL ничего не работает? Жаль, я не игрун и карта старая...
Если процессор многоядерный поставь драйвера на OCL для процессора, скорость будет не мега быстро но сможешь проверить.
 
Дмитрий, можете чуть шире объяснить параметр window в создании Нейронки. Правильно ли я понимаю, что это кол-во нейронов последовательно (с шагом степ) которые берутся для одномоментного расчета? для экономии вычислительных мощностей?