Обсуждение статьи "Нейросети — это просто (Часть 6): Эксперименты с коэффициентом обучения нейронной сети"

 

Опубликована статья Нейросети — это просто (Часть 6): Эксперименты с коэффициентом обучения нейронной сети:

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

Третий эксперимент является небольшим отступлением от темы статьи, но его идея появилась в процессе проведения первых двух экспериментов. Поэтому решил поделиться и этой мыслью. Наблюдая за обучением нейронной сети обратил внимание на тот факт, что вероятность отсутствия фрактала колеблется в районе 60-70 % и редко опускается ниже 50%. В то время, как вероятность появления фрактала, будь то в бай или селл, колеблется около 20-30%. И это вполне закономерно, т.к. на графике гораздо меньше фракталов, чем свечей внутри тенденций. Таким образом, наша нейронная сеть переобучается и мы получаем результаты, приведенные выше. Практически 100% фракталов пропускаем, и только редкие удается "поймать".  

Обучение советника с темпом обучения 0.01

Для решения этой проблемы, я решил немного компенсировать не равномерность выборки и при отсутствии фрактала в эталонном значении при обучении сети указал 0.5 вместо 1.

            TempData.Add((double)buy);
            TempData.Add((double)sell);
            TempData.Add((double)((!buy && !sell) ? 0.5 : 0));

Такой шаг дал свои результаты. Запустив советник с темпом обучения 0.01 и матрицей весов после предыдущих экспериментов после 5 эпох обучения видим стабилизацию ошибки около 0.34. При этом доля пропущенных фракталов снизилась до 51% и "попадание" поднялось 9.88%. На графике можно заметить, что советник дает сигналы группами, тем самым определяя некоторые зоны. Очевидно, что идея требует дополнительной проработки и тестирования, но полученные результаты говорят о состоятельности подобного подхода. 

Обучение с 0.5 для отсутствия фрактала

Автор: Dmitriy Gizlyk

 
Я так мимо проходил))) Вас не смущает тот факт что ошибка по мере обучения растет??? должно быть как бы наоборот)))
 
Александр Алексеевич:
Я так мимо проходил))) Вас не смущает тот факт что ошибка по мере обучения растет??? должно быть как бы наоборот)))
Ошибка растет при первых проходах после инициализации случайными величинами. После нескольких проходов она начинает снижаться. Это может быть связано с хаотичным разбросом начальных значений от уровня целевой функции. Так же, можно заметить незначительный рост ошибки на фоне общей тенденции к ее снижению, что объясняется не гладкостью целевой функции.
 

Добрый день!

Подскажите, Вы обучаете НС только на цене закрытия? Или используете еще и объем торгов на заданном ТМ?

 
Oleg Mazurenko:

Добрый день!

Подскажите, Вы обучаете НС только на цене закрытия? Или используете еще и объем торгов на заданном ТМ?

Сейчас в описываемом примере в нейросеть передаются цены открытия, закрытия, хай, ло, объемы, время и показания 4-х индикаторов. Процесс передачи исходных данных в нейросеть описана по ссылке

Нейросети — это просто (Часть 2): Обучение и тестирование сети
Нейросети — это просто (Часть 2): Обучение и тестирование сети
  • www.mql5.com
В данной статье мы продолжим изучение нейронных сетей, начатое в предыдущей статье и рассмотрим пример использования в советниках созданного нами класса CNet. Рассмотрены две модели нейронной сети, которые показали схожие результаты как по времени обучения, так и по точности предсказания.
 
Основная проблема не в подборе коэффициента обучения, в конечном счете в Тензор Фло есть функция которая постепенно его снижает во время обучения до указанной величины, подбирая оптимальный. Проблема в том что нейросеть не находит стабильных закономерностей, ей не за что зацепиться. Я применял модели начиная от полносвязных слоев и заканчивая новомодными ResNet и Attention. Эффект не превышает 60%, и это на узком участке, в целом все скатывается к 50 на 50. С нейросетями нужно подумать что  в целом можно было бы по анализировать. Просто массивы цен и объемов, в любых комбинациях, результата не дают.
 
eccocom #:
Основная проблема не в подборе коэффициента обучения, в конечном счете в Тензор Фло есть функция которая постепенно его снижает во время обучения до указанной величины, подбирая оптимальный. Проблема в том что нейросеть не находит стабильных закономерностей, ей не за что зацепиться. Я применял модели начиная от полносвязных слоев и заканчивая новомодными ResNet и Attention. Эффект не превышает 60%, и это на узком участке, в целом все скатывается к 50 на 50. С нейросетями нужно подумать что  в целом можно было бы по анализировать. Просто массивы цен и объемов, в любых комбинациях, результата не дают.

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

 

"..при отсутствии фрактала в эталонном значении при обучении сети указал 0.5 вместо 1."

Почему именно 0.5, откуда эта цифра?

 
Gexon #:

"..при отсутствии фрактала в эталонном значении при обучении сети указал 0.5 вместо 1."

Почему именно 0.5, откуда эта цифра?

В процессе обучения модель учит вероятностное распределение каждого из 3 событий. Т.к. вероятность отсутствия фрактала значительно выше вероятности его появления, то мы искусственно её занижаем. Указываем 0.5, так как при таком значении мы приходим примерно к равному уровню максимальных вероятностей событий. И их можно сравнивать.
Согласен, что такой подход весьма спорный и продиктован наблюдениями из обучающей выборки.

 

double rsi=RSI.Main(bar_t);
double cci=CCI.Main(bar_t);
double atr=ATR.Main(bar_t);

if(open==EMPTY_VALUE ||             
               !TempData.Add(rsi) || !TempData.Add(cci) || !TempData.Add(atr) )
               break;

Похоже что данные не нормализованы, так и должно быть или это тоже работает?

 
Gexon #:

double rsi=RSI.Main(bar_t);
double cci=CCI.Main(bar_t);
double atr=ATR.Main(bar_t);

if(open==EMPTY_VALUE ||             
               !TempData.Add(rsi) || !TempData.Add(cci) || !TempData.Add(atr) )
               break;

Похоже что данные не нормализованы, так и должно быть или это тоже работает?

О нормализации данных речь пойдет немного позже.

Нейросети — это просто (Часть 13): Пакетная нормализация (Batch Normalization)
Нейросети — это просто (Часть 13): Пакетная нормализация (Batch Normalization)
  • www.mql5.com
В предыдущей статье мы начали рассматривать методы повышения качества обучения нейронной сети. В данной статье предлагаю продолжить эту тему и рассмотреть такой поход, как пакетная нормализация данных.