Нейронные сети: проблема "кормления"

 

Здрассте всем,

я тут последнее время "бодаюсь" с НС (я уже об этом как-то писал). Написал, в общем, engine на java, который воспитывает НС, а также советника, который общается с НС и воплощает в жизнь ее команды купи/продай. Этот же советник сохраяет данные для тренировки. Следующий этап, собственно, подборка вводных величин. Но тут проблема:

  • похоже, что двумя дюжинами параметров не обойтись. Или я не там ищу. Везде написано, что сеть можно "кормить, чем хочешь" - только толку с этого немного... по крайней мере в пределах 30 вводных
  • Я чувствую себя пойманным в том таймфрейме, в котором работает советник. Не придумаю, как из него выбраться. Суть в том, что для обучения используются данные из истории. Можно, например, посчитать iStochastiс[n] (я знаю, что это неправильное написание!). Так как советник работает на каждом новом баре, то iStochastiс[n] в реальной торговле выглядел совершенно иначе (не было еще всех данных по бару n). В итоге сеть воспитуется на неправильных данных. По этой же причине не получается работать со старшими таймфреймами. Запрос iMA[0] старшего таймфрейма в начале нового бара и в начале следующего бара дает совершенно разные результаты. А история даст третий.

Может, у кого-то есть опыт, чем кормить НС...

Для справки код советника:

Файлы:
evolvenn.mq4  11 kb
 

Кормить надо тем что легче поддаётся прогнозу :)


Данные: 11,12,35,14,25,37,41,86,48,21,26,13,57 ...

Тогда для 3 входов имеем таблицу обучения

входы/ответ

11,12,35/14

12,35,14/25

35,14,25/37

14,25,37/41

25,37,41/86

37,41,86/48

41,86,48/21

86,48,21/26

48,21,26/13

21,26,13/57

Ну а теперь прогноз

26,13,57/ ???

 
MaStak писал(а) >>

Кормить надо тем что легче поддаётся прогнозу :)

не, два выхода: открыть (держать) позицию / закрыть. Посмотри советника, все станет понятно.

И обучение сети не по back propagation, а генетикой. Так что задача выглядит несколько иначе :)

 
YDzh писал(а) >>

не, два выхода: открыть (держать) позицию / закрыть. Посмотри советника, все станет понятно.

И обучение сети не по back propagation, а генетикой. Так что задача выглядит несколько иначе :)

ИМХО, слишком разные задачи для одной НС - и вход и выход...

Для начала лучше упростить и разделить - чем "проще" задача, тем лучше можно обучить НС.

 

Очень интересная тема, только совершенно не раскрыта.

может у кого-то найдутся ответы на этот вопрос

что подавать на вход НС?

которыми он готов поделиться?

 

MaStak немного неправ. Так кормить - отравить сетку можно.

Система питания для НС - дело реально очень сложное. 

Есть одно мудрое золотое правило: если знаешь чем кормит НС и требовать от неё на выходе, то НС уже ненужна, так как ты и так знаешь чему обучать.

Я как то поднимал на форуме этот вопрос: Как правильно сформировать входные значения для НС. https://forum.mql4.com/ru/13787

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

Поэтому Самое Первое Правило для составления входов - постаратся МАКСИМАЛЬНО УМЕНЬШИТЬ противоречивость данных.

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

Мастак предложил такую схему - но она очень плохая. Ведь вы собираетесь работать с двумя знаками + и - (вверх/вниз покупать/продавать). А значит, что вам также надо входные вектора задавать (преобразовывать) в аналогичное пространство. Чтоб вектора были направлены как в + так и в -. Тогда сетке легче будет их аппроксимировать к выходам и ошибки считать. 

Для таких вариантов я бы порекомендовал в качестве входного вектора задавать данные из только одного закрытого бара. (например разницу 20 МА)

Dima_S прав - чем проще задача, те легче найти непротиворечивые пары.


Чтоб быстрее понять что происходит у вас в сети на входе и выходе  я бы вам порекомендовал создать мониторинг процесса обчучения. То есть сделать обозначающие значки (объекты стрелочки) над барами и их степень соответствия (можно в цветовой градации) требуемым выходам. 

Если вы уже немного ладите с MQL5. то можете воспользоваться моим мониторингом (объяснять ничего не будут, в коде всё сами поймёте, там просто). 

А ещё постарайтесь в своём воображении визуализировать будущую работу сети. Что она принимает на вход и что должна выдать на выходе. Это тоже поможет правильно задать пары вход/выход.

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

Файлы:
 
пример анализа требуемых выходов
 
YDzh >>:

Я чувствую себя пойманным в том таймфрейме, в котором работает советник. Не придумаю, как из него выбраться. Суть в том, что для обучения используются данные из истории. Можно, например, посчитать iStochastiс[n] (я знаю, что это неправильное написание!). Так как советник работает на каждом новом баре, то iStochastiс[n] в реальной торговле выглядел совершенно иначе (не было еще всех данных по бару n). В итоге сеть воспитуется на неправильных данных. По этой же причине не получается работать со старшими таймфреймами. Запрос iMA[0] старшего таймфрейма в начале нового бара и в начале следующего бара дает совершенно разные результаты. А история даст третий.

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

Пусть он сохранит файл. Этот файл можно потом сравнить с тем, что записывает скрипт.

В реальной торговле также можно добавить контроль на открытие бара.

 

Есть одно мудрое золотое правило: если знаешь чем кормит НС и требовать от неё на выходе, то НС уже ненужна, так как ты и так знаешь чему обучать.

задача обучения НС как раз состоит в поиске зависимости между входами и выходами - функции НС

если функция проста и поддаеться осмыслению человеком - правило работает

иначе - именно нейросеть лучше подходит для поиска этой функции


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

Поэтому Самое Первое Правило для составления входов - постаратся МАКСИМАЛЬНО УМЕНЬШИТЬ противоречивость данных.

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

...

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

дополнительные индикаторы - вот эта идея мне нравится

а если бороться с противоречивостью данных путем увеличения входного вектора?

то есть

в обучающей авыборке на входе MA2, MA4, MA8, MA12 - имеем 2 противоречивых выхода

тогда увеличиваем количество входов добавив например Momentum5 - и надеемся что противоречивость уходит


и все же что именно подавать в сеть?

 

Ребята, вы реально не понимаете возможностей нейросетей.

 
registred >>:

Ребята, вы реально не понимаете возможностей нейросетей.



Да понимают все что они могут. вот только как эти возможности из неё выжать - вот в этом сложность.
Причина обращения: