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

Глава 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), используя аугментацию данных (например, добавление шума).

  1. Мы вычисляем непрерывные признаки для обоих: $z_A$ и $z_B$.
  2. Мы используем Sinkhorn-Knopp, чтобы жестко привязать View A к конкретному кластеру (прототипу): $q_A$.
  3. Мы жестко привязываем View B к кластеру: $q_B$.
  4. Обмен (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-прототипу в реальном времени.

Ссылки

  1. 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.