Обсуждение статьи "Нейросети — это просто (Часть 57): Стохастический маргинальный актер-критик (SMAC)" - страница 2

 
JimReaper #:
//--- layer 5
     if (!(descr = new CLayerDescription())) return false;
     descr.type = defNeuronConvOCL;
     prev_count = descr.count = prev_count - 1;
     descr.window = 3;
     descr.step = 1;
     descr.window_out = 8;
     descr.activation = LReLU;
     descr.optimization = ADAM;
     if(!actor.Add(descr))
          {
               delete descr;
               return false;
          }

Для вставки кода нужно применять соответствующую кнопку

С уважением, Владимир.

 
Если сделать по схеме предложенной JimReaper или просто добавить больше индикаторов или увеличить глубину истории HistoryBars 50 или 100, то при создании базы примеров в тестере советником Research сохраняется меньше примеров за один проход оптимизации. Параметр MinProfit при сборе стоит -10000 и не влияет. К примеру ставлю 50 проходов, а в базу попадает только 41 проход. Притом чем больше пытаюсь захватить глубины истории HistoryBars, тем меньше проходов сохраняется в базе. И при сборе дополнительных проходов на итерациях обучения, с каждым проходом всё меньше и меньше проходов сохраняется в базу. Ещё заметил что размер файла *.bd, не может превысить 3 Гб. Как будто во что-то упирается по размеру. Подскажите как это можно преодолеть?
 
Кто-нибудь может помочь мне понять, как использовать код в статье для тестирования и демо-торговли. Благодарю всех за помощь!
 

Каждый проход советника Test дает кардинально разные результаты, как будто модель отличается от всех предыдущих. Очевидно, что модель эволюционирует при каждом проходе Test, но поведение этого советника вряд ли можно назвать эволюцией, так что же за этим стоит?

Вот несколько фотографий:

график1

график2

график3

 

Похоже, что операции покупки и продажи недостаточно контролируются в скриптах Test и, возможно, Research. Вот некоторые сообщения:

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 Состояние текущего счета: Баланс: 9892.14, Кредит: 0.00, Комиссия: 0.00, Накоплено: 0.00, Активы: 0.00, Обязательства: 0.00, Капитал: 9892.14, Маржа: 0.00, FreeMargin: 9892.14

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 рассчитано состояние счета: Активы: 0.00, Обязательства: 0.00, Equity 9892.14, Margin: 11359.47, FreeMargin: -1467.33
2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 недостаточно денег [market buy 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465]

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 failed market buy 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465 [нет денег]

Если не предполагается превышение маржи, простые лимиты, установленные на buy_lot после строки 275 и после строки 296 на sell_lot, устранили бы такое поведение тестового скрипта.

 
Chris #:

Каждый проход советника Test дает кардинально разные результаты, как будто модель отличается от всех предыдущих. Очевидно, что модель эволюционирует при каждом проходе Test, но поведение этого советника вряд ли можно назвать эволюцией, так что же за этим стоит?

Вот несколько фотографий:


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

 

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

Тестовый скрипт загружает обученную модель в подпрограмме OnInit (строка 99). Здесь мы загружаем в советник модель, которая не должна меняться во время обработки теста. Насколько я понимаю, она должна быть стабильной. Тогда и конечные результаты не должны измениться.

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

Случайность скорее наблюдается в модуле Research и, возможно, в Study при оптимизации политики.

Actor вызывается в строке 240 для вычисления результатов фидфорвардинга. Если он не инициализируется случайным образом в момент создания, то, на мой взгляд, он не должен вести себя случайным образом.

Находите ли вы какие-либо заблуждения в приведенных выше рассуждениях?

 
Chris #:

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

Тестовый скрипт загружает обученную модель в подпрограмме OnInit (строка 99). Здесь мы загружаем в советник модель, которая не должна меняться во время обработки теста. Насколько я понимаю, она должна быть стабильной. Тогда и конечные результаты не должны меняться.

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

Случайность скорее наблюдается в модуле Research и, возможно, в Study при оптимизации политики.

Actor вызывается в строке 240 для вычисления результатов фидфорвардинга. Если он не инициализируется случайным образом в момент создания, а я считаю, что это именно так, то он не должен вести себя случайным образом.

Находите ли вы какие-либо заблуждения в приведенных выше рассуждениях?

Актор использует стохастическую политику. Мы реализуем ее с помощью VAE.

//--- слой 10
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronBaseOCL;
   descr.count = 2 * NActions;
   descr.activation = SIGMOID;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }
//--- слой 11
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronVAEOCL;
   descr.count = NActions;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }

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

Neural networks made easy (Part 21): Variational autoencoders (VAE)
Neural networks made easy (Part 21): Variational autoencoders (VAE)
  • www.mql5.com
In the last article, we got acquainted with the Autoencoder algorithm. Like any other algorithm, it has its advantages and disadvantages. In its original implementation, the autoenctoder is used to separate the objects from the training sample as much as possible. This time we will talk about how to deal with some of its disadvantages.
 
Тестовый сценарий скорее дает представление о возможностях остальной части алгоритма. Поскольку на этапе создания VAE все еще существует определенная степень свободы в виде переменных, незарегистрированных начальных значений веса, невозможно создать и воссоздать полную, оптимальную модель. В этом ли должна была заключаться цель этого сценария?
 
Это великолепный образ.