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

Глава 221: Состязательное обучение для устойчивых торговых моделей

1. Введение

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

Состязательное обучение изначально было разработано в сообществе глубокого обучения как защита от состязательных примеров — тщательно подобранных возмущений входных данных, которые заставляют модели делать неправильные предсказания. Основополагающая работа Goodfellow и др. (2014) по методу быстрого знака градиента (FGSM) продемонстрировала, что нейронные сети удивительно хрупки: незаметно малые возмущения входных данных могут вызвать драматические изменения в выходах модели. Madry и др. (2018) позже формализовали состязательное обучение как задачу робастной оптимизации, установив проецируемый градиентный спуск (PGD) как мощный метод атаки и защиты.

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

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

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

Состязательные примеры

Для модели $f_\theta$ с параметрами $\theta$, входа $x$ и истинной метки $y$ состязательный пример — это возмущённый вход $x’ = x + \delta$ такой, что:

$$f_\theta(x + \delta) \neq y \quad \text{при} \quad |\delta|_p \leq \epsilon$$

Возмущение $\delta$ ограничено $\ell_p$-нормой шара радиуса $\epsilon$, что гарантирует, что состязательный пример остаётся «близким» к исходному входу. В трейдинге $\epsilon$ представляет величину ценовой манипуляции или шума данных, которую модель должна выдерживать.

Минимаксная формулировка

Состязательное обучение формулируется как минимаксная задача оптимизации:

$$\min_\theta \max_{|\delta|p \leq \epsilon} \mathcal{L}(f\theta(x + \delta), y)$$

Внутренняя максимизация находит наихудшее возмущение $\delta^*$, которое максимизирует функцию потерь, а внешняя минимизация обновляет параметры модели $\theta$ для минимизации потерь на этих наихудших входах. Эта формулировка седловой точки гарантирует, что обученная модель хорошо работает даже в состязательных условиях.

Метод быстрого знака градиента (FGSM)

FGSM — это одношаговая атака, которая генерирует состязательные примеры, делая один шаг в направлении градиента функции потерь по отношению ко входу:

$$\delta = \epsilon \cdot \text{sign}(\nabla_x \mathcal{L}(f_\theta(x), y))$$

FGSM вычислительно дёшев (требует только один прямой и один обратный проход), но производит относительно слабые состязательные примеры. Его простота делает его полезным для быстрого состязательного обучения и как базовую атаку.

Проецируемый градиентный спуск (PGD)

PGD — это итеративная атака, которая применяет множество маленьких шагов FGSM, проецируя обратно на $\epsilon$-шар после каждого шага:

$$x^{(t+1)} = \Pi_{B_\epsilon(x)} \left( x^{(t)} + \alpha \cdot \text{sign}(\nabla_{x^{(t)}} \mathcal{L}(f_\theta(x^{(t)}), y)) \right)$$

где $\Pi_{B_\epsilon(x)}$ обозначает проекцию на $\ell_\infty$-шар радиуса $\epsilon$ с центром в $x$, а $\alpha$ — размер шага. PGD со случайными перезапусками считается самой сильной атакой первого порядка и составляет основу состязательного обучения PGD (PGD-AT).

Целевая функция TRADES

Метод TRADES (TRadeoff-inspired Adversarial DEfense via Surrogate-loss minimization) разделяет цели точности и устойчивости:

$$\min_\theta \mathcal{L}(f_\theta(x), y) + \beta \cdot \max_{|\delta| \leq \epsilon} D_{KL}(f_\theta(x) | f_\theta(x + \delta))$$

Первый член обеспечивает точность на чистых данных, а второй член (взвешенный $\beta$) штрафует KL-дивергенцию между предсказаниями на чистых и состязательных входах. Эта формулировка явно балансирует точность на чистых данных и состязательную устойчивость, при этом $\beta$ контролирует баланс.

3. Почему торговым моделям нужна устойчивость

Рыночная манипуляция

Финансовые рынки изобилуют тактиками манипуляции, которые вносят состязательные сигналы в данные:

  • Спуфинг: размещение крупных ордеров без намерения исполнения для создания ложного впечатления спроса/предложения. Эти фальшивые ордера возмущают признаки стакана, которые модели используют для прогнозирования.
  • Лэйеринг: размещение множества ордеров на разных ценовых уровнях для создания искусственной глубины с последующей отменой после движения рынка.
  • Wash-трейдинг: одновременная покупка и продажа для раздувания статистики объёмов, вводящая в заблуждение индикаторы на основе объёма.
  • Разжигание импульса: агрессивная торговля для срабатывания алгоритмов следования за импульсом с последующей торговлей против вызванного движения.

