Глава 166: Contrastive Predictive Coding (CPC)
Обзор
Contrastive Predictive Coding (CPC) — это мощный фреймворк для самообучения (self-supervised learning), предназначенный для извлечения компактных представлений из многомерных данных, особенно последовательностей, таких как аудио, текст или финансовые временные ряды.
Основная идея CPC заключается в обучении признакам, которые «предсказывают будущее» в латентном пространстве. Вместо того чтобы предсказывать сырые данные (которые крайне зашумлены в финансах), модель предсказывает представления будущих временных шагов.
Архитектура
- Энкодер ($g_{enc}$): Отображает окно сырых данных $x_t$ в латентное представление $z_t$.
- Авторегрессионная модель ($g_{ar}$): Обобщает все $z_{\leq t}$ в контекстный вектор $c_t$ (например, с использованием GRU или LSTM).
- Предсказание: Линейная трансформация отображает $c_t$ в предсказанные будущие латентные векторы $\hat{z}_{t+k}$.
- 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 # Инференс для контекстного вектора