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

Глава 170: Prototypical Contrastive Learning (PCL)

Обзор

В предыдущих главах мы фокусировались на Instance-level контрастивном обучении (InfoNCE, SimCLR, CPC), где мы сравниваем один пример с другими в батче. Хотя это эффективно, такой подход может быть зашумленным и игнорирует скрытую глобальную структуру данных.

Prototypical Contrastive Learning (PCL) устраняет разрыв между самообучением (Self-Supervised) и кластеризацией. Метод заставляет модель изучать признаки, которые не только отличают отдельные примеры, но и согласуются с прототипами (репрезентативными центроидами), которые отражают глобальную семантическую структуру рынка.

Как это работает

  1. Извлечение признаков: Признаки рынка извлекаются в реальном времени с помощью CNN-энкодера.
  2. K-Means кластеризация: Периодически всё пространство эмбеддингов разбивается на $K$ кластеров (прототипов) с помощью алгоритма K-Means.
  3. ProtoNCE Лосс: Для каждого примера модель минимизирует лосс, который притягивает его к назначенному прототипу и отталкивает от остальных прототипов.
  4. Иерархическое обучение: Можно использовать несколько уровней $K$ (например, $K=10, 50, 200$) для захвата структуры разного масштаба (от широких режимов до специфического поведения активов).

Преимущества для трейдинга

  • Снижение шума: Отнесение ценового паттерна к “прототипу” помогает отфильтровать высокочастотный шум, который не вписывается ни в один глобальный режим.
  • Идентификация режимов: Прототипы естественным образом соответствуют рыночным режимам (например, “Высокая волатильность, рост” или “Низкая волатильность, боковик”).
  • Глобальная согласованность: В отличие от стандартного контрастивного обучения, которое ограничено размером батча, PCL обеспечивает согласованность по всему датасету через прототипы.

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

170_proto_contrastive/
├── README.md # Обзор на английском
├── README.ru.md # Обзор на русском
├── docs/ru/theory.md # Математические основы
├── python/
│ ├── model.py # Базовый CNN Энкодер
│ ├── pcl_loss.py # Реализация ProtoNCE
│ └── train.py # Цикл итеративной кластеризации
└── rust/src/
└── lib.rs # Оптимизированный расчет центроидов