Attention позволяет каждой позиции построить собственную взвешенную выборку из контекста. Запрос говорит, что ищем; ключ — что может предложить позиция; value — какой сигнал будет перенесён. Карта внимания вычисляется заново для каждого текста.
Местоимение ищет опору
В предложении «Робот положил стакан на стол, потому что он был свободен» местоимение связано со столом, а не со стаканом. Между словами несколько позиций; фиксированного локального окна может не хватить. RNN должна пронести нужный факт через состояние. Attention создаёт прямую связь.
Для матрицы представлений строятся
Строка — query позиции , — key позиции , — переносимое value. Оценка совместимости
а веса
Выход позиции:
Каждая строка суммируется в единицу, поэтому — выпуклая комбинация value-векторов.
Запрос слова он сравнивается с ключами всех позиций. Толщина линий равна ; в сумматор поступают value, а не ключи. Справа показан численный пример трёх scores, softmax и результирующей смеси.
Почему делим на корень размерности
Если компоненты и независимы, имеют среднее ноль и дисперсию единицу, скалярное произведение
имеет дисперсию порядка . При большой размерности logits становятся крупными, softmax почти one-hot, а его градиенты малы. Деление на удерживает типичный масштаб около единицы.
Это нормировка дисперсии, а не косметическая константа. Она родственная идеям инициализации нейросетей: масштаб суммы должен оставаться управляемым при росте числа слагаемых.
Маска меняет множество допустимого
В decoder языковой модели позиция не должна видеть будущие токены. К scores добавляют
После softmax запрещённые веса равны нулю. Padding mask убирает фиктивные позиции. Эти маски имеют разный смысл: causal mask защищает от утечки будущего, padding mask — от искусственного содержимого.
При реализации значение часто заменяют большим отрицательным числом. В низкой точности слишком большое по модулю число может создать численные проблемы; библиотечные операции учитывают это.
Оси обеих тепловых карт подписаны токенами. Слева позиции видят весь текст, справа верхний треугольник запрещён. Строка для последнего доступного токена показывает, как нормировка перераспределяет массу после маски.
Несколько голов — несколько подпространств
Multi-head attention вычисляет независимых наборов проекций:
затем конкатенирует:
Головы могут специализироваться на локальных соседях, согласовании форм, разделителях или дальних ссылках. Но это наблюдаемая тенденция, не гарантированная роль. Несколько голов нередко дублируются, а отдельная attention map не является полным объяснением решения.
Число голов меняет размер . Слишком много голов дают маленькие подпространства; слишком мало ограничивают параллельные типы связи.
Позиция не входит сама
Без positional information self-attention эквивариантен перестановке: если одинаково переставить строки , выход переставится так же. Модель различит набор токенов, но не порядок.
Синусоидальное кодирование:
прибавляется к embeddings. Другие методы кодируют относительное расстояние или вращают query/key (RoPE). Относительные схемы естественно выражают «на три позиции раньше», но поведение за обученной длиной нужно проверять отдельно.
Лаборатория внимания
Выберите запрос и меняйте один key. Следите, как softmax перераспределяет все веса: повышение одного score уменьшает доли остальных, даже если их scores не менялись. Затем измените value при фиксированных весах и убедитесь, что адресация остаётся прежней, а содержание выхода меняется.
Включите causal mask и попытайтесь связать позицию с будущим. Нулевой вес — следствие запрета до softmax, а не обучения.
Квадратичная цена
Матрица имеет элементов. Время и память self-attention растут как . Удвоение контекста примерно учетверяет размер карты. На длинных последовательностях это основное ограничение.
Локальное attention оставляет окно, sparse-схемы — выбранные рёбра, linear attention меняет порядок вычислений через аппроксимации. Но экономия меняет доступные связи. Сравнивать надо на задаче, где дальний контекст действительно нужен.
KV-cache при авторегрессивной генерации хранит прошлые keys и values: новый токен не пересчитывает их. Время одного следующего шага всё равно растёт с длиной истории, а память линейна по .
Синяя кривая показывает элементов полной карты, зелёные — линейную память локальных окон 128 и 512. На правой оси нанесена доля эталонных зависимостей, попавших в окно на наборе длинных документов: экономия имеет измеримую предметную цену.
Реальный пример: выравнивание перевода
В encoder–decoder модели decoder query обращается к keys/values исходного предложения. На корпусах WMT можно сравнить attention с человеческим или алгоритмическим выравниванием слов. Но перевод не всегда один-к-одному: артикль может не иметь русского соответствия, фраза — перестраиваться целиком.
Оцените не только BLEU, но и конкретные дальние согласования, имена, числа, отрицания. Карта внимания помогает найти гипотезу ошибки, однако output зависит также от residual, MLP и всех слоёв трансформера.
Мини-исследование: синтетическая задача адресации
Сгенерируйте строки вида ключ\:значение, например A\:7 B\:2 C\:9 ?B, и потребуйте вернуть значение запрошенного ключа. Меняйте число пар от 2 до 64, порядок и расстояние до запроса. Такой dataset даёт точный expected attention pattern: query должен найти соответствующий key и перенести его value.
Обучите одну голову и сравните три вмешательства. Переставьте пары: ответ должен сохраниться. Замените ключ при прежнем value: адрес должен смениться. Замените value при прежнем ключе: вес должен сохраниться, output — измениться. Эта тройка проверяет функциональное разделение лучше красивой heatmap.
Затем добавьте два одинаковых ключа с разными values и правило «брать последний». Без positional information задача неоднозначна; с относительной позицией модель может предпочесть ближайшее прошлое. Измерьте accuracy по длине, превышающей train. Это связывает attention с обобщением за обученный диапазон.
Проверка объяснения вмешательством
Для ста реальных текстов выберите attention head и токен с максимальным весом. Маскируйте его, затем токен со средним весом и случайный. Сравните изменение нужного logit. Если high-attention masking не влияет сильнее, карта не объясняет решение на этом наборе.
Но маскирование создаёт out-of-distribution строку. Более мягкий метод — activation patching: заменить value одного токена значением из контрольного примера. Обязательно отделите «куда смотрит голова» от «что несёт её value» и от других residual путей. Так визуализация становится гипотезой, проверенной вмешательством.
Проведите ещё один контроль нормировки. Добавьте к предложению десять нерелевантных токенов с умеренными scores. Даже если score опорного слова не меняется, его weight уменьшится, потому что denominator softmax вырос. Поэтому сравнивать raw attention weights между разной длиной без оговорки рискованно.
Запишите и logits , и weights . Первый график показывает совместимость до конкуренции, второй — распределённый бюджет внимания. Если вывод держится только на одном представлении, формулируйте его узко.
Сравните heads после перестановки их порядка и согласованного изменения : функция MHA не изменится, а номера «голова 3» и «голова 7» поменяются. Поэтому историческое имя головы не является устойчивым объектом между seed.
Для сильного вывода ищите повторяемый паттерн на нескольких моделях и измеряйте функциональную роль ablation-ом. Яркая индивидуальная карта может оказаться полностью компенсируемой соседними головами.
Адресация не равна объяснению
Attention — динамическая адресация контекста. Масштабирование стабилизирует softmax, маска задаёт допустимые связи, позиции возвращают порядок, головы дают несколько подпространств. Рисунок карты полезен, когда отвечает на конкретный вопрос и проверяется вмешательством, а не когда служит цветным орнаментом.