attention
Механизм, позволяющий нейросети динамически фокусироваться на релевантных частях входа.
Что такое attention
Attention (механизм внимания) — вычислительный примитив в трансформерах, позволяющий каждому элементу последовательности «обращать внимание» на другие элементы с разными весами. Веса внимания определяются попарным сходством между элементами, а не фиксированной структурой (как в свёртках).
Формально: для каждого запроса Q вычисляется взвешенная сумма значений V, где веса определяются сходством Q с ключами K:
Attention(Q, K, V) = softmax(QKᵀ / √d_k) × V
- Q (Query) — «что ищу?» — вектор текущего токена
- K (Key) — «что я предлагаю?» — вектор каждого другого токена
- V (Value) — «что я несу?» — информация каждого токена
Масштабирование на √d_k предотвращает слишком острые распределения softmax при больших d_k.
Causal self-attention
В LLM используется causal (masked) self-attention: токен может обращать внимание только на предыдущие токены, не на будущие. Это реализуется маскированием верхнетреугольной части матрицы внимания.
Tokens: [A, B, C, D]
A видит: [A]
B видит: [A, B]
C видит: [A, B, C]
D видит: [A, B, C, D]
Сложность и проблема длинных контекстов
Стандартный attention имеет квадратичную сложность O(n²) по длине последовательности — вычислить матрицу n×n для n токенов. Для контекста 128K токенов это 128K×128K = 16B элементов. Отсюда необходимость в:
- Flash Attention — IO-оптимизированная реализация
- GQA — снижение числа K, V голов
Связанные термины
- multi-head attention — параллельные головы attention
- self-attention — attention на саму себя (Q, K, V из одного входа)
- KV-кеш — кеширование K и V для эффективного инференса
- GQA — оптимизация attention для инференса
- трансформер — архитектура, использующая attention
Готовы запустить GPU-задачу?
Запустить GPU-сервер