Глава 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 выполняет следующие шаги на каждой итерации:
- Выборка мини-батча из буфера воспроизведения
- Обновление критиков с использованием мягкого резервного копирования Беллмана с двойным отсечением
- Обновление актора для максимизации Q-значения минус alpha * log_prob
- Обновление alpha для соответствия целевой энтропии
- Мягкое обновление целевых сетей методом усреднения Поляка
Интеграция с Bybit
Наша реализация получает реальные OHLCV данные из публичного API Bybit для бэктестинга. Агент наблюдает вектор признаков, составленный из:
- Доходности цены за несколько периодов
- Нормализованный объём
- Простые оценки волатильности
- Текущая позиция
Это обеспечивает агента достаточной информацией о рыночной микроструктуре для обучения осмысленным торговым стратегиям.
Сравнение с DDPG
| Характеристика | SAC | DDPG |
|---|---|---|
| Тип политики | Стохастическая (гауссова) | Детерминированная |
| Исследование | На основе энтропии (внутреннее) | Внешний шум (процесс ОУ) |
| Переоценка | Парные критики + отсечение | Один критик |
| Температура | Автонастройка alpha | Ручное расписание шума |
| Устойчивость | Высокая (регуляризация энтропией) | Ниже (хрупкость к шуму) |
| Эффективность данных | Высокая (off-policy + энтропия) | Умеренная (off-policy) |
SAC стабильно превосходит DDPG в торговых средах благодаря своей врождённой устойчивости и лучшим свойствам исследования. Автоматическая настройка температуры снимает серьёзную нагрузку по подбору гиперпараметров по сравнению с расписанием шума DDPG.
Ключевые выводы
-
RL с максимальной энтропией добавляет бонус за энтропию к награде, побуждая агента оставаться стохастичным и исследующим — идеально для нестационарных финансовых рынков.
-
Парные критики (отсечённое двойное Q) предотвращают смещение переоценки, которое особенно вредно в зашумлённых финансовых средах, где Q-функция может цепляться за ложные паттерны.
-
Трюк репараметризации обеспечивает градиентную оптимизацию стохастической гауссовой политики, естественно поддерживая непрерывное управление размером позиции в [-1, 1].
-
Автоматическая настройка температуры динамически адаптирует баланс исследования-эксплуатации, устраняя критический гиперпараметр и позволяя агенту самостоятельно регулировать свою стохастичность.
-
Off-policy обучение с буфером воспроизведения делает SAC эффективным по данным, способным учиться на исторических рыночных данных без необходимости онлайн-взаимодействия.
-
Устойчивость через регуляризацию энтропией делает политики SAC менее склонными к переобучению на конкретные рыночные режимы, обеспечивая более стабильные результаты вне выборки по сравнению с детерминированными альтернативами вроде DDPG.
-
Реализация на 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)