Обсуждение статьи "Нейросети — это просто (Часть 88): Полносвязный Энкодер временных рядов (TiDE)"

 

Опубликована статья Нейросети — это просто (Часть 88): Полносвязный Энкодер временных рядов (TiDE):

Желание получить наиболее точные прогнозы толкает исследователей к усложнению моделей прогнозирование. Что в свою очередь ведет к увеличению затрат на обучение и обслуживание модели. Но всегда ли это оправдано? В данной статье я предлагаю Вам познакомиться с алгоритмом, который использует простоту и скорость линейных моделей и демонстрирует результаты на уровне лучших с более сложной архитектурой.

Как и в ряде предыдущих статей, модель Энкодера состояния окружающей среды не зависит от состояния счета и открытых позиций. А следовательно мы можем обучать модель даже на обучающей выборке с одним проходом взаимодействия с окружающей до получения желаемой точности прогнозирования будущих состояний. Естественно, что "желаемая точность прогнрзирования" не модет превышать возможности самой модели. Вы должы помнить, что "нельзя прыгнуть выше головы".

После обучения модели прогнозирования состояний окружающей среды мы переходим ко второму эпапу — обучению политики поведения Актера. На этом этапе мы итерационно обучаем модели Актера и Критика с переобдическим обновлением буфера воспроизведения опыта.

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

В результате указанных итераций мне удалось обучить политику Актера, способную генерировать как на обучающей, так и на тестовой выборках.

Результаты тестирования модели Результаты тестирования модели

На представленном выше графике мы видим убыточную сделку в начале, которая затем сменяется явным прибыльным трендом. Да, доля прибыльных сделок состаляет менее 40%. Практически на 1 прибыльную сделку приходится 2 убыточных. Однако мы наблюдаем, что убыточние сделки значительно меньше прибыльных. Средняя прибыльная сделка почти в 2 раза превышает среднюю убыточную. Все это позволяет модели получить прибыль на тестовом периоде. По итогам теста профит-фактор составил 1.23.

Автор: Dmitriy Gizlyk

 

Здравствуйте, Дмитрий,

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

К сожалению, при тестировании этого алгоритма я столкнулся с несколькими ошибками. Вот несколько ключевых строк из журнала:

2024.11.15 00:15:51.269 Core 01 Iterations=100000

2024.11.15 00:15:51.269 Ядро 01 2024.01.01 00:00:00 TiDEEnc.nnw

2024.11.15 00:15:51.269 Ядро 01 2024.01.01 00:00:00 Создание новой модели

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 OpenCL: Выбрано GPU-устройство 'GeForce GTX 1060'

2024.11.15 00:15:51.269 Ядро 01 2024.01.01 00:00:00 Ошибка выполнения ядра bool CNeuronBaseOCL::SumAndNormilize(CBufferFloat*,CBufferFloat*,CBufferFloat*,int,bool,int,int,int,float) MatrixSum: неизвестная ошибка OpenCL 65536

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Train -> 164

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Train -> 179 -> Encoder 1543.0718994

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Вызвана функция ExpertRemove()

Есть ли у вас идеи, в чем может быть причина?

До этого OpenCL работал вполне нормально.

Крис.

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.11.13
  • www.mql5.com
Trader's profile
 
Chris ядра bool CNeuronBaseOCL::SumAndNormilize(CBufferFloat*,CBufferFloat*,CBufferFloat*,int,bool,int,int,int,float) MatrixSum: неизвестная ошибка OpenCL 65536

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Train -> 164

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Train -> 179 -> Encoder 1543.0718994

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Вызвана функция ExpertRemove()

У вас есть идеи, в чем может быть причина?

До этого OpenCL работал вполне нормально.

Крис.

Здравствуйте, Крис.

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

 
Dmitriy Gizlyk #:

Hy, Крис.

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

Привет. Никаких изменений не было. Я просто полностью скопировал папку "Experts" и запустил скрипты в том виде, в котором они были после компиляции, в таком порядке: "Исследование", "StudyEncoder", "Исследование" и "Тест". Ошибки появились на этапе "Тест". Единственным отличием был инструмент, т.е. смена EURUSD на EURJPY.

Крис

 

Дмитрий, у меня есть важное исправление. Ошибка появлялась после запуска StudyEncoder. Вот еще один пример:

2024.11.18 03:23:51.770 Core 01 Iterations=100000

2024.11.18 03:23:51.770 Core 01 2023.11.01 00:00:00 TiDEEnc.nnw

2024.11.18 03:23:51.770 Ядро 01 2023.11.01 00:00:00 Создание новой модели

2024.11.18 03:23:51.770 Core 01 opencl.dll успешно загружен

2024.11.18 03:23:51.770 Ядро 01 устройство #0: GPU 'GeForce GTX 1060' с OpenCL 1.2 (10 юнитов, 1771 МГц, 6144 Мб, версия 457.20, рейтинг 4444)

2024.11.18 03:23:51.770 Core 01 2023.11.01 00:00:00 OpenCL: Выбрано устройство GPU 'GeForce GTX 1060'

2024.11.18 03:23:51.770 Ядро 01 2023.11.01 00:00:00 Ошибка выполнения ядра bool CNeuronBaseOCL::SumAndNormilize(CBufferFloat*,CBufferFloat*,CBufferFloat*,int,bool,int,int,int,float) MatrixSum: неизвестная ошибка OpenCL 65536

2024.11.18 03:23:51.770 Core 01 2023.11.01 00:00:00 Train -> 164

2024.11.18 03:23:51.770 Core 01 2023.11.01 00:00:00 Train -> 179 -> Encoder 1815.1101074

2024.11.18 03:23:51.770 Core 01 2023.11.01 00:00:00 Вызвана функция ExpertRemove()


Крис