ML Fundamentals

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-сервер