Механизм внимания в языковых моделях
Ключевые тезисы
- Внимание — механизм, позволяющий словам в модели учитывать контекст, взаимодействуя друг с другом.
- Оно лежит в основе архитектуры трансформер, которая доминирует в современных языковых моделях.
- Модель не просто складывает слова, а вычисляет, на какие слова в предложении следует «обратить внимание» для уточнения смысла каждого токена.
- Процесс включает создание для каждого слова трёх ролей: запроса, ключа и значения.
- Обучение происходит автоматически: модели подкручивают параметры, чтобы лучше предсказывать следующее слово.
Проблема статичных векторов
У обычных векторных представлений слов (эмбеддингов) есть слабость: у слова один и тот же вектор в разных контекстах (например, «ключ» в «скрипичный ключ» и «родниковый ключ»). Слои модели с механизмом внимания решают эту проблему, подмешивая к каждому слову информацию от соседей.
Основная идея внимания
Возьмём фразу: «Пушистая рыжая кошка спит на диване».
- Слово «кошка» само по себе означает просто животное.
- Внимание позволяет ему «оглянуться» на другие слова и решить, на какие из них стоит обратить внимание (например, на «пушистая» и «рыжая»).
- Каждое слово получает долю внимания (в сумме 100%).
- Затем слово забирает часть информации (значения) от каждого соседа пропорционально этой доле и добавляет её к своему вектору, уточняя смысл («пушистая рыжая кошка»).
Как слово решает, кого «слушать»?
Прямое сравнение на «похожесть» не работает, потому что:
- Слово больше всего похоже само на себя.
- Похожесть симметрична, а связи в языке направленные.
- Нужно искать не похожие, а нужные в контексте слова.
Решение: у каждого слова появляются три роли, создаваемые из его вектора с помощью трёх выученных таблиц:
- Запрос (Query) — вопрос, который слово задаёт другим («есть ли слова, которые меня описывают?»).
- Ключ (Key) — идентификатор, по которому слово находят («я признак, описываю что-то живое»).
- Значение (Value) — информация, которую слово передаёт, если на него обратили внимание (сама суть признака или действия).
Аналогия с библиотекой: Запрос — что вы вводите в поиск. Ключи — названия на корешках книг. Значения — содержание книг.
Технические шаги механизма внимания
- Сравнение: Запрос текущего слова сравнивается (через скалярное произведение) с ключами всех других слов. Получаются оценки релевантности.
- Маскирование (для генерации): При генерации текста слово может смотреть только на предыдущие слова (будущее скрыто маской).
- Нормализация: Оценки пропускают через функцию софтмакс, чтобы превратить их в доли внимания (в сумме 100%). Перед этим оценки делят на корень из размерности вектора, чтобы избежать проблем с большими числами.
- Смешивание: Значения всех слов умножаются на их доли внимания и суммируются. Получившаяся «смесь» прибавляется к исходному вектору слова как поправка.
Масштабирование: много голов и много слоёв
- Голова внимания — один набор таблиц для запросов, ключей и значений, задающий один тип вопросов.
- В реальных моделях голов много, и они работают параллельно. Одна может отслеживать связь подлежащего и сказуемого, другая — существительного и прилагательного и т.д.
- Пример: В модели Llama 3 (8B) в каждом из 32 слоёв работает 32 головы внимания.
- Результаты всех голов в слое склеиваются и обрабатываются.
- После слоя внимания идёт слой MLP (многослойный перцептрон), где каждое слово «обдумывает» полученную информацию в отдельности.
Аналогия: Внимание — это совещание, MLP — время для самостоятельного размышления.
Как модель этому учится?
Исходные таблицы для запросов, ключей и значений заполнены случайными числами. Модель обучается на задаче предсказания следующего слова.
- Каждая ошибка приводит к небольшой корректировке всех параметров модели.
- После обработки триллионов слов взгляды (внимание), которые помогают лучше предсказывать, закрепляются. Полезные «роли» голов формируются сами.
Важные нюансы и ограничения
- Учёт позиции: Сам механизм внимания не чувствует порядка слов. Чтобы это исправить, используют позиционное кодирование (например, RoPE — вращательное кодирование позиций).
- Квадратичная сложность: Каждое слово сравнивается с каждым. При увеличении длины текста в 2 раза объём вычислений растёт в 4 раза. Это ограничивает окно контекста модели.
- Key-Value (KV) кэш: При генерации ответа ключи и значения уже обработанных слов сохраняются в кэше, чтобы не пересчитывать их заново. Это экономит вычисления, но требует много памяти.
- Эффект «потерянного в середине»: Многие модели хуже находят информацию в середине длинного контекста. Важные данные лучше помещать в начало или конец.
Взгляд на реальную модель
На примере фразы «Кубок не влез в чемодан, потому что он слишком большой» и модели Qwen (7B):
- Карты внимания показывают, что головы специализируются по-разному: некоторые смотрят на предыдущее слово, многие «сбрасывают» внимание на первый токен.
- Несколько голов со слова «большой» смотрят на «кубок». При замене на «маленький» эти же головы всё равно смотрят на «кубок» — они определяют тему высказывания, а не разрешают анафору.
- Разрешение смысловой загадки («кто большой?») — результат работы целой цепочки голов и слоёв, а не одной операции.
Выводы
Внимание — это основной механизм контекстуализации в трансформерах. Оно позволяет словам «общаться» через систему запросов, ключей и значений. Многослойность и многоголовость позволяют выявлять сложные языковые зависимости. Механизм обучается самостоятельно в процессе предсказания текста, формируя внутренние представления о грамматике и смысле.