Глава 89: Непрерывное мета-обучение для трейдинга
Обзор
Непрерывное мета-обучение (Continual Meta-Learning) объединяет два мощных подхода — мета-обучение (обучение обучению) и непрерывное обучение (обучение без забывания) — для создания торговых систем, которые могут быстро адаптироваться к новым рыночным режимам, сохраняя знания о ранее изученных условиях.
Финансовые рынки переживают смену режимов — переходы между бычьими рынками, медвежьими рынками, периодами высокой волатильности и консолидации. Стандартный подход мета-обучения (например, MAML) может быстро адаптироваться к новому режиму, но при переобучении на новых данных страдает от катастрофического забывания: он теряет способность работать в предыдущих режимах. Непрерывное мета-обучение решает эту проблему, комбинируя MAML с техниками Elastic Weight Consolidation (EWC) и буфером воспроизведения опыта.
Ключевые концепции
1. MAML (Model-Agnostic Meta-Learning)
MAML обучает начальную инициализацию параметров модели, которая позволяет быстро адаптироваться к новым задачам за несколько градиентных шагов.
Двухуровневая оптимизация:
Внешний цикл: θ ← θ - β ∇_θ Σ_i L(f_{θ'_i}, D^query_i)Внутренний цикл: θ'_i = θ - α ∇_θ L(f_θ, D^support_i)Где:
θ= мета-параметры (общая инициализация)α= внутренняя скорость обучения (адаптация к задаче)β= внешняя скорость обучения (мета-обновление)D^support= набор поддержки (для адаптации)D^query= набор запросов (для оценки)
2. Elastic Weight Consolidation (EWC)
EWC предотвращает катастрофическое забывание, добавляя регуляризацию, которая штрафует изменения параметров, важных для ранее изученных задач.
L_total = L_new + (λ/2) Σ_i F_i (θ_i - θ*_i)²Где:
F_i= информация Фишера для параметраi(вес важности)θ*_i= оптимальный параметр из предыдущего обученияλ= сила регуляризации
3. Буфер воспроизведения опыта
Буфер хранит репрезентативные задачи из прошлых рыночных режимов. Во время мета-обучения на новом режиме задачи из буфера подмешиваются для укрепления старых знаний.
4. Комбинированный алгоритм
Для каждого нового рыночного режима: 1. Создать задачи мета-обучения из данных нового режима 2. Для каждой эпохи мета-обучения: a. Выбрать задачи из буфера воспроизведения b. Объединить новые + воспроизведённые задачи c. Вычислить MAML-потерю на объединённом батче d. Добавить штраф EWC для защиты важных параметров e. Обновить мета-параметры 3. Обновить матрицу информации Фишера 4. Сохранить представительные задачи в буферПрименение в трейдинге
Рыночные режимы как задачи
В контексте трейдинга:
- Задача = конкретное рыночное условие (бычий, медвежий, боковой, волатильный)
- Набор поддержки = недавние исторические данные для адаптации
- Набор запросов = предстоящие данные для оценки
- Режим = совокупность схожих рыночных условий за период времени
Последовательное обучение режимам
Рынки эволюционируют через режимы:
Время →[Бычий рынок] → [Коррекция] → [Боковик] → [Медвежий рынок] → [Восстановление] Режим 0 Режим 1 Режим 2 Режим 3 Режим 4Преимущества перед стандартным MAML
| Свойство | Стандартный MAML | Непрерывный MAML |
|---|---|---|
| Быстрая адаптация | Да | Да |
| Много режимов | Нужны все данные | Последовательное обучение |
| Эффективность памяти | Хранит все данные | Только буфер воспроизведения |
| Забывание | Катастрофическое | Контролируемое (EWC + буфер) |
| Онлайн-обучение | Ограниченное | Естественное |
Реализация
Python
from continual_meta_learner import ContinualMAMLTrainer, TradingModel
# Создание модели и тренераmodel = TradingModel(input_size=11, hidden_size=64)trainer = ContinualMAMLTrainer( model, inner_lr=0.01, # Скорость адаптации к задаче outer_lr=0.001, # Скорость мета-обучения inner_steps=5, # Шаги градиента при адаптации first_order=True, # FOMAML для стабильности ewc_lambda=100.0, # Сила регуляризации EWC replay_buffer_size=100, replay_ratio=0.5 # 50% задач из буфера)
# Последовательное обучение режимамfor regime_id, tasks in enumerate(regime_task_list): losses = trainer.learn_regime(tasks, regime_id, num_epochs=20)
# Адаптация к текущему рынкуadapted_model = trainer.adapt(recent_features, recent_returns)prediction = adapted_model.predict(current_features)Ключевые классы:
TradingModel— 3-слойная нейронная сеть (ReLU + ReLU + Tanh)ContinualMAMLTrainer— MAML + EWC + буфер воспроизведенияEWC— регуляризатор Elastic Weight ConsolidationReplayBuffer— хранилище опыта с балансировкой по режимамTradingStrategy— генерация сигналов с управлением рисками
Rust
use continual_meta_learning::{ContinualMAMLTrainer, TradingModel};
let model = TradingModel::new(11, 64, 1);let mut trainer = ContinualMAMLTrainer::new( model, 0.01, 0.001, 5, true, 100.0, 50,);
// Обучение режимуlet losses = trainer.learn_regime(&tasks, regime_id, 20, 5);
// Адаптация и предсказаниеlet adapted = trainer.adapt(&features, &labels, Some(5));let prediction = adapted.predict(¤t_features);Структура проекта
89_continual_meta_learning/├── README.md # Документация (English)├── README.ru.md # Документация (Русский)├── README.specify.md # Техническое задание├── readme.simple.md # Простое объяснение (English)├── readme.simple.ru.md # Простое объяснение (Русский)├── Cargo.toml # Конфигурация Rust├── python/│ ├── __init__.py│ ├── continual_meta_learner.py # Основной алгоритм│ ├── data_loader.py # Загрузка данных и фичи│ ├── backtest.py # Фреймворк бэктестинга│ └── requirements.txt # Зависимости Python├── src/│ ├── lib.rs # Корень крейта│ ├── model/│ │ └── network.rs # Нейронная сеть│ ├── continual/│ │ └── algorithm.rs # Непрерывный MAML + EWC│ ├── data/│ │ ├── bybit.rs # Клиент API Bybit│ │ └── features.rs # Технические индикаторы│ ├── trading/│ │ ├── strategy.rs # Торговая стратегия│ │ └── signals.rs # Типы сигналов│ └── backtest/│ └── engine.rs # Движок бэктестинга└── examples/ ├── basic_continual.rs # Базовый пример ├── regime_learning.rs # Последовательное обучение └── trading_strategy.rs # Полный торговый примерЗапуск
Python
cd 89_continual_meta_learning/pythonpip install -r requirements.txtpython continual_meta_learner.pypython backtest.pyRust
cd 89_continual_meta_learningcargo run --example basic_continualcargo run --example regime_learningcargo run --example trading_strategycargo testМетрики оценки
Метрики забывания
| Метрика | Описание |
|---|---|
| Среднее забывание | Среднее падение точности на старых режимах |
| Обратный трансфер | Изменение производительности на старых режимах |
Торговые метрики
- Sharpe Ratio — доходность с поправкой на риск (цель > 1.0)
- Sortino Ratio — доходность с поправкой на нисходящий риск
- Maximum Drawdown — максимальная просадка
- Win Rate — процент прибыльных сделок
- Profit Factor — валовая прибыль / валовый убыток
Гиперпараметры
| Параметр | Диапазон | Описание |
|---|---|---|
inner_lr | 0.001 - 0.05 | Скорость адаптации к задаче |
outer_lr | 0.0001 - 0.005 | Скорость мета-обучения |
inner_steps | 3 - 10 | Градиентные шаги адаптации |
ewc_lambda | 10 - 1000 | Сила защиты от забывания |
replay_buffer_size | 20 - 200 | Размер буфера воспроизведения |
replay_ratio | 0.3 - 0.7 | Доля задач из буфера |
hidden_size | 32 - 128 | Размер скрытого слоя |
Литература
-
Finn, C., Abbeel, P., & Levine, S. (2017). “Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks.” ICML.
-
Kirkpatrick, J., et al. (2017). “Overcoming Catastrophic Forgetting in Neural Networks.” PNAS.
-
Javed, K. & White, M. (2019). “Meta-Learning Representations for Continual Learning.” NeurIPS.
-
Riemer, M., et al. (2019). “Learning to Learn without Forgetting by Maximizing Transfer and Minimizing Interference.” ICLR.
-
Caccia, M., et al. (2020). “Online Fast Adaptation and Knowledge Accumulation.” NeurIPS.
Источники данных
- Bybit Exchange API — данные рынка криптовалют
- Симулированные данные — встроенные генераторы с настраиваемыми режимами
- Yahoo Finance — традиционные данные фондового рынка (через yfinance)
Дальнейшие направления
- Онлайн-детекция режимов — автоматическое определение смены режимов
- Мультиактивное обучение — обмен знаниями между активами
- Внимание в буфере воспроизведения — приоритизация важного опыта
- Прогрессивные сети — расширение ёмкости модели для новых режимов
- Мета-непрерывное RL — применение к агентам обучения с подкреплением