Механизм внимания в языковых моделях

Ключевые тезисы

  • Внимание — механизм, позволяющий словам в модели учитывать контекст, взаимодействуя друг с другом.
  • Оно лежит в основе архитектуры трансформер, которая доминирует в современных языковых моделях.
  • Модель не просто складывает слова, а вычисляет, на какие слова в предложении следует «обратить внимание» для уточнения смысла каждого токена.
  • Процесс включает создание для каждого слова трёх ролей: запроса, ключа и значения.
  • Обучение происходит автоматически: модели подкручивают параметры, чтобы лучше предсказывать следующее слово.

Проблема статичных векторов

У обычных векторных представлений слов (эмбеддингов) есть слабость: у слова один и тот же вектор в разных контекстах (например, «ключ» в «скрипичный ключ» и «родниковый ключ»). Слои модели с механизмом внимания решают эту проблему, подмешивая к каждому слову информацию от соседей.

🎯 Основная идея внимания

Возьмём фразу: «Пушистая рыжая кошка спит на диване».

  • Слово «кошка» само по себе означает просто животное.
  • Внимание позволяет ему «оглянуться» на другие слова и решить, на какие из них стоит обратить внимание (например, на «пушистая» и «рыжая»).
  • Каждое слово получает долю внимания (в сумме 100%).
  • Затем слово забирает часть информации (значения) от каждого соседа пропорционально этой доле и добавляет её к своему вектору, уточняя смысл («пушистая рыжая кошка»).

Как слово решает, кого «слушать»?

Прямое сравнение на «похожесть» не работает, потому что:

  1. Слово больше всего похоже само на себя.
  2. Похожесть симметрична, а связи в языке направленные.
  3. Нужно искать не похожие, а нужные в контексте слова.

Решение: у каждого слова появляются три роли, создаваемые из его вектора с помощью трёх выученных таблиц:

  1. Запрос (Query) — вопрос, который слово задаёт другим («есть ли слова, которые меня описывают?»).
  2. Ключ (Key) — идентификатор, по которому слово находят («я признак, описываю что-то живое»).
  3. Значение (Value) — информация, которую слово передаёт, если на него обратили внимание (сама суть признака или действия).

Аналогия с библиотекой: Запрос — что вы вводите в поиск. Ключи — названия на корешках книг. Значения — содержание книг.

Технические шаги механизма внимания

  1. Сравнение: Запрос текущего слова сравнивается (через скалярное произведение) с ключами всех других слов. Получаются оценки релевантности.
  2. Маскирование (для генерации): При генерации текста слово может смотреть только на предыдущие слова (будущее скрыто маской).
  3. Нормализация: Оценки пропускают через функцию софтмакс, чтобы превратить их в доли внимания (в сумме 100%). Перед этим оценки делят на корень из размерности вектора, чтобы избежать проблем с большими числами.
  4. Смешивание: Значения всех слов умножаются на их доли внимания и суммируются. Получившаяся «смесь» прибавляется к исходному вектору слова как поправка.

Масштабирование: много голов и много слоёв

  • Голова внимания — один набор таблиц для запросов, ключей и значений, задающий один тип вопросов.
  • В реальных моделях голов много, и они работают параллельно. Одна может отслеживать связь подлежащего и сказуемого, другая — существительного и прилагательного и т.д.
  • Пример: В модели Llama 3 (8B) в каждом из 32 слоёв работает 32 головы внимания.
  • Результаты всех голов в слое склеиваются и обрабатываются.
  • После слоя внимания идёт слой MLP (многослойный перцептрон), где каждое слово «обдумывает» полученную информацию в отдельности.

Аналогия: Внимание — это совещание, MLP — время для самостоятельного размышления.

🧠 Как модель этому учится?

Исходные таблицы для запросов, ключей и значений заполнены случайными числами. Модель обучается на задаче предсказания следующего слова.

  • Каждая ошибка приводит к небольшой корректировке всех параметров модели.
  • После обработки триллионов слов взгляды (внимание), которые помогают лучше предсказывать, закрепляются. Полезные «роли» голов формируются сами.

Важные нюансы и ограничения

  • Учёт позиции: Сам механизм внимания не чувствует порядка слов. Чтобы это исправить, используют позиционное кодирование (например, RoPE — вращательное кодирование позиций).
  • Квадратичная сложность: Каждое слово сравнивается с каждым. При увеличении длины текста в 2 раза объём вычислений растёт в 4 раза. Это ограничивает окно контекста модели.
  • Key-Value (KV) кэш: При генерации ответа ключи и значения уже обработанных слов сохраняются в кэше, чтобы не пересчитывать их заново. Это экономит вычисления, но требует много памяти.
  • Эффект «потерянного в середине»: Многие модели хуже находят информацию в середине длинного контекста. Важные данные лучше помещать в начало или конец.

🔍 Взгляд на реальную модель

На примере фразы «Кубок не влез в чемодан, потому что он слишком большой» и модели Qwen (7B):

  • Карты внимания показывают, что головы специализируются по-разному: некоторые смотрят на предыдущее слово, многие «сбрасывают» внимание на первый токен.
  • Несколько голов со слова «большой» смотрят на «кубок». При замене на «маленький» эти же головы всё равно смотрят на «кубок» — они определяют тему высказывания, а не разрешают анафору.
  • Разрешение смысловой загадки («кто большой?») — результат работы целой цепочки голов и слоёв, а не одной операции.

Выводы
Внимание — это основной механизм контекстуализации в трансформерах. Оно позволяет словам «общаться» через систему запросов, ключей и значений. Многослойность и многоголовость позволяют выявлять сложные языковые зависимости. Механизм обучается самостоятельно в процессе предсказания текста, формируя внутренние представления о грамматике и смысле.