Перейти к содержимому

Глава 292: SAC (Soft Actor-Critic) для трейдинга

Введение: обучение с подкреплением с максимальной энтропией для трейдинга

Soft Actor-Critic (SAC) — это алгоритм глубокого обучения с подкреплением, основанный на принципе максимальной энтропии. Предложенный Haarnoja и др. (2018), SAC одновременно максимизирует ожидаемую доходность и энтропию политики, создавая агентов, которые одновременно эффективны и устойчивы. Для трейдинга этот обогащённый энтропией целевой функционал означает стратегии, которые поддерживают здоровый уровень исследования, избегают преждевременной сходимости к хрупким детерминированным политикам и гибко адаптируются к изменяющимся рыночным режимам.

Традиционные алгоритмы обучения с подкреплением для трейдинга — такие как DQN или обычные методы градиента политики — часто сходятся к детерминированным политикам, которые переобучаются на исторических рыночных условиях. Когда происходит смена режима (например, переход от трендового к возвратному рынку), эти политики могут катастрофически провалиться. SAC решает эту фундаментальную проблему, явно поощряя агента оставаться стохастичным, исследуя множество жизнеспособных торговых стратегий одновременно, вместо преждевременной фиксации на единственном подходе.

В этой главе мы строим полную реализацию SAC на Rust для непрерывного управления размером позиции при торговле криптовалютами на бирже Bybit. Наш агент учится не только покупать или продавать, но и определять точный объём капитала для позиции — непрерывное пространство действий, с которым SAC работает естественным образом благодаря гауссовой политике с репараметризацией.

Математические основы

Целевой функционал максимальной энтропии

Стандартное RL максимизирует ожидаемую сумму дисконтированных наград:

J_standard(pi) = E_{tau ~ pi} [ sum_{t=0}^{T} gamma^t * r(s_t, a_t) ]

SAC дополняет это бонусом за энтропию, получая целевой функционал максимальной энтропии:

J_SAC(pi) = E_{tau ~ pi} [ sum_{t=0}^{T} gamma^t * ( r(s_t, a_t) + alpha * H(pi(.|s_t)) ) ]

где H(pi(.|s_t)) = -E_{a ~ pi} [log pi(a|s_t)] — энтропия политики в состоянии s_t, а alpha > 0 — параметр температуры, контролирующий баланс между максимизацией награды и максимизацией энтропии.

Температура alpha играет ключевую роль: при большом alpha агент предпочитает исследование и случайность; при alpha, стремящемся к нулю, SAC восстанавливает стандартный целевой функционал RL. Для трейдинга правильное значение alpha балансирует эксплуатацию известных прибыльных паттернов с исследованием новых стратегий — критически важно в условиях эволюционирующих рынков.

Мягкие Q-функции и парные критики

SAC использует мягкие Q-функции, включающие член энтропии. Мягкое уравнение Беллмана принимает вид:

Q_soft(s_t, a_t) = r(s_t, a_t) + gamma * E_{s_{t+1}} [ V_soft(s_{t+1}) ]

где мягкая функция ценности:

V_soft(s_t) = E_{a_t ~ pi} [ Q_soft(s_t, a_t) - alpha * log pi(a_t | s_t) ]

Для борьбы со смещением переоценки SAC использует парные критики (Q1 и Q2), беря минимум:

Q_target(s_t, a_t) = r + gamma * ( min(Q1_target(s', a'), Q2_target(s', a')) - alpha * log pi(a' | s') )

где a' ~ pi(.|s'). Этот приём отсечённого двойного Q, заимствованный из TD3, предотвращает эксплуатацию политикой завышенных Q-значений — особенно важно в зашумлённых финансовых средах, где изобилуют ложные корреляции.

Трюк репараметризации

SAC параметризует политику как гауссово распределение. Для обеспечения оптимизации на основе градиентов через операцию сэмплирования используется трюк репараметризации:

a_t = tanh( mu_theta(s_t) + sigma_theta(s_t) * epsilon ), epsilon ~ N(0, I)

Функция tanh гарантирует, что действия лежат в [-1, 1], что естественно отображается на размер позиции (от полного шорта до полного лонга). Логарифм вероятности должен учитывать это преобразование:

log pi(a|s) = log mu_gaussian(u|s) - sum_i log(1 - tanh^2(u_i))

где u — действие до сжатия. Эта коррекция необходима для правильного вычисления энтропии.

Автоматическая настройка температуры

Вместо ручной настройки alpha, SAC может обучать его, решая задачу условной оптимизации:

alpha* = argmin_{alpha} E_{a ~ pi*} [ -alpha * log pi*(a|s) - alpha * H_target ]

где H_target — целевая энтропия (обычно -dim(A) для непрерывных действий). Функция потерь для alpha:

L(alpha) = E_{a_t ~ pi} [ -alpha * ( log pi(a_t | s_t) + H_target ) ]

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

Почему максимизация энтропии полезна для трейдинга

1. Исследование в нестационарных средах

Финансовые рынки фундаментально нестационарны. Стратегия, работающая на бычьем рынке, может провалиться на медвежьем. Поддерживая энтропию в политике, агенты SAC продолжают исследовать альтернативные стратегии даже после нахождения прибыльных. Это непрерывное исследование позволяет агенту быстрее адаптироваться при смене рыночных режимов.

2. Устойчивость к рыночным изменениям

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

3. Обнаружение мультимодальных стратегий

Рынки часто одновременно предоставляют несколько жизнеспособных стратегий (например, моментум и возврат к среднему на разных временных масштабах). Целевой функционал энтропии SAC естественно обнаруживает и поддерживает несколько мод в политике, эффективно хеджируя между стратегиями.

4. Улучшенная эффективность использования данных

SAC является off-policy алгоритмом, что означает возможность обучения на исторических данных, собранных любой политикой. В сочетании с буфером воспроизведения это делает его значительно более эффективным, чем on-policy методы вроде PPO — критически важно, когда рыночные данные ограничены или дороги.

5. Непрерывное управление размером позиции

В отличие от дискретных RL методов, которые могут выдавать только {покупка, удержание, продажа}, SAC естественно работает с непрерывными действиями. Агент может выдавать точный размер позиции в [-1, 1], представляющий долю капитала для размещения. Такой гранулярный контроль позволяет более тонкое управление рисками.

Реализация на Rust

Наша реализация на Rust включает следующие основные компоненты:

Сеть актора (гауссова политика)

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

Парные критики (Q1, Q2)

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

Буфер воспроизведения

Буфер воспроизведения хранит переходы (состояние, действие, награда, следующее_состояние, done) и поддерживает равномерную случайную выборку для обучения на мини-батчах. Это обеспечивает off-policy обучение на историческом опыте.

Автоматическая настройка температуры

Параметр log-alpha оптимизируется для поддержания целевого уровня энтропии. Это динамически адаптирует баланс исследования-эксплуатации на протяжении обучения.

Цикл обучения

Обновление SAC выполняет следующие шаги на каждой итерации:

  1. Выборка мини-батча из буфера воспроизведения
  2. Обновление критиков с использованием мягкого резервного копирования Беллмана с двойным отсечением
  3. Обновление актора для максимизации Q-значения минус alpha * log_prob
  4. Обновление alpha для соответствия целевой энтропии
  5. Мягкое обновление целевых сетей методом усреднения Поляка

Интеграция с Bybit

Наша реализация получает реальные OHLCV данные из публичного API Bybit для бэктестинга. Агент наблюдает вектор признаков, составленный из:

  • Доходности цены за несколько периодов
  • Нормализованный объём
  • Простые оценки волатильности
  • Текущая позиция

Это обеспечивает агента достаточной информацией о рыночной микроструктуре для обучения осмысленным торговым стратегиям.

Сравнение с DDPG

ХарактеристикаSACDDPG
Тип политикиСтохастическая (гауссова)Детерминированная
ИсследованиеНа основе энтропии (внутреннее)Внешний шум (процесс ОУ)
ПереоценкаПарные критики + отсечениеОдин критик
ТемператураАвтонастройка alphaРучное расписание шума
УстойчивостьВысокая (регуляризация энтропией)Ниже (хрупкость к шуму)
Эффективность данныхВысокая (off-policy + энтропия)Умеренная (off-policy)

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

Ключевые выводы

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

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

  3. Трюк репараметризации обеспечивает градиентную оптимизацию стохастической гауссовой политики, естественно поддерживая непрерывное управление размером позиции в [-1, 1].

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

  5. Off-policy обучение с буфером воспроизведения делает SAC эффективным по данным, способным учиться на исторических рыночных данных без необходимости онлайн-взаимодействия.

  6. Устойчивость через регуляризацию энтропией делает политики SAC менее склонными к переобучению на конкретные рыночные режимы, обеспечивая более стабильные результаты вне выборки по сравнению с детерминированными альтернативами вроде DDPG.

  7. Реализация на Rust обеспечивает характеристики производительности, необходимые для торговых приложений реального времени, с гарантиями безопасности памяти, критически важными для финансовых систем.

Ссылки

  • Haarnoja, T., et al. (2018). “Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor.” ICML 2018.
  • Haarnoja, T., et al. (2018). “Soft Actor-Critic Algorithms and Applications.” arXiv:1812.05905.
  • Fujimoto, S., et al. (2018). “Addressing Function Approximation Error in Actor-Critic Methods.” ICML 2018.
  • Lillicrap, T., et al. (2015). “Continuous control with deep reinforcement learning.” (DDPG)