Тригонометрия
Тригонометрия в машинном обучении
GPT-4, LLaMA, BERT - каждая из этих моделей использует тригонометрию внутри. Positional Encoding в трансформерах - это буквально sin и cos. RoPE поворачивает эмбеддинги. Без тригонометрии современный AI не существовал бы.
- LLaMA / GPT: RoPE позволяет модели обобщаться на последовательности длиннее обученных
- BERT / GPT-2: sinusoidal positional encoding кодирует порядок токенов
- Нейросинтез аудио (WaveNet, EnCodec): Snake активация для периодических аудиосигналов
Предварительные знания
Positional Encoding в трансформерах
GPT-4 использует синусоидальное позиционное кодирование: PE(p,d) = sin(p/10000^(2i/d)) - это позволяет обрабатывать контекст до 128 000 токенов. Трансформеры обрабатывают все токены параллельно и не знают об их позиции в последовательности. Positional Encoding добавляет к каждому эмбеддингу вектор, кодирующий позицию через синусы и косинусы разных частот. Это даёт модели информацию о порядке токенов.
**Positional Encoding** (Vaswani et al., 2017 - оригинальный трансформер): PE(pos, 2i) = sin(pos / 10000^{2i/d_model}) PE(pos, 2i+1) = cos(pos / 10000^{2i/d_model}) где pos - позиция токена, i - индекс измерения, d_model - размерность модели. **Почему синусы/косинусы?** 1. |PE(pos)| ≈ const - нет взрывного роста 2. PE(pos+k) можно выразить через PE(pos) линейно - модель может обобщаться на любые расстояния 3. Разные частоты кодируют «ближние» и «дальние» отношения
В Positional Encoding используются частоты 1/10000^{2i/d}. Зачем нужны РАЗНЫЕ частоты для разных измерений i?
RoPE: Rotary Position Embedding
RoPE (Su et al., 2021) - более элегантный способ кодирования позиции: вместо сложения вектора PE к эмбеддингу, мы ПОВОРАЧИВАЕМ эмбеддинг в векторном пространстве на угол, зависящий от позиции. Используется в LLaMA, GPT-NeoX, PaLM и большинстве современных LLM.
**RoPE** - поворот каждой пары измерений (x_{2i}, x_{2i+1}) на угол m·θᵢ: f(q, m) = R_m · q где матрица поворота для пары (2i, 2i+1): R_m(i) = | cos(m·θᵢ) -sin(m·θᵢ) | | sin(m·θᵢ) cos(m·θᵢ) | θᵢ = 10000^{-2i/d} **Ключевое свойство** - внутреннее произведение зависит только от РАЗНОСТИ позиций: q_m^T · k_n = q^T · R_{n-m} · k = f(q, m)^T · f(k, n) Это идеально для attention: модель видит только относительные позиции.
В чём главное преимущество RoPE перед исходным Positional Encoding?
Геометрия Attention: косинусное сходство
Механизм attention вычисляет скалярное произведение query и key векторов. Нормализованное скалярное произведение - это косинус угла между векторами. Понимание attention как геометрии косинусного сходства объясняет, почему масштабирование на √d_k необходимо.
**Scaled Dot-Product Attention:** Attention(Q, K, V) = softmax(QK^T / √d_k) · V **Косинусное сходство:** cos(q, k) = q·k / (||q|| · ||k||) **Почему деление на √d_k?** Если q, k ~ N(0,1), то q·k ~ N(0, d_k). Стандартное отклонение растёт как √d_k. Деление нормализует: q·k/√d_k ~ N(0,1). Без масштабирования при больших d_k softmax насыщается → градиенты исчезают.
Почему в Scaled Dot-Product Attention делят на √d_k, а не просто на d_k?
Тригонометрические функции активации: Swish, GELU, Snake
Классический ReLU прост, но у него нет гладкости в нуле. Современные функции активации используют гладкие аппроксимации через erf (GELU), сигмоиду (Swish) и явные тригонометрические функции (Snake). Знание этих функций важно для выбора архитектуры нейросети.
**GELU** (Gaussian Error Linear Unit): GELU(x) = x · Φ(x) ≈ x · σ(1.702x) где Φ - CDF нормального распределения, erf(x) = (2/√π)∫₀ˣ e^{-t²}dt **Swish** (Google Brain, 2017): Swish(x) = x · σ(x) = x / (1 + e^{-x}) **Snake** (явная тригонометрия, 2020): Snake_α(x) = x + sin²(αx) / α Snake полезен для моделирования периодических функций: аудио, физические процессы, временные ряды.
Почему Snake активация sin²(αx)/α особенно полезна для моделирования аудио и физических сигналов?
Ключевые идеи
- PE(pos, 2i) = sin(pos/10000^{2i/d}): разные частоты кодируют ближние и дальние позиции
- RoPE: поворот эмбеддинга - attention score зависит только от разности позиций
- Scaled attention делит на √d_k: нормализует дисперсию при компонентах N(0,1)
- Snake(x, α) = x + sin²(αx)/α: идеально для периодических сигналов в нейросетях
Связанные темы
Тригонометрия в ML соединяет чистую математику с современной AI-инженерией:
- Тригонометрические ряды и Фурье — Positional Encoding - дискретный аналог Фурье-признаков по позиции
- Тригонометрия в компьютерной графике — Матрицы поворота из тригонометрии используются и в attention, и в 3D
Вопросы для размышления
- Докажите, что f(q,m)·f(k,n) = g(q,k,n-m) для RoPE, то есть dot product зависит только от разности позиций.
- Почему masking в decoder attention реализован добавлением -∞ к scores до softmax, а не обнулением после? Что произойдёт с градиентами?
- Сравните Snake(x, α) с рядом Фурье: в чём их математическое родство? Как обобщить Snake на произвольный набор частот?