Глава 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) длительных рыночных трендов и кластеризации сложных признаков.
Содержание
- Теоретические основы: От Vision Mamba к Финансам
- Зачем нужна двунаправленность для временных рядов?
- Плюсы и минусы: Потоковый инференс vs Извлечение признаков
- Реализация на Python
- Реализация на Rust
- Бэктестинг
- Ссылки
Теоретические основы: От 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 мы запускаем одновременно два селективных скан-прохода:
- Проход вперед (Forward): $h^{fwd}t = \bar{A}^{fwd} h^{fwd}{t-1} + \bar{B}^{fwd} x_t$
- Проход назад (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.pypython python/train.pyРеализация на Rust
Rust применяется для высокоэффективных вычислений без задержек сборщика мусора.
- Логика:
rust/src/lib.rs - Запуск:
rust/src/main.rs
Запуск:
cd rustcargo runБэктестинг
Бэктест двунаправленной модели требует крайней осторожности — мы используем строгое пошаговое окнание (Rolling Window), чтобы исключить подглядывание (Data leak) в будущее $t+1$.
- Скрипт:
python/backtest.py
Запуск:
python python/backtest.pyСсылки
- Zhu, L., et al. (2024). Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model. ICML 2024. arXiv:2401.09417
- Gu, A., & Dao, T. (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces.