Обучение с подкреплением (RL) обычно используется в таких областях, как автономное вождение, робототехника и компьютерные системы. Знаменитая компьютерная программа AlphaGo, которая обыграла нескольких игроков в го мирового класса, разработана RL. Из любопытства меня интересует его эффективность в количественной торговле. В блоге я применил известную модель Deep Q-network (DQN), которая сочетает в себе глубокое обучение и обучение с подкреплением для реализации ежедневной алгоритмической торговли.

Что такое РЛ?

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



Глубокое обучение с подкреплением (DRL) и глубокая Q-сеть (DQN)

Традиционные алгоритмы RL, такие как Q-learning и SARSA, в основном используются для решения задач, где пространство состояний является дискретным и конечным. Например, когда мы играем в нарды, мы видим на доске разные комбинации фигур, и это наши возможные состояния. Теоретически мы можем решить такие проблемы, используя традиционные алгоритмы RL, построив q-таблицу, записывающую q-значения для каждой возможной пары состояния и действия, и агент будет выполнять действие, обеспечивающее максимальное q-значение в соответствии с таблицей, чтобы максимизировать общее вознаграждение. Однако в игре в нарды количество возможных состояний составляет примерно 10²⁰! Если мы хотим решить задачу традиционным способом, нам нужна очень большая q-таблица, а время вычислений неприемлемо. Более того, большинство задач имеют непрерывное пространство состояний, которое невозможно решить с помощью этих дискретных алгоритмов, особенно в финансах. Поэтому нам нужно прибегнуть к глубокому обучению с подкреплением (DRL). В DRL мы используем аппроксимацию функции ценности для оценки значения q.

Левая часть в приведенном выше уравнении — это оценка, которую мы используем для аппроксимации истинного значения q. Это функция с параметрами ϕ. Это могут быть любые функциональные модели, такие как линейная регрессия, случайный лес или нейронная сеть. Входные данные функции — это векторы состояния и действия, а выходные данные — одно значение q, представляющее, какую прибыль мы ожидаем получить в будущем, если окажемся в состоянии s и предпримем действие a,и мы продолжаем политику π. Таким образом, вместо того, чтобы хранить большую q-таблицу, теперь нам нужно хранить только модель с параметрами ϕ, и любое значение q может быть рассчитано по подобранной модели. Если модель представляет собой нейронную сеть, то мы получаем Deep Q-network (DQN).

Монте-Карло против временной разницы

Теперь, когда у нас есть нейронная сеть, нам нужно целевое значение (правая часть приведенного выше уравнения), чтобы мы могли обновить параметры ϕ с помощью градиентного спуска и решить проблему регрессии. Но в задачах RL мы не знаем истинного значения q, как мы можем провести регрессию? Есть два способа решить эту проблему: Монте-Карло (MC) и Временная разница (TD). В методе MC мы делаем симуляции игры до конца много раз и записываем кумулятивные награды. Мы используем эти фактические кумулятивные вознаграждения для расчета ожидаемых значений q (берем среднее значение) и рассматриваем эти ожидаемые значения q как целевые.

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

Метод TD может эффективно решить проблему и реализовать одношаговое обновление. В методе TD целевое значение q для sₜ и aₜ аппроксимируется одношаговым вознаграждением rₜ плюс значение q для sₜ₊₁ и aₜ₊₁ по оценкам нейронной сети.

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

Вообще говоря, методы TD используются чаще, чем методы MC, из-за их способности реализовывать одноэтапное обновление и меньшую дисперсию. В алгоритмической торговле у нас нет явного конечного дня, и теоретически мы можем торговать вечно, поэтому нам нужно применить метод TD для расчета целевых значений q. Для получения более подробной информации о методах MC и TD я рекомендую главы 5 и 6 книги Обучение с подкреплением: введение, написанной Саттоном и Барто.

Методы в DQN

Существуют различные инженерные методы, которые мы можем использовать в моделях DQN. Здесь я представляю только три из них, которые я считаю наиболее важными: Целевая сеть, Политика ϵ-greedy и Воспроизведение опыта.

Целевая сеть

Помните, что когда мы применяем метод TD для оценки целевого значения q, он включает оценочное значение q из нашей нейронной сети. Поскольку мы продолжаем обновлять параметры в нашей нейронной сети, целевые значения также будут постоянно меняться, чего мы не хотим, потому что это сделает наш процесс подбора нестабильным. Как решить проблему? Мы создаем другую сеть под названием целевая сеть и используем ее для получения целевого значения q. Вначале мы создаем две идентичные нейронные сети, одну из которых называем сетью политик, а другую — целевой сетью. Когда мы начинаем обучение, мы обновляем параметры только в сети политик и используем целевую сеть только для оценки цели. После того, как мы обновили параметры в сети политик определенное количество раз (например, 1000 раз или после 5 эпизодов), мы устанавливаем параметры в целевой сети равными параметрам в сети политик и продолжаем обучение. Это сделает процесс установки более стабильным.

ϵ-жадная политика

В RL мы часто сталкиваемся с дилеммой разведка-эксплуатация. Представьте, что вы хотите найти местный ресторан, чтобы пообедать. У вас может быть склонность выбирать свой любимый ресторан, потому что вы можете гарантировать, что он вас не подведет. Тем не менее, поблизости могут быть еще несколько фантастических ресторанов, о которых вы не знали, и вы никогда не войдете, если всегда будете выбирать свой любимый. Аналогичная ситуация и в РЛ. В первом эпизоде ​​агент случайным образом выбирает действия и получает вознаграждение. Если награды окажутся хорошими, в следующих эпизодах агент всегда будет выбирать одни и те же действия и не будет исследовать другие возможные действия, которые могут быть еще лучше! Вот почему нам нужна политика ε-жадности, чтобы сбалансировать разведку и эксплуатацию. ϵ-жадная политика означает, что у нас есть вероятность 1-ϵ выбрать действие в соответствии с q-значением и вероятность ϵ выбрать действие случайным образом. Обычно ϵ со временем уменьшается.

Повтор опыта

Воспроизведение опыта означает, что мы создаем буфер воспроизведения для хранения данных моделирования в форме (sₜ, aₜ, rₜ, sₜ₊₁). Каждый раз, когданам нужно обновить параметры сети, мы выбираем мини-пакет из буфера воспроизведения и реализуем градиентный спуск. Это похоже на мини-пакетный градиентный спуск. Преимущество использования воспроизведения опыта заключается в том, что оно значительно сокращает время моделирования, поскольку мы можем неоднократно использовать прошлый опыт, чтобы подогнать нашу модель, что делает наш процесс подбора более эффективным.

Алгоритмическая торговая среда

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

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

где K — длина окна, которое можно изменить как гиперпараметр.

Пространство действий представляет возможные позиции, которые трейдер может открывать каждый день. Для простоты поле действия содержит только три возможных числа: -1, 0 и 1. Это означает, что трейдер может открывать длинные позиции, открывать короткие позиции или оставаться нейтральным, но только на фиксированную величину.

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

Настройка данных и гиперпараметров

Для ценовых данных я выбрал 12 акций/индексов социальных сетей и взял их из Yahoo Finance. Диапазон времени был с 01.01.2020 по сегодняшний день. Я использовал 8 из 12 акций/индексов в качестве обучающих данных (ZM, TWTR, FB, MTCH, GOOG, PINS, SNAP, ETSY), а остальные 4 — в качестве тестовых данных (IAC, ZNGA, BMBL, SOCL).

Для Q-сети я применил трехуровневую полносвязную сеть с функцией активации ReLU. Вот моя настройка гиперпараметра:

class Config:
    def __init__(self):
        ### environment hyperparameters ###
        self.algo_name = 'DQN' # algorithmic name
        self.env_name = 'TradingSystem_v0' # environment name
        self.device = torch.device(
            "cuda" if torch.cuda.is_available() else "cpu")  # examine GPU
        self.seed = 11 # random seed
        self.train_eps = 200 # training episodes
        self.state_space_dim = 50 # state space size (K-value)
        self.action_space_dim = 3 # action space size (short: 0, neutral: 1, long: 2)
        ### algorithm hyperparameters ###
        self.gamma = 0.95  # discount factor
        self.epsilon_start = 0.90  # start epsilon of e-greedy policy
        self.epsilon_end = 0.01  # end epsilon of e-greedy policy
        self.epsilon_decay = 500  # attenuation rate of epsilon in e-greedy policy
        self.lr = 0.0001  # learning rate
        self.memory_capacity = 1000  # capacity of experience replay
        self.batch_size = 64  # size of mini-batch SGD
        self.target_update = 4  # update frequency of target network
        self.hidden_dim = 128  # dimension of hidden layer

Производительность

Модель DQN, которую мы обучили, хорошо работала для больших значений K, таких как 20 и 50. Для K=50 мы видим, что скользящее среднее общего вознаграждения за обучение продолжает увеличиваться во время обучения. процесс (примерно до 5). По сравнению с простой стратегией «купи и держи», модель DQN превзошла ее для всех 12 акций/индексов, что указывает на то, что модель каким-то образом успешно уловила некоторые закономерности, лежащие в основе доходности акций/индексов, и может обеспечить удовлетворительную прибыль.

Весь код можно найти на моем GitHub :)



Ссылки:

Ян, Х., Лю, X., Чжун, Шан., и Валид, А. (2020). Глубокое обучение с подкреплением для автоматизированной торговли акциями: стратегия ансамбля. На ICAIF ’20: Международная конференция ACM по искусственному интеллекту в финансах, 15–16 октября 2020 г., Манхэттен, штат Нью-Йорк. ACM, Нью-Йорк, штат Нью-Йорк, США. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3690996

Ван, К., Ян, Ю., и Цзян, Дж. (2021). EasyRL. Репозиторий GitHub: https://github.com/datawhalechina/easy-rl

FinRL: Глубокое обучение с подкреплением для количественных финансов. Репозиторий GitHub: https://github.com/AI4Finance-Foundation/FinRL

Саттон, Р.С., и Барто, А.Г. (2018). Обучение с подкреплением: введение. Пресс МТИ.

Ян, Б. (2020, 24 августа). Глубокое обучение с подкреплением для автоматизированной торговли акциями. Получено с https://towardsdatascience.com/deep-reinforcement-learning-for-automated-stock-trading-f1dad0126a02