Self-Attention
Self-Attention / Scaled Dot-Product Attention
Self-Attention — механизм, позволяющий каждому элементу последовательности «смотреть» на все остальные элементы и определять их важность. Основа архитектуры Transformer.
Что такое Self-Attention
Self-Attention (самовнимание) — механизм, в котором каждый токен последовательности вычисляет веса важности (attention scores) по отношению ко всем остальным токенам. Это позволяет модели учитывать контекст всей последовательности при обработке каждого элемента.
Формула
Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V
Где:
- Q (Query) — «что я ищу?»
- K (Key) — «что я содержу?»
- V (Value) — «что я могу дать?»
- d_k — размерность ключа (для нормализации)
Пошаговый алгоритм
- Входные эмбеддинги умножаются на три матрицы весов → Q, K, V
- Вычисляются attention scores: Q × K^T
- Делятся на √d_k (стабилизация градиентов)
- Применяется softmax → веса внимания (0..1)
- Умножаются на V → взвешенное представление
Вычислительная сложность
Self-Attention имеет сложность O(n²) по длине последовательности:
- Для 2K токенов: 4M операций
- Для 128K токенов: 16B операций
Это основной bottleneck для длинных контекстов. Решения: Flash Attention, Sliding Window, Ring Attention.
Multi-Head Attention
На практике используется Multi-Head Attention (MHA): входы разбиваются на h голов, каждая голова вычисляет attention независимо, результаты конкатенируются.
# Упрощённо
heads = [attention(Q_i, K_i, V_i) for i in range(n_heads)]
output = concat(heads) @ W_o
Каждая голова учится «смотреть» на разные аспекты: синтаксические связи, семантику, позиции.