Глава 160: SwAV для Алготрейдинга
Обзор
SwAV (Swapping Assignments between Views) производит революцию в Self-Supervised Learning (обучении без учителя), вводя Онлайн-кластеризацию (Online Clustering) прямо в процессе обучения. Вместо того чтобы буквально “притягивать” непрерывные векторы признаков друг к другу (как в SimCLR или MoCo), SwAV обучает сеть сопоставлять признаки с набором обучаемых Прототипов (Центров кластеров).
Этот подход невероятно хорошо масштабируется и обеспечивает мгновенную интерпретируемость: модель естественным образом изучает “Рыночные Режимы” (например, бычий тренд, боковик высокой волатильности, медвежий сброс) через дискретные прототипы (номера кластеров).
Ключевые механизмы
1. Прототипы (Кодовая книга / Codebook)
Модель поддерживает матрицу весовых векторов, называемых Прототипами. Представляя структурные состояния рынка, каждый произведенный непрерывный вектор эмбеддинга сравнивается с этими Прототипами через косинусное сходство, чтобы найти наилучшее совпадение.
2. Алгоритм Синкхорна-Кноппа (Балансировщик)
Если бы модель была предоставлена самой себе, она бы поддалась “коллапсу представлений” (representation collapse) — отнесла бы каждый биржевой график к Прототипу №1 (например, постоянно угадывая “Флэт / Боковое движение”).
Чтобы предотвратить это, SwAV использует алгоритм Sinkhorn-Knopp для всего батча. Это математический метод оптимального транспорта, который навязывает ограничение равного разбиения (equipartition constraint): он строго гарантирует, что графики в пакете (батче) распределяются равномерно по всем доступным прототипам.
3. Перекрестное Предсказание (Функция Потерь)
Для заданного финансового графика мы создаем View A (Вид А - искажение 1) и View B (Вид Б - искажение 2), используя аугментацию данных (например, добавление шума).
- Мы вычисляем непрерывные признаки для обоих: $z_A$ и $z_B$.
- Мы используем Sinkhorn-Knopp, чтобы жестко привязать View A к конкретному кластеру (прототипу): $q_A$.
- Мы жестко привязываем View B к кластеру: $q_B$.
- Обмен (The Swap): Мы тренируем сеть так, чтобы непрерывные признаки A ($z_A$) могли точно предсказывать дискретный кластер B ($q_B$), а признаки $z_B$ предсказывали $q_A$.
Преимущества для трейдинга
- Мгновенная классификация режимов: Ваш торговый бот мгновенно получает дискретные “Состояния” ($1-K$), классифицирующие текущий рынок, а не сырые градиенты с плавающей запятой, требующие внешнего алгоритма K-Means.
- Эффективность при малых батчах: Алгоритм Sinkhorn стабилизирует градиенты значительно лучше, чем обычные contrastive-функции потерь от точки к точке.
- Интерпретируемость: Вы можете визуально проверить, какие конкретные рыночные ситуации вызывают Прототип 1 в сравнении с Прототипом 7, и строить на этом строгие правила стратегии.
Содержание
python/model.py: Реализация Прототипов, онлайн-алгоритма оптимального транспорта Sinkhorn-Knopp и перекрестной функции потерь Swapped Cross-Entropy.python/train.py: Цикл обучения, оптимизирующий непрерывную CNN (1D-CNN) параллельно с дискретными прототипами.python/evaluate.py: Проверка здоровья кластеризации и стабильности назначения режимов (не валятся ли все признаки в один кластер).rust/src/: Высокопроизводительный пайплайн логического вывода на Rust, мгновенно привязывающий тики Price к ближайшему SwAV-прототипу в реальном времени.
Ссылки
- Caron, M., Misra, I., Mairal, J., Goyal, P., Bojanowski, P., & Joulin, A. (2020). Unsupervised Learning of Visual Features by Contrasting Cluster Assignments. arXiv:2006.09882.