Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 609

 
Sergey Chalyshev:


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


Глупость.
 

  • определение оптимальных гиперпараметров DNN

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

optimHP

Рис.1. Структура гиперпараметров нейросети и способы оптимизации

Оптимизировать гиперпараметры можно тремя способами:

  1. Сеточный поиск
  2. Генетическая оптимизация
  3. Байесовская оптимизация

В первом случае для каждого гиперпараметра задается вектор  с несколькими фиксированными значениями. Затем используя функцию caret::train() либо собственный скрипт обучают модель на всех комбинациях значений гиперпараметров. После чего выбирают модель с лучшими показателями качества классификации и ее параметры  будут приняты как  оптимальные. Недостаток этого способа в том, что задав сетку значений, мы с большой вероятностью пропустим оптимум.

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

В третьем случае используется байесовский подход (гауссовские процессы и МСМС), который мы и протестируем в этой статье. Будем использовать пакет rBayesianOptimization (version 1.1.0). Теория применяемых методов приведена в статье Jasper Snoek, Hugo Larochelle, Ryan P. Adams (2012) Practical Bayesian Optimization of Machine Learning Algorithms 

Гиперпараметры нейросети в общем случае можно разделить на две группы : глобальные и локальные(узловые). К глобальным относятся количество скрытых слоев, количество нейронов в каждом слое, уровень обучения и момент, инициализация весов нейронов. К локальным - тип слоя, функция активации, dropout/dropconect и другие параметры регуляризации.

 

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

Я тут вручную несколько обучений сделал, и немного в замешательстве. Предполагал, что уменьшение ошибки будет идти стабильно, а она скачет.

Даже повторное обучение на одной и той же структуре сети может давать результаты с отличием в 3-5%, что так же может помешать правильному выбору структуры.

 

Можете подсказать еще каких то трейдеров, которые могут обучить? Мне знакомый посоветовал обучение (от Поликарпа Брехунова - изменено Artyom Trishkin), кто знает, может еще есть трейдера которые проводят курсы по обучению? 

 
elibrarius:

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

Я тут вручную несколько обучений сделал, и немного в замешательстве. Предполагал, что уменьшение ошибки будет идти стабильно, а она скачет.

Даже повторное обучение на одной и той же структуре сети может давать результаты с отличием в 3-5%, что так же может помешать правильному выбору структуры.

Так и должно быть. Начальная инициализация весов производится небольшими значениями случайных чисел (зависит от вида начальной инициализации). Для получения воспроизводимых результатов необходимо перед каждым запуском обучения устанавливать ГСЧ в одно и то же состояние. Для этого и служит set.seed().

Удачи

 
Vladimir Perervenko:

Так и должно быть. Начальная инициализация весов производится небольшими значениями случайных чисел (зависит от вида начальной инициализации). Для получения воспроизводимых результатов необходимо перед каждым запуском обучения устанавливать ГСЧ в одно и то же состояние. Для этого и служит set.seed().

Удачи

А, ну я в Darch-е RBM предобучение делал в 2 эпохи с learnRate = 0.3.

 
Vladimir Perervenko:

  • определение оптимальных гиперпараметров DNN

Во втором случае используется возможность стохастического поиска лучших параметров с использованием генетических алгоритмов. 

Для трейдинга идея оптимизации модели (ТС) представляется крайне сомнительной, так как любая оптимизация ищет пики/впадины, а они нам не нужны. Нам нужны, в идеале, ровные плато, как можно большие по размеру. Эти плато должны обладать одним замечательным свойством: изменения параметров модели НЕ должно приводить к уходу с плато. 

Это по поводу оптимизации.

По факту сюда же следует добавить проблему стабильности параметров модели, которые если и меняются, то внутри довольно узкого (5%) доверительного интервала. Как мне кажется, стабильность параметров модели и приводит к тому, что ее результативность находится на неком плато и если при тестировании модели мы внезапно получили очень хороший результат, то это значит мы выскочили на точку минимакса, мы получили неустойчивое состояние, которое на практике никогда больше не встретится, более того вокруг этой оптимальной точки будет располагаться стопаут.

ПС.

Кстати в тестере разработчики предоставили такую возможность поиска плато по цвету. Лично я использую тестер как финишный инструмент и беру параметры, которые относятся к квадратику, вокруг которого квадратики такого же цвета. Это наглядное выражение моего понятия "плато".

 
elibrarius:

А, ну я в Darch-е RBM предобучение делал в 2 эпохи с learnRate = 0.3.

Внутри функции darch() есть параметр seed = NULL по умолчанию. установите его в какое то состояние, например seed = 12345. 

Это маленькое значение learnRate. Начните с learnRate = 0.7, numEpochs = 10  для RBM и NN. Но это потолочные данные. Нужно оптимизировать под конкретный набор данных.

Удачи

 
Vladimir Perervenko:
Внутри функции darch() есть параметр seed = NULL по умолчанию. установите его в какое то состояние, например seed = 12345. 

Это маленькое значение learnRate. Начните с learnRate = 0.7, numEpochs = 10  для RBM и NN. Но это потолочные данные. Нужно оптимизировать под конкретный набор данных.

Удачи

Спасибо! Попробую.
 
СанСаныч Фоменко:

Для трейдинга идея оптимизации модели (ТС) представляется крайне сомнительной, так как любая оптимизация ищет пики/впадины, а они нам не нужны. Нам нужны, в идеале, ровные плато, как можно большие по размеру. Эти плато должны обладать одним замечательным свойством: изменения параметров модели НЕ должно приводить к уходу с плато. 

Это по поводу оптимизации.

По факту сюда же следует добавить проблему стабильности параметров модели, которые если и меняются, то внутри довольно узкого (5%) доверительного интервала. Как мне кажется, стабильность параметров модели и приводит к тому, что ее результативность находится на неком плато и если при тестировании модели мы внезапно получили очень хороший результат, то это значит мы выскочили на точку минимакса, мы получили неустойчивое состояние, которое на практике никогда больше не встретится, более того вокруг этой оптимальной точки будет располагаться стопаут.

ПС.

Кстати в тестере разработчики предоставили такую возможность поиска плато по цвету. Лично я использую тестер как финишный инструмент и беру параметры, которые относятся к квадратику, вокруг которого квадратики такого же цвета. Это наглядное выражение моего понятия "плато".

1. Вы об оптимизации чего говорите? О каком плато? О какой модели? Если Вы говорите о нейросети, то было бы странно не обучать(оптимизировать парметры) DNN перед использованием.

2. Каких параметры модели(?) должны быть стабильны? 

Не понял Ваши мысли.

Я говорил об оптимизации гиперпараметров DNN которую нужно проводить обязательно и не в тестере.

Причина обращения: