Глава 170: Prototypical Contrastive Learning (PCL)
Обзор
В предыдущих главах мы фокусировались на Instance-level контрастивном обучении (InfoNCE, SimCLR, CPC), где мы сравниваем один пример с другими в батче. Хотя это эффективно, такой подход может быть зашумленным и игнорирует скрытую глобальную структуру данных.
Prototypical Contrastive Learning (PCL) устраняет разрыв между самообучением (Self-Supervised) и кластеризацией. Метод заставляет модель изучать признаки, которые не только отличают отдельные примеры, но и согласуются с прототипами (репрезентативными центроидами), которые отражают глобальную семантическую структуру рынка.
Как это работает
- Извлечение признаков: Признаки рынка извлекаются в реальном времени с помощью CNN-энкодера.
- K-Means кластеризация: Периодически всё пространство эмбеддингов разбивается на $K$ кластеров (прототипов) с помощью алгоритма K-Means.
- ProtoNCE Лосс: Для каждого примера модель минимизирует лосс, который притягивает его к назначенному прототипу и отталкивает от остальных прототипов.
- Иерархическое обучение: Можно использовать несколько уровней $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 # Оптимизированный расчет центроидов