Механизм внимания attention: формула и примеры
Механизм внимания (attention) появился как ответ на проблему «бутылочного горлышка» в seq2seq-сетях: весь смысл входной последовательности пытались вжать в один вектор фиксированной длины, и при длинных предложениях качество резко падало. Идея attention проста: пусть декодер сам выбирает, на какую часть входа обращать внимание при генерации каждого выходного токена. Именно этот принцип лежит в основе трансформера - архитектуры, на которой построены все современные большие языковые модели. Чтобы сразу увидеть, как температурный параметр и размерность ключей меняют распределение весов, попробуйте калькулятор ниже, а потом разберём каждую строку формулы.
Формула scaled dot-product attention
Основная формула выглядит так:
Здесь - матрица запросов (queries), - матрица ключей (keys), - матрица значений (values), - число запрашивающих позиций, - число источников, - размерность ключей.
Вычисление идёт в три шага:
- Оценки (scores): . Это скалярное произведение -го запроса и -го ключа, нормированное корнем из .
- Нормировка (softmax): . Каждая строка суммируется в 1, то есть - это вероятность «обратить внимание» на позицию при обработке позиции .
- Взвешенная сумма: . Выходной вектор позиции - это взвешенная комбинация значений всех позиций.
Зачем делить на
Деление на - не косметика, а математическая необходимость. Скалярное произведение двух случайных векторов из имеет дисперсию порядка . Если , оценки могут достигать значений порядка , и softmax от таких чисел даёт распределение, сосредоточенное почти в одной точке: один вес близок к 1, остальные - к 0. Это убивает градиент: он проходит только через одну позицию. Деление на возвращает дисперсию к единице и сохраняет градиент через все позиции.

Эффект заметен в калькуляторе выше: при маленьком и высокой температуре матрица внимания почти однородна (высокая энтропия); при большом и низкой - резко заострена.
Self-attention и его роль в трансформере
В self-attention все три матрицы , , получаются из одного и того же входа линейными проекциями:
где - входные эмбеддинги, а - обучаемые матрицы весов. Такой слой позволяет каждому токену «смотреть» на все остальные в той же последовательности и собирать контекст.
Cross-attention отличается источником: запросы берутся из одной последовательности (например, декодер), а ключи и значения , - из другой (выход энкодера). Именно через cross-attention декодер трансформера «читает» закодированный вход при генерации.
Multi-Head Attention
Одной пары проекций часто недостаточно: разные головы могут уловить разные типы зависимостей (синтаксические, семантические, позиционные). Multi-Head Attention запускает независимых механизмов внимания параллельно:
где каждая голова:
Размерность каждой головы , поэтому суммарное число параметров не растёт. В оригинальном трансформере , , .
Практически это означает, что восемь голов одновременно строят восемь разных матриц внимания для одного и того же входа. Одна голова может учиться отслеживать синтаксические зависимости (подлежащее - сказуемое), другая - семантическое сходство токенов, третья - позиционную близость. Конкатенация результатов всех голов и финальная проекция смешивают эти разные «взгляды» в один выходной вектор. Исследования показывают, что удаление одной головы из обученной модели почти не влияет на качество, а удаление сразу нескольких - резко его снижает: головы частично дублируют и страхуют друг друга.
Маскировка в декодере
В авторегрессионных моделях (GPT, LLaMA) декодер не должен «видеть» будущие токены при предсказании текущего. Это реализуется каузальной маской: перед softmax в строке все оценки с заменяются на , поэтому и соответствующие веса обнуляются.
Матрица оценок до softmax приобретает форму нижнетреугольной:
После softmax каждая строка суммируется в 1 только по разрешённым позициям.
На практике маска реализуется добавлением матрицы к матрице оценок перед softmax:
Это позволяет обрабатывать всю последовательность параллельно во время обучения (в отличие от рекуррентных сетей, где токены обрабатываются по одному), сохраняя при этом авторегрессионное свойство: при инференсе каждый новый токен «видит» только уже сгенерированный префикс.
Энтропия внимания как метрика качества
Для каждой строки матрицы внимания можно вычислить энтропию Шеннона:
При позициях равномерное распределение даёт бит; сосредоточенный «пик» - близко к 0. Средняя энтропия по всем головам используется как диагностика: слишком высокая означает, что модель не может выбрать релевантный контекст; слишком низкая - что модель «застряла» на одном токене и игнорирует остальные.
Калькулятор выше отображает среднюю энтропию в реальном времени при изменении параметра температуры. При температуре и токенах энтропия опускается ниже 0.5 бит - модель сфокусирована почти на одной позиции. При энтропия приближается к бит - внимание почти равномерно. В хорошо обученных трансформерах разные головы работают в разных режимах: «острые» головы фокусируются на конкретных грамматических связях, «мягкие» усредняют смысловой контекст.
Частые ошибки
- Забытое деление на . Без нормировки при оценки легко достигают , softmax вырождается, и градиент умирает. Это самая распространённая ошибка при реализации с нуля.
- Путаница Q, K и V. Запросы и ключи участвуют в вычислении весов , значения - только в итоговой сумме. Если перепутать и , сеть всё равно «запустится», но учиться не будет.
- Self-attention без позиционного кодирования. Механизм внимания инвариантен к перестановке: он не знает, что «кот» стоит перед «сидел». Без sinusoidal или RoPE позиций смысл порядка теряется.
- Игнорирование маски при обучении. В авторегрессионной задаче утечка информации о будущих токенах даёт хорошие лоссы на обучении, но нулевое качество на инференсе.
- Multi-head как ансамбль независимых моделей. Головы разделяют , а не дублируют его; конкатенация выходов проецируется обратно матрицей .
FAQ
Почему softmax берётся по строкам, а не по столбцам матрицы оценок? Каждая строка отвечает на вопрос: «как токен распределяет внимание по всем позициям источника?». Сумма весов в строке равна 1 - это корректное вероятностное распределение. Нормировка по столбцам имела бы другой смысл и не давала бы корректного взвешенного среднего значений.
Чем self-attention отличается от cross-attention? В self-attention , , берутся из одной последовательности, и каждый токен анализирует контекст внутри той же последовательности. В cross-attention из одной последовательности, и из другой. В трансформере cross-attention используется в декодере для обращения к выходу энкодера.
Как связан параметр температуры с ? Стандартная нормировка - это частный случай температурного масштабирования при . Явная температура добавляется поверх: . При распределение заостряется (меньше энтропия), при - сглаживается. В инференсе языковых моделей часто называют «температурой генерации» и используют для увеличения разнообразия ответов.
Коротко
Механизм внимания вычисляет взвешенную комбинацию значений , где веса определяются сходством запросов и ключей через формулу . Деление на удерживает дисперсию оценок стабильной и сохраняет градиент. Multi-Head Attention запускает несколько таких механизмов параллельно с пониженной размерностью, позволяя модели одновременно улавливать разные типы зависимостей. Маскировка будущих позиций через обеспечивает авторегрессионное свойство декодера.
Читайте также

Self-attention механизм: как токен смотрит на контекст
Self-attention механизм простыми словами: почему Q, K, V берутся из одной последовательности, как слой собирает контекст для каждого токена, зачем позиционное кодирование и где ошибаются.

Алгоритм обратного распространения ошибки: как учится сеть
Backpropagation простыми словами: как обратное распространение ошибки считает градиенты по цепному правилу, обновляет веса нейросети и при чём тут исчезающий градиент. С формулами и разбором.

Архитектура трансформер: из чего собран Transformer
Архитектура трансформер по блокам: энкодер и декодер, multi-head self-attention, позиционное кодирование, FFN, residual и LayerNorm. Разбираем, как данные проходят сквозь сеть и где ошибаются.