Модель, обученная только на «чистых» исторических данных, научится доверять этим манипулированным сигналам, что приводит к предсказуемому и эксплуатируемому поведению.

Зашумлённые данные

Финансовые данные по своей природе зашумлены. Тиковые данные содержат артефакты измерения, ошибки синхронизации часов бирж и устаревшие котировки. Даже без намеренной манипуляции отношение сигнал/шум во финансовых временных рядах чрезвычайно низкое. Модели должны быть устойчивы к этому базовому уровню шума, чтобы избежать переобучения на ложных паттернах.

Сдвиг распределения

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

Состязательные участники рынка

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

4. Методы состязательного обучения

Состязательное обучение PGD (PGD-AT)

PGD-AT (Madry и др., 2018) — это стандартный метод состязательного обучения. Для каждого обучающего батча:

  1. Генерация состязательных примеров с помощью PGD за $K$ шагов
  2. Вычисление функции потерь на состязательных примерах
  3. Обновление параметров модели через градиентный спуск по состязательным потерям

PGD-AT создаёт высоко устойчивые модели, но вычислительно затратен — каждый шаг обучения требует $K$ прямых-обратных проходов для атаки PGD плюс один проход для обновления параметров.

TRADES

TRADES разделяет цели точности и устойчивости. Потери на чистых данных обеспечивают правильные предсказания модели на невозмущённых данных, а член KL-дивергенции обеспечивает стабильность предсказаний при возмущении. Гиперпараметр $\beta$ контролирует компромисс между точностью и устойчивостью: больший $\beta$ увеличивает устойчивость за счёт точности на чистых данных.

Бесплатное состязательное обучение

Бесплатное состязательное обучение (Shafahi и др., 2019) снижает вычислительные затраты, одновременно обновляя как состязательное возмущение, так и параметры модели за один обратный проход. Вместо выполнения $K$ шагов PGD на каждом шаге обучения, оно воспроизводит каждый мини-батч $m$ раз, накапливая обновления возмущений между воспроизведениями. Это достигает сопоставимой устойчивости с PGD-AT при стоимости стандартного обучения.

You Only Propagate Once (YOPO)

YOPO (Zhang и др., 2019) использует наблюдение, что состязательные возмущения в основном влияют на первый слой сети. Он разделяет обновление состязательного возмущения от полного обратного прохода по сети, выполняя множественные обновления возмущений, используя только градиент первого слоя, при этом обновляя полную сеть реже. Это дополнительно снижает вычислительные затраты.

5. Торговые приложения

Устойчивое предсказание цен

Модели предсказания цен должны справляться с зашумлёнными входами — спредами bid-ask, всплесками объёма и эффектами микроструктуры. Состязательно обученный предсказатель цен изучает признаки, стабильные при малых возмущениях входных данных:

  • Если данные OHLCV возмущены на $\pm \epsilon$ (моделирование шума или манипуляции), предсказание модели должно оставаться согласованным
  • Состязательное обучение действует как мощный регуляризатор, предотвращая зависимость модели от хрупких, чувствительных к шуму признаков

Устойчивые к манипуляции сигналы

Торговые сигналы, полученные из данных стакана, особенно уязвимы к спуфингу. Состязательно обученный генератор сигналов видел наихудшие возмущения признаков стакана во время обучения и учится обесценивать потенциально манипулированные сигналы:

  • Признаки дисбаланса стакана становятся более устойчивыми, когда модель обучена против состязательных возмущений, моделирующих спуфинг
  • Взвешенные по объёму признаки становятся устойчивыми к артефактам wash-трейдинга

Стресс-тестирование торговых стратегий

Даже без использования состязательного обучения для подгонки модели, фреймворк атаки PGD предоставляет систематический метод стресс-тестирования стратегий:

  1. Определить входное пространство (рыночные условия, признаки)
  2. Определить бюджет возмущений (насколько условия могут отклоняться)
  3. Использовать PGD для нахождения наихудшего сценария в рамках бюджета
  4. Оценить производительность стратегии в наихудших условиях

Это более принципиально, чем традиционное стресс-тестирование Монте-Карло, потому что активно ищет режимы отказа, а не выбирает случайно.

6. Пошаговый разбор реализации (Rust)

Наша реализация на Rust предоставляет полный фреймворк состязательного обучения для торговых моделей. Основные компоненты:

Нейронная сеть с вычислением градиентов

Мы реализуем простую нейронную сеть прямого распространения с явным вычислением градиентов. Сеть использует активации ReLU и поддерживает прямой и обратный проходы, необходимые как для стандартного обучения, так и для состязательных атак.

pub struct NeuralNetwork {
pub weights1: Array2<f64>,
pub bias1: Array1<f64>,
pub weights2: Array2<f64>,
pub bias2: Array1<f64>,
}

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

Атака FGSM

Реализация FGSM вычисляет входные градиенты за один обратный проход и применяет знаковое возмущение:

pub fn fgsm_attack(
model: &NeuralNetwork,
x: &Array2<f64>,
y: &Array1<f64>,
epsilon: f64,
) -> Array2<f64>

Атака PGD

Атака PGD оборачивает FGSM в итеративный цикл с проекцией:

pub fn pgd_attack(
model: &NeuralNetwork,
x: &Array2<f64>,
y: &Array1<f64>,
epsilon: f64,
alpha: f64,
num_steps: usize,
) -> Array2<f64>

Цикл состязательного обучения

Цикл обучения чередует генерацию состязательных примеров и обновление параметров модели:

pub fn adversarial_train(
model: &mut NeuralNetwork,
x_train: &Array2<f64>,
y_train: &Array1<f64>,
epochs: usize,
epsilon: f64,
learning_rate: f64,
)

Регуляризация в стиле TRADES

Наша реализация TRADES добавляет штраф KL-дивергенции между чистыми и состязательными предсказаниями:

pub fn trades_train(
model: &mut NeuralNetwork,
x_train: &Array2<f64>,
y_train: &Array1<f64>,
epochs: usize,
epsilon: f64,
beta: f64,
learning_rate: f64,
)

7. Интеграция данных Bybit

Реализация включает клиент API Bybit, который получает данные OHLCV в реальном времени для любой торговой пары. Конвейер данных:

  1. Получение: извлекает данные kline (свечи) из публичного API Bybit v5
  2. Парсинг: преобразует JSON-ответы в структурированные объекты Candle
  3. Инженерия признаков: вычисляет нормализованные доходности, коэффициенты волатильности, изменения объёма и признаки ценового диапазона
  4. Генерация меток: создаёт бинарные метки на основе будущего направления цены
pub async fn fetch_bybit_klines(
symbol: &str,
interval: &str,
limit: usize,
) -> Result<Vec<Candle>>

Конвейер инженерии признаков нормализует все входы к похожим масштабам, что важно для состязательного обучения, поскольку бюджет возмущений $\epsilon$ применяется равномерно ко всем признакам. Без нормализации признаки с большими величинами были бы относительно менее возмущены, создавая неравномерный профиль устойчивости.

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

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

  2. Торговые модели — это естественно состязательные среды: рыночная манипуляция, зашумлённые данные и конкурирующие участники создают состязательные условия, к которым стандартное обучение не готовит модели.

  3. Компромисс FGSM против PGD: FGSM быстр, но слаб; PGD силён, но затратен. Для производственных торговых систем бесплатное состязательное обучение или YOPO предлагают хорошие компромиссы.

  4. TRADES балансирует точность и устойчивость: параметр $\beta$ в TRADES явно контролирует компромисс между точностью на чистых данных и состязательной устойчивостью — это существенно для трейдинга, где важны оба аспекта.

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

  6. Стресс-тестирование через PGD: фреймворк PGD предоставляет принципиальный метод нахождения наихудших сценариев для любой торговой стратегии, превосходящий случайные симуляции Монте-Карло.

  7. Выбор epsilon имеет значение: бюджет возмущений $\epsilon$ должен отражать реалистичные уровни шума/манипуляции на целевом рынке. Слишком маленький — модель недостаточно устойчива; слишком большой — модель жертвует слишком большой точностью на чистых данных.

  8. Оценка устойчивости необходима: всегда оценивайте модели под атакой при нескольких значениях $\epsilon$. Модель, которая кажется точной на чистых данных, может быть полностью хрупкой при даже небольших возмущениях.

Литература

  • Goodfellow, I. J., Shlens, J., & Szegedy, C. (2014). Explaining and Harnessing Adversarial Examples. arXiv:1412.6572.
  • Madry, A., Makelov, A., Schmidt, L., Tsipras, D., & Vladu, A. (2018). Towards Deep Learning Models Resistant to Adversarial Attacks. ICLR.
  • Zhang, H., Yu, Y., Jiao, J., Xing, E., El Ghaoui, L., & Jordan, M. (2019). Theoretically Principled Trade-off between Robustness and Accuracy. ICML.
  • Shafahi, A., Najibi, M., Ghiasi, A., Xu, Z., Dickerson, J., Studer, C., Davis, L.S., Taylor, G., & Goldstein, T. (2019). Adversarial Training for Free! NeurIPS.
  • Zhang, D., Zhang, T., Lu, Y., Zhu, Z., & Dong, B. (2019). You Only Propagate Once: Painless Adversarial Training Using Maximal Principle. NeurIPS.