Глава 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|}$ — косинусное сходство.
Почему важно температурное шкалирование
- Обострение градиента: Малое значение $\tau$ (например, 0.07) делает распределение softmax более “острым”, фокусируя градиент на наиболее похожих негативных примерах (самых трудных).
- Равномерность признаков: NT-Xent поощряет равномерное распределение эмбеддингов на единичной гиперсфере, предотвращая “коллапс признаков”, когда все примеры отображаются в один и тот же вектор.
- Робастность в финансах: Финансовые данные крайне зашумлены. Если $\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 для продакшена