Одна операция, на которой стоит весь трансформер: каждое слово оглядывается на остальные и подмешивает в себя то, что важно именно для него. Разберём её по винтикам — и посчитаем на живом примере, кто на кого смотрит.
Слову нужен контекст
Возьмём фразу «кошка лакает молоко, потому что она голодна». Что значит «она»? Само по себе местоимение пусто — его смысл живёт в другом слове фразы, в «кошке». Чтобы понять «она», модель должна дотянуться до нужного слова и втянуть его в себя.
Ранние сети читали текст по порядку, слово за словом, и дальний контекст размывался. Внимание отменяет дистанцию: каждое слово может напрямую заглянуть в любое другое и решить, насколько оно ему важно. «Она» смотрит на всю фразу разом и обнаруживает, что сильнее всего похоже на «кошку».
Запрос, ключ, значение
Каждый токен приходит в слой в виде вектора-эмбеддинга
Удобная аналогия — поиск в библиотеке:
- Запрос
q (query) — «что я ищу». У токена «она» это примерно «я местоимение, ищу существительное-подлежащее». - Ключ
k (key) — «чем я могу быть полезен», ярлык на каждом токене. У «кошки» ключ кричит «я существительное-подлежащее». - Значение
v (value) — «что я передам», собственно содержимое, которое утечёт к тому, кто на меня посмотрит.
Похожесть → веса
Насколько запрос токена
Делим на
Оценки — это ещё не веса: они любого знака и не нормированы. Пропустим строку
оценок токена
Наконец, новое представление токена
Слева — для одного токена, справа — та же операция сразу для всей матрицы.
Кто на кого смотрит
Ниже — живое внимание на нашей фразе. Векторы токенов заданы так, чтобы
«похожесть» была осмысленной (существительные тянутся к существительным, объект
к своему действию). Кликните слово — увидите, куда смотрит его запрос: строку
оценок, их превращение в веса и итоговую смесь. В таблице справа — все веса
сразу: строка
Ползунок «температуры» — это делитель оценок. Стандартное значение
Обратите внимание на строку «она»: сильнее всего она смотрит на «кошку» — модель нашла, к чему относится местоимение, просто сравнив векторы. А «молоко» тянется к «лакает»: объект липнет к своему действию. Никаких правил грамматики — только скалярные произведения и softmax.
Что мы собрали
Одна голова внимания — это четыре шага:
- спроецировать каждый токен в запрос, ключ и значение
- оценить пары запрос·ключ скалярным произведением и поделить на
\sqrt{d_k} - softmax по строке → веса, суммирующиеся в единицу
- сложить значения с этими весами — вот новое представление токена