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

Глава 135: Двунаправленная (Bidirectional) Mamba

Обзор

Оригинальная модель Mamba, представленная Альбертом Гу и Три Дао, совершила революцию в моделировании последовательностей, предложив линейное время $O(N)$ как альтернативу квадратичным Трансформерам. Mamba работает на основе селективных моделей пространства состояний (Selective SSM) и является строго каузальной — она анализирует последовательность исключительно слева направо. Хотя это идеально для генерации текста, однонаправленное сканирование теряет важнейшие глобальные зависимости при работе с некаузальными данными, такими как изображения или исторические ценовые паттерны в торговле.

В ответ на эту проблему появилась Bidirectional Mamba. Вдохновлённая статьёй Vision Mamba (Vim) (2024), двунаправленная архитектура обрабатывает входную последовательность одновременно в двух направлениях: вперед и назад.

В алгоритмическом трейдинге категорически запрещено заглядывать в будущее (Data Leakage). Возникает логичный вопрос: как можно использовать двунаправленную модель для торговли? При прогнозировании значения на шаг $t+1$ мы подаём в модель фиксированное историческое “окно” данных $[t-H, t]$. Поскольку весь массив данных внутри окна до момента $t$ нам полностью известен, мы можем безопасно запустить двунаправленный проход Mamba исключительно внутри этого контекста. Это позволяет модели гораздо глубже осознать структурные взаимосвязи исторического периода по сравнению с однонаправленным сканированием, что особенно эффективно для паттернов Limit Order Book (LOB) длительных рыночных трендов и кластеризации сложных признаков.

Содержание

  1. Теоретические основы: От Vision Mamba к Финансам
  2. Зачем нужна двунаправленность для временных рядов?
  3. Плюсы и минусы: Потоковый инференс vs Извлечение признаков
  4. Реализация на Python
  5. Реализация на Rust
  6. Бэктестинг
  7. Ссылки

Теоретические основы: От Vision Mamba к Финансам

В статье Vision Mamba (Vim) изображение разбивается на патчи (фрагменты), которые затем проходят двунаправленную обработку. В отличие от текста, контекст патча сильно зависит как от элементов до него, так и после. Базовое уравнение SSM-сканирования Mamba: $$ h_t = \bar{A} h_{t-1} + \bar{B} x_t $$ $$ y_t = C h_t $$

В Bidirectional Mamba мы запускаем одновременно два селективных скан-прохода:

  1. Проход вперед (Forward): $h^{fwd}t = \bar{A}^{fwd} h^{fwd}{t-1} + \bar{B}^{fwd} x_t$
  2. Проход назад (Backward): $h^{bwd}t = \bar{A}^{bwd} h^{bwd}{t+1} + \bar{B}^{bwd} x_t$

Результаты $y^{fwd}_t$ и $y^{bwd}_t$ затем объединяются (сложением или конкатенацией) и проецируются в финальный вектор.

Зачем нужна двунаправленность для временных рядов?

Да, время движется только в одну сторону, однако смысловые связи формируются нелинейно. Сканирование массива “с конца (настоящего) к началу (прошлому)” позволяет модели сохранить самые актуальные ценовые шоки в скрытом состоянии без затухания. Слияние двух векторов (forward+backward) позволяет создавать мощные, плотные контекстные векторы (Embeddings). Современные архитектуры, такие как CMDMamba и SAMBA, доказали, что двунаправленная обработка значительно повышает агрегатную точность модели для финансовых временных рядов при сохранении сложности $O(N)$.

Плюсы и минусы: Потоковый инференс vs Извлечение признаков

  • Обычная Mamba: Выполняет $step()$ обновления за $O(1)$ для каждого нового тика. Это идеальный потоковый дизайн для HFT (High-Frequency Trading).
  • Bidirectional Mamba: Делает сквозное $O(N)$ сканирование всего окна для каждой свечи. Движок не может работать в чистом HFT-стриминге (так как ожидается контекстом $t-H$). Однако для торговли по свечам (1м, 5м, 1D), сложность $O(N)$ — это ничтожные затраты по сравнению с $O(N^2)$ у Трансформеров.

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

Файлы разработаны с использованием PyTorch.

  • Модель: python/model.py: Детальная реализация двунаправленного селективного прохода.
  • Обучение: python/train.py: Скрипт тренировки модели прогнозирования движений рынка.
  • Ноутбук: python/notebooks/example.ipynb: Интерактивная среда (Jupyter) исследования модели.

Запуск:

Окно терминала
python python/model.py
python python/train.py

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

Rust применяется для высокоэффективных вычислений без задержек сборщика мусора.

Запуск:

Окно терминала
cd rust
cargo run

Бэктестинг

Бэктест двунаправленной модели требует крайней осторожности — мы используем строгое пошаговое окнание (Rolling Window), чтобы исключить подглядывание (Data leak) в будущее $t+1$.

Запуск:

Окно терминала
python python/backtest.py

Ссылки

  1. Zhu, L., et al. (2024). Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model. ICML 2024. arXiv:2401.09417
  2. Gu, A., & Dao, T. (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces.