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

Глава 168: NT-Xent Loss и температурное шкалирование

Обзор

Normalized Temperature-scaled Cross Entropy (NT-Xent) лосс — это фундаментальный компонент современного контрастивного обучения (например, SimCLR). В трейдинге он используется для обучения робастным представлениям путем максимизации согласия между различными “видами” одной и той же рыночной ситуации.

“Магия” NT-Xent заключается в температурном параметре ($\tau$), который контролирует, насколько сильно модель штрафует “жесткие” негативные примеры по сравнению с “легкими”.

Формула лосса

Для пары положительных примеров $(z_i, z_j)$ в батче размером $N$, лосс для этой пары рассчитывается как:

$$\ell_{i,j} = -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum_{k=1}^{2N} \mathbb{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)}$$

Где $\text{sim}(u, v) = \frac{u^T v}{|u| |v|}$ — косинусное сходство.

Почему важно температурное шкалирование

  1. Обострение градиента: Малое значение $\tau$ (например, 0.07) делает распределение softmax более “острым”, фокусируя градиент на наиболее похожих негативных примерах (самых трудных).
  2. Равномерность признаков: NT-Xent поощряет равномерное распределение эмбеддингов на единичной гиперсфере, предотвращая “коллапс признаков”, когда все примеры отображаются в один и тот же вектор.
  3. Робастность в финансах: Финансовые данные крайне зашумлены. Если $\tau$ слишком мало, модель может переобучиться на “шумовом сходстве”. Если $\tau$ слишком велико, обучение идет слишком медленно.

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

168_nt_xent_trading/
├── README.md # Обзор на английском
├── README.ru.md # Обзор на русском
├── docs/ru/theory.md # Математические основы
├── python/
│ ├── model.py # Базовый CNN Энкодер
│ ├── nt_xent_loss.py# Реализация NT-Xent
│ └── train.py # Эксперименты с температурой
└── rust/src/
└── lib.rs # Высокоскоростной NT-Xent для продакшена