Вопрос по программированию нейросети нейросети - страница 6

 
Vinin:


Я делал нормальную сетку 256 входов, один скрытый слой на 256 нейронов. Ну и выходной слой из одного нейрона. И все это прекрасно обучал в МТ4

1. Генетическим алгоритмом тестера или внутренним алгоритмом обучения сетки?

 
Reshetov:
Генетическим алгоритмом тестера или внутренним алгоритмом обучения сетки?

Все делал через скрипт. Внутренний алгоритм
 
Хотя варианты с оптимизацией были. Делал счетчик и сохранял наиболее оптимальные варианты в глобальных переменных. Переписывал их при улучшении результата. Была идеальная подгонка.
 
Суть в том, что у меня все весовые коэффициенты и пороги подбираются тестерным ГА, см. входные параметры в отчете, кроме 3-х последних. Скорость обучения высокая, т.к. оптимизация 10000 баров не более 5 минут. Ну и потом, мне не нужно 256 входов, т.к. и трех за глаза хватает - даже на них сетка переобучается по черному.
 
Reshetov:


мне не нужно 256 входов, т.к. и трех за глаза хватает - даже на них сетка переобучается по черному.

Это уже выходит за рамки топика. Обсуждать не стоит. Каждому свое
 
Vinin:

Это уже выходит за рамки топика. Обсуждать не стоит. Каждому свое


Ну топик то давно заглох, никому не навредим...

Reshetov:


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


Вы уверены что переобучается? Может просто нехватает "обобщающе-вычислительном мощи" в силу слабости архитектуры?

Эксперт на пересечении двух машек, подгоняется в оптимизаторе, но на форварде он сработает только если очень повезет. И дело там явно не в переобучении...

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

 
Figar0:


Ну топик то давно заглох, никому не навредим...

Но с модераторами лучше не спорить. По крайней мере правил мы ИМХО не нарушаем и в случае чего имеем право обратиться к администрации.

Figar0:


Вы уверены что переобучается? Может просто нехватает "обобщающе-вычислительном мощи" в силу слабости архитектуры?

Да, уверен.

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

Самый простейший пример. Берем приличный кусок истории, убираем тейки и стопы и настраиваем ТС, чтобы она на каждом баре брала показания НС и по ним торговала. Т.е. если показания сетки против шерсти открытой позиции, то переворачиваемся. Сетка настраивается таким макаром, что открывает всего несколько сделок и все в плюс (профит фактор отсутствует). На однослойном перцептроне и даже на стандартных сетях я такого не встречал. Там сетка часто ошибается, поэтому на продолжительном историческом участке она совершает приличное количество сделок даже без стопов и тейков.

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

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

Еще одна фишка - это динамическая нормировка входных данных. Если применять статическую, то любое изменение волатильности (на форвардах она обязательно изменится) будет влиять на результат. У меня эта проблема решена в пользу динамической.

 
Reshetov:

....

А входы как на предыдущей странице? Скользкое там место период машки... Прям даже не представляю, что такого колдовского можно было сотворить с НС, что бы получать результат на таком примитиве. И что правда, где обучающую выборку не возьми - на ООS прет в гору? Результат действительно стабилен? Другие пары и инструменты как? EURUSD для предсказания самая простая.

Reshetov:

Пришлось еще поизголяться над торговой стратегией, дабы не позволить сетке подгоняться

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

Reshetov:

Еще одна фишка - это динамическая нормировка входных данных. Если применять статическую, то любое изменение волатильности (на форвардах она обязательно изменится) будет влиять на результат. У меня эта проблема решена в пользу динамической.

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

 
Figar0:

А входы как на предыдущей странице? Скользкое там место период машки...

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

Figar0:


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

...

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

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

А изголялся:

1. Над минимизацией кода. Метод Микеланджело: берем каменную глыбу, отсекаем ненужное, получаем скульптуру (позднее этот метод приписали Оккаму и его бритве).

2. Обходил ограничения тестерной оптимизации

3. Загрублял ТС до такого уровня толстокожести, чтобы избавиться от подгонки

Figar0:

И что правда, где обучающую выборку не возьми - на ООS прет в гору? Результат действительно стабилен? Другие пары и инструменты как? EURUSD для предсказания самая простая.

Результаты на OOS разные, есть и сливные. Было бы удивительно, если после заведомо подгоночных результатов сетка не сливала по спреду. Я не говорил, что они все в профит, а говорил, что выбрал самый "вкусный" (возможно есть и еще более "аппетитные", т.к. я их все не смотрел - их там слишком много).

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

Из других пар немного проверял на золоте и GBPUSD - примерно тоже самое.

 
Reshetov:

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

Сегодня наконец-то завершил сборку нейросети, написанной полностью на MQL4 c архитектурой 3:3:1 (три нейрона на входе, три входа скрытого, один на выходе). Все слои настраиваются с помощью тестерного ГА. Но трабла в том, что для 1 слоя нужно минимум 12 входных параметров, хотя бы со значениями от -1 до 1 с шагом 1 (как у Розенблата). А оптимизатор столько уже не тянет. Пришлось изголяться и упрощать первый слой.

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

Сигналы на входах весьма примитивны:

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

Овчинка выделки стоила, хотя все мозги наизнанку вывернула:

Это результаты теста. С 1 по 273 сделку - оптимизация, дальше форвардный тест.

А вот форвардный тест:

Вот результаты форвардного теста:

Strategy Tester Report
RNN
Alpari-Demo (Build 409)

Символ EURUSD (Euro vs US Dollar)
Период 1 Час (H1) 2011.10.24 00:00 - 2012.01.13 23:59 (2011.10.24 - 2012.01.14)
Модель По ценам открытия (только для советников с явным контролем открытия баров)
Параметры t1=54; t2=4; t3=48; x1=194; x2=128; x3=68; y1=1; y2=1; y3=-1; t4=136; sl=900; lots=1; mn=888;

Баров в истории 2431 Смоделировано тиков 3862 Качество моделирования n/a
Ошибки рассогласования графиков 0




Начальный депозит 10000.00



Чистая прибыль 14713.00 Общая прибыль 40711.60 Общий убыток -25998.60
Прибыльность 1.57 Матожидание выигрыша 88.10

Абсолютная просадка 2721.60 Максимальная просадка 4800.00 (39.74%) Относительная просадка 39.74% (4800.00)

Всего сделок 167 Короткие позиции (% выигравших) 101 (67.33%) Длинные позиции (% выигравших) 66 (92.42%)

Прибыльные сделки (% от всех) 129 (77.25%) Убыточные сделки (% от всех) 38 (22.75%)
Самая большая прибыльная сделка 900.00 убыточная сделка -907.20
Средняя прибыльная сделка 315.59 убыточная сделка -684.17
Максимальное количество непрерывных выигрышей (прибыль) 13 (2557.00) непрерывных проигрышей (убыток) 4 (-3605.40)
Максимальная непрерывная прибыль (число выигрышей) 3511.60 (11) непрерывный убыток (число проигрышей) -3605.40 (4)
Средний непрерывный выигрыш 4 непрерывный проигрыш 1





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


Спасибо за подсказку! Вы и Vinin для меня Вы в авторитете. Сколько времени прошло, а до сих пор занимаетесь Этой темой.Я собрал ваши работы в интернете.Самое интересное, что ВЫ оба правы и ВЫ не знаете, что ВЫ идете паралельно, к одной цели. Я взял, у одного и взял у другого, а теперь жду результата. Вы создаете новое направление, но очень сложное!!
Причина обращения: