Обсуждение статьи "Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция"

 

Опубликована статья Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция:

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

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

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

В процессе объединения полученного эмбединга с тензором исходных данных возможны варианты. Это может быть как простая конкатенация 2 тензоров, так и адамарное (поэлементное) умножение 2 матриц.

Ниже приведено сравнение рассмотренных архитектур, представленное авторами статьи.


Эффективность модели подтверждается проведенными тестами на 57 играх Atari. Ниже представлена сравнительная таблица из оригинальной статьи [8


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

Автор: Dmitriy Gizlyk

 

Thank you.

trying this, and I was able to successfully compile everything with no error. 

testing on eurusd and getting the error below.

any idea?


2022.11.30 11:51:46.689 Core 08 genetic pass (0, 286) tested with error "OnInit returned non-zero code 1" at 0:00:00.000


thanks


 
Arjang Aghlara #:

Thank you.

trying this, and I was able to successfully compile everything with no error. 

testing on eurusd and getting the error below.

any idea?


2022.11.30 11:51:46.689 Core 08 genetic pass (0, 286) tested with error "OnInit returned non-zero code 1" at 0:00:00.000


thanks


Hi, for run EA in tester you need to copy nnw file to "MetaQuotes\Terminal\Common\Files" directory.

 

Спасибо!

Ваша "производительность" поражает. Не останавливайтесь!

На таких как Вы всё держится!

P.S.

Я читал новости НейроСетей...

"Нейросети тоже нуждаются в состояниях, напоминающих сны.

К такому выводу пришли исследователи из Национальной лаборатории Лос-Аламоса..."

 

Доброго времени.

По Вашему коду сделал подобие "Сна" НейроСети.

Процент "спрогнозированных" увеличился на 3%. Для моего "СуперКомпа" - это полет в космос!

//+------------------------------------------------------------------+
//|                    dream                                         |
//+------------------------------------------------------------------+
int  Dream(int dream = 0)
{
   Comment("!!! Dream !!! ");
   int sleep = (dream==0 ? 7 : dream);

   for(int j=0;j<sleep;j++)
     {
         TempData.Clear();
         for(int b=0; b<(int)HistoryBars; b++) 
           {
            if(
               !TempData.Add(0.0) || !TempData.Add(0.0) || !TempData.Add(0.0) || 
               !TempData.Add(0)   || !TempData.Add(0)   || !TempData.Add(0)   ||
               !TempData.Add(0.0) || !TempData.Add(0.0) ||
               !TempData.Add(0.0) || !TempData.Add(0.0) || 
               !TempData.Add(0.0) || !TempData.Add(0.0)
              )
               break;
           }
         if(TempData.Total()<(int)HistoryBars*12)
            return(0);
         Net.feedForward(TempData);
         Net.getResults(TempData);
               //-- Можно посмотреть на "Сны" НейроСети
                  switch(TempData.Maximum(0,3))
                    {
                     case 0:
                        dPrevSignal=TempData[0];  
                        break;
                     case 1:
                        dPrevSignal=-TempData[1];
                        break;
                     default:
                        dPrevSignal=0;
                        break;
                    }
               //-- ... но это не принципиально.
        //--???
         TempData.Clear();
         TempData.Add(0.0);
         TempData.Add(0.0);
         TempData.Add(0.0);
         Net.backProp(TempData);
        //--???
      }
   return(0);
}

Применял эту функцию в конце каждой эпохи обучения:

      if(add_loop)
         count++;
      if(!stop)
        {
         dError=Net.getRecentAverageError();
         if(add_loop)
           {
            Net.Save(FileName+".nnw",dError,dUndefine,dForecast,dtStudied,true);
            printf("Era %d -> error %.2f %% forecast %.2f",count,dError,dForecast);
           }
         ChartScreenShot(0,(string)FileName+(string)IntegerToString(count)+".png",750,400);
        }
      Dream(SleepPeriod); //-- Сон
      printf("Период сновидений = %.2f !",SleepPeriod);
     }

Вы могли бы протестировать и потом прокомментировать как Вы это делаете? Вдруг "Сны" помогут ИИ?

P.S.

SleepPerriod=1;

Я добавлял к 

SleepPeriod
SleepPeriod  + (Delta++)

где Дельта=0. Но мой компьютер Очень, очень слабый... :-(  

Обсуждение статьи "Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция"
Обсуждение статьи "Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция"
  • 2022.11.29
  • www.mql5.com
Опубликована статья Нейросети — это просто (Часть 34): Полностью параметризированная квантильная функция : Автор: Dmitriy Gizlyk...
 
Do we add the FQF layer as the last layer of the neural network