"Новый нейронный" - проект Open Source движка нейронной сети для платформы MetaTrader 5. - страница 60

 
joo:

Поштучно - понимаю.

А остальные варианты - не понял. Как можно подать на обучение сразу все примеры? - или туплю?

Ну ты же подавал при обучении сетки ГА все примеры сразу (высчитывая суммарное значение ФФ на всех примерах), алгоритмы обучения бывают разные, бекпроп например подаёт по одному примеру в случайном порядке, но прокручивает при этом весь список примеров несколько раз, так почему бы не дать алгоритму все примеры сразу, а уже он по своей логике будет их выдавать сетке.

ЗЫ Не тупишь а просто не в теме чего я там навыдумывал, утрясу всё выложу с пояснениями.

ЗЗЫ Просто сейчас не совсем готов всё пояснять, самому бы разобраться :)

 
gpwr:

Rebyata, ya budu redko syuda zahodit'. Esli est' voprosi ili interes k sovmestnim razrabotkam, pishite na moy yahoo email (ukazan v profile).

Good luck with the EngiNeuro project! 

Спасибо, Владимир! Заходи чаще :)

Urain:

Все сразу

Тоже раньше думал, что поштучно лучше всего. Ан нет. Градиентные алгоритмы разработаны именно под суммарную ошибку, поэтому если подавать поштучно, это уже не совсем градиентный спуск.

Поэтому только все сразу, по крайней мере для feed-forward

 
TheXpert:

Спасибо, Владимир! Заходи чаще :)

Тоже раньше думал, что поштучно лучше всего. Ан нет. Градиентные алгоритмы разработаны именно под суммарную ошибку, поэтому если подавать поштучно, это уже не совсем градиентный спуск.

Поэтому только все сразу, по крайней мере для feed-forward


Да это зависит от реализации алгоритма, я сейчас мозгую ничего ли не забыл?
 

Заметки об обучении НС

1) Фитнес-функция (функционал обучения) 

Любой процесс обучения НС сводится к поиску максимума(минимума) функционала в пространстве адаптивных аргументов (в нашем случае - это пространство весов)

2) MSE 

Классический вариант функционала - это MSE (mean square error)

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

Для каждого примера, который подается на вход НС, мы получаем ответ сети - y, и имеем "правильный ответ" - y'

Для пошагового метода обучения веса подстраиваются после каждого примера. В этом случае MSE=МОДУЛЬ(y-y')

Для пакетного метода веса подстраиваются после прогона по всей обучающей выборке. Здесь MSE=КОРЕНЬ((СУММА(y-y'))^2)

Основной недостаток MSE - необходимо иметь "правильный" ответ для каждого примера  

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

3) Нестандартные функционалы 

Более широкий круг задач позволяют решить нестандартные функционалы 

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

Здесь оценка производится после полного прогона по обучающей выборке, поскольку оценить работу стратегии можно только в конце периода

Очень приятное замечание - нам не надо иметь правильный ответ для каждого бара 

Есть и неприятное "но": нет возможности найти частную производную функционала по каждому весу, поэтому градиентные методы постройки весов неприемлемы - нужно использовать стохастические методы, например, ГА 

Именно здесь всплывают GPU - бюджетной альтернативы им пока не видно

 

P.S.

В отличие от оптимизатора параметров каждой конкретной торговой стратегии, нейросети позволяют "выращивать" полностью синтетические алгоритмы торговых стратегий )))

И потенциал такого подхода очень велик 

 

Готовлю функцию по сохранению сетки в бин-файл. Вся информация легко шифруется в массив улонгов, но вот чё делать с весами ума не приложу.

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

Есть у кого то алгоритм восстановимого шифрования double в ulong?


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

 
Urain:

Готовлю функцию по сохранению сетки в бин-файл. Вся информация легко шифруется в массив улонгов, но вот чё делать с весами ума не приложу.

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

Есть у кого то алгоритм восстановимого шифрования double в ulong?


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


Чем FileWriteArray не устраивает? Непонятна проблема. Можно пример подробнее?

В любом случае, конфигурацию сетки в один файл, веса в другой.

Удобней для MQL не вижу, и зачем шифровать восстанавливать, лишние тормоза. 

 
her.human:

Чем FileWriteArray не устраивает? Непонятна проблема. Можно пример подробнее?

В любом случае, конфигурацию сетки в один файл, веса в другой.

Удобней для MQL не вижу, и зачем шифровать восстанавливать, лишние тормоза. 

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

Под FileWriteArray как раз и хочу заточить, но в наличии массив ulong формирующий описание сети (количество слоёв, количество нейронов, типы нейронов, связи между ними) и к нему ещё приложен массив весов но уже в дублях,

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

 
Urain:

0.  Готовлю функцию по сохранению сетки в бин-файл. Вся информация легко шифруется в массив улонгов, но вот чё делать с весами ума не приложу.

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

1.  Есть у кого то алгоритм восстановимого шифрования double в ulong?


2.  Думаю что сетку нужно сохранять в простой удобный для использования в MQL5 формат(приняв его за базовый), а уже из него писать преобразователи под разные форматы разных нейросетевых пакетов.

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

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

   // ulong и double - как раз одинаковые.

   Извращённый пример глянь здесь : https://www.mql5.com/ru/forum/3775/75737#comment_75743

2. Мммм... С одной стороны соглашусь - формат нужен удобный и простой, с другой стороны - желательно, щёб он был очень универсальным, типа xml. Может быть запланировать два варианта (взимно однозначно отображаемых) один текстовый, другой бинарный.     А вапче -- см. пункт #0

---

Я тут кругами хожу вокруг ветки, всё сомневаюсь встревать/не встревать... Вот не сдержался. 

Мысля меня гложет. Одна. // В смысле мыслей многа, но гложет только одна. :)

Мысля такая:  Код сетки должон генерироваться после предварительного конфигурирования в "сеткоредакторе" (конфигураторе). // Эта идея уже неоднократно высказывалась и не помню чтоб отвергалась.

Отсюда схема - обязательное промежуточное представление (напр. в виде xml-файла), содержащее полную информацию о структуре нейросети.

Промежуточное представление тщательно продумывается, анализируется на полноту и прочие премудрости, утверждается и фиксируется.

Только после этого можно кодить (отдельно) : (1) Всякие разные сетко-конфигураторы, (2) Кодогенераторы - транслирующие промежуточное представление в код на mql5.

И тех и других может быть по нескольку реализаций - что хорошо и правильно.

 
Urain:

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

Под FileWriteArray как раз и хочу заточить, но в наличии массив ulong формирующий описание сети (количество слоёв, количество нейронов, типы нейронов, связи между ними) и к нему ещё приложен массив весов но уже в дублях,

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

Категорически против пихать все в один файл. Описание сети отдельно - веса отдельно. Иначе возникнут другие ненужные проблемы.

 
А почему bin? Может лучше простой текстовый файл, что бы смотреть глазками можно было?
Причина обращения: