Мы наделили слова смыслом с помощью эмбеддингов, указали их порядок через позиционное кодирование, но модель до сих пор не понимает, как слова связаны между собой в предложении. Кто на кого влияет? Какое слово уточняет смысл другого? Без ответов на эти вопросы текст останется для модели просто набором независимых элементов. Механизм самовнимания - это первый шаг к тому, чтобы слова начали «общаться» друг с другом.
Каждый токен «смотрит» на все остальные и вычисляет, насколько они важны для его собственного представления. Но как один токен может «смотреть» на другой? Ведь у него нет глаз. В мире нейросетей это выглядит как математическая операция, для которой каждому слову выдаются три специальные роли:
Q - query (запрос) - что я ищу?
K - key (ключ) - что я могу дать?
V - value (значение) - какую информацию я несу?
Q, K, V - звучит загадочно, почти как код к сейфу. Но на самом деле за этими буквами скрывается простая и элегантная логика, которую легко понять на примере онлайн-кинотеатра.
Представьте, что вы зашли на Netflix и ищете, что посмотреть вечером. Ваш поисковый запрос - это Q (что я хочу?). Вы вводите «комедии с Адамом Сэндлером». Система смотрит на карточки фильмов - это K (ключи): у каждой карточки есть жанр, актёры, год выпуска. Она ищет карточки, которые лучше всего соответствуют вашему запросу. А когда нужные фильмы найдены, вы получаете доступ к их содержимому - это V (значения), то есть сами фильмы, которые можно смотреть.
Теперь представьте, что на сайт зашли одновременно миллионы пользователей. Каждый пользователь (Q) ищет своё, сравнивая свой запрос со всеми карточками фильмов (K). Самые подходящие фильмы (V) система рекомендует каждому. Именно это и происходит в механизме внимания - только вместо пользователей у нас токены, вместо карточек - их ключи, а вместо фильмов - их значения. И все эти сравнения происходят одновременно, за один вычислительный проход.
Разница лишь в том, что в кинотеатре пользователи конкурируют за внимание системы, а в механизме самовнимания каждый токен одновременно является и пользователем (ищет), и карточкой (описывает себя), и фильмом (несёт содержание).
В мире нейросетей всё работает точно так же, только вместо миллионов сайтов у нас - слова в предложении, а вместо поисковика - механизм внимания, который выполняется за доли секунды на GPU (подробно рассмотрено в главе 5.4).
Чтобы превратить нашу метафору в работающий алгоритм, нужно записать её на языке математики.
Технический уровень
Внимание ( Attention(Q, K, V) ) - это взвешенная сумма значений V, где веса определяются сходством Q и K.
Математически
Attention ( Q , K , V ) = softmax (( Q · K ^ T ) / √ d ₖ) · V
Q · Kᵀ (Скалярное произведение)
Мы берем матрицу всех запросов (Q) и умножаем на матрицу всех ключей (K), транспонированную набок. На выходе получается матрица «совместимости» или «сырых весов». На пересечении слова *i* и слова *j* стоит число: насколько запрос слова *i* похож на ключ слова *j*.
/ √dₖ (Масштабирование)
Делим результат на корень из размерности ключей. Это нужно, чтобы числа не были слишком большими и не забили градиент при обучении.
softmax (Нормализация)
Превращаем полученные числа в вероятности, которые в сумме дают 1. Это и есть итоговые веса внимания (например, слово «банка» решило, что на 70% нужно смотреть на слово «открыла», на 20% на «положила», а на 10% на всё остальное).
· V (Умножение на значения)
Умножаем эти вероятности на матрицу значений (V). По сути, мы берем содержимое слов, умножаем на их важность и суммируем.
Результат
Для каждого слова мы получаем новый вектор, который вобрал в себя смысл контекста. В генеративных моделях (Decoder-only) внимание считается только к прошлым токенам, чтобы модель не «подглядывала» в будущее. Это критически важно для понимания разницы с энкодерами и называется каузальным вниманием (causal attention).
Сухие цифры и проценты - это хорошо, но давайте посмотрим на живую картину. Как реально выглядят эти веса внимания в работающей модели? Возьмём простое предложение и заглянем ей в голову.

Цветовая легенда
Красный (>0.5) - сильная связь
Желтый (0.2-0.5) - средняя связь
Синий (<0.2) - слабая связь
Что мы видим:
"Она" и "бросила" - сильная связь (подлежащее-глагол)
"ей" и "Она" - сильная связь (оба об одном человеке)
"мяч" и "бросила" - сильная связь (глагол-объект)
Итак, мы разобрали, как слова общаются внутри одного слоя внимания. Но в настоящем трансформере таких слоёв не один, а десятки - от 32 до 128 и больше. Каждый следующий слой получает на вход результат работы предыдущего и строит всё более сложные абстракции. Первый слой видит только отдельные слова и их простые связи. Десятый слой уже понимает роли в предложении - кто действует, на кого направлено действие. Тридцатый слой способен уловить настроение текста, иронию, скрытые смыслы.
Но внимание - не единственный компонент в этом конвейере. Между слоями происходят и другие важные операции, которые помогают модели не забывать прошлое и глубже перерабатывать информацию. Как устроен этот конвейер целиком и зачем нужны все его детали - разберём в следующем разделе.