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

Глава 166: Contrastive Predictive Coding (CPC)

Обзор

Contrastive Predictive Coding (CPC) — это мощный фреймворк для самообучения (self-supervised learning), предназначенный для извлечения компактных представлений из многомерных данных, особенно последовательностей, таких как аудио, текст или финансовые временные ряды.

Основная идея CPC заключается в обучении признакам, которые «предсказывают будущее» в латентном пространстве. Вместо того чтобы предсказывать сырые данные (которые крайне зашумлены в финансах), модель предсказывает представления будущих временных шагов.

Архитектура

  1. Энкодер ($g_{enc}$): Отображает окно сырых данных $x_t$ в латентное представление $z_t$.
  2. Авторегрессионная модель ($g_{ar}$): Обобщает все $z_{\leq t}$ в контекстный вектор $c_t$ (например, с использованием GRU или LSTM).
  3. Предсказание: Линейная трансформация отображает $c_t$ в предсказанные будущие латентные векторы $\hat{z}_{t+k}$.
  4. InfoNCE Loss: Оценивает, насколько хорошо $\hat{z}{t+k}$ соответствует реальному $z{t+k}$ по сравнению с «негативными» примерами, взятыми из других временных точек.

Почему это важно для трейдинга

Финансовые рынки нестационарны и зашумлены. Предсказание следующей цены (регрессия) часто оказывается бесполезным занятием. CPC позволяет модели:

  • Игнорировать локальный шум и фокусироваться на медленно меняющихся структурных признаках.
  • Изучать временные зависимости без необходимости в явных метках.
  • Создавать «контекстные векторы», которые фиксируют текущий режим рынка (бычий/медвежий/боковой).

Структура проекта

166_contrastive_predictive_coding/
├── README.md # Обзор на английском
├── README.ru.md # Обзор на русском
├── docs/ru/theory.md # Математические основы
├── python/
│ ├── model.py # CNN Энкодер + GRU контекст
│ ├── cpc_loss.py # InfoNCE лосс для последовательностей
│ └── train.py # Цикл самообучения
└── rust/src/
└── lib.rs # Инференс для контекстного вектора