Обсуждение статьи "Нейросети — это просто (Часть 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 
 
Похожа ли архитектура nn на архитектуру из предыдущей статьи, за исключением последнего слоя?
 
happy side #:
Похожа ли архитектура nn на архитектуру из предыдущей статьи, за исключением последнего слоя?

да