Механизм внимания (Attention) — это метод в искусственном интеллекте, который позволяет нейросети динамически определять, какие части входных данных наиболее важны для текущей задачи. Он работает путём вычисления весов значимости для разных элементов входа: более важные получают больший вес, менее важные — меньший. Затем модель формирует взвешенную сумму представлений, создавая новый контекстный вектор.
Self-attention: как элементы связаны между собой
Self-attention помогает модели понять, как разные элементы входной последовательности связаны между собой. Например, как слова в предложении взаимодействуют и влияют друг на друга. Этот механизм обеспечивает логическую связность и целостное понимание структуры данных.
Как работает self-attention (теория)
Пусть входная последовательность представлена матрицей X размером n × d, где n — число токенов, d — размерность эмбеддинга.
Из X получаются три матрицы: Query (Q), Key (K) и Value (V), каждая из которых вычисляется как линейное преобразование X с помощью обучаемых весов.
Далее вычисляются оценки внимания (attention scores) — мера «похожести» между токенами. Элемент Aij показывает, насколько i-й токен «обращает внимание» на j-й.
Скалярные произведения делятся на √dk — это масштабирование необходимо, потому что при большой размерности dk дисперсия скалярных произведений возрастает, что приводит к насыщению функции softmax и исчезновению градиентов. Деление возвращает дисперсию к 1.
Затем к каждой строке матрицы оценок применяется softmax. В результате каждая строка становится распределением вероятностей — сумма весов равна 1. Это и есть итоговые веса внимания.
Пример работы self-attention
Рассмотрим предложение: «Карина идет в магазин».
Сначала выполняется токенизация: [«Карина», «идет», «в», «магазин»]. Каждому токену сопоставляется эмбеддинг — вектор фиксированной размерности. Для простоты возьмём размерность 2.
К эмбеддингам добавляется позиционное кодирование, чтобы модель учитывала порядок слов: «Карина» — первая, «магазин» — четвёртая и т.д.
Затем из входной матрицы вычисляются матрицы Q, K и V с помощью линейных преобразований.
Оценка важности: вычисляется матрица A = softmax(QKT / √dk). Каждая строка — распределение весов внимания для соответствующего токена.
Например, для слова «Карина» модель может выдать: 31% внимания — на себя, 15% — на «идет», и так далее. Это означает, что при формировании нового представления слова «Карина» модель учитывает и другие слова в предложении.
На последнем шаге матрица весов (результат softmax) умножается на матрицу V (значения). Получается матрица Output — новые, контекстуализированные эмбеддинги.
Новые векторы:
- [0.73, 0.68]
- [0.57, 0.87]
- [0.68, 0.81]
- [0.63, 0.84]
Каждый вектор после self-attention уже не описывает слово само по себе, а учитывает весь контекст. Например, слово «идет» в предложении «Карина идет в магазин» получает значение, связанное с движением человека. В контексте «Время идет быстро» — это будет течь времени. Модель не хранит разные значения слова, а генерирует новое представление каждый раз на основе контекста.
После self-attention представление каждого токена становится контекстуализированным: вектор зависит от всего предложения и отражает смысл слова в конкретной ситуации.
Cross-attention
Cross-attention — это механизм внимания, в котором запросы (Q) берутся из одной последовательности, а ключи (K) и значения (V) — из другой. Он работает по той же формуле, что и self-attention, но Q и (K, V) происходят из разных источников.
Это особенно полезно в задачах, где нужно связать две последовательности — например, в машинном переводе: Q может быть из целевого языка (декодер), а K и V — из исходного (энкодер).
Multi-Head Attention
Multi-Head Attention (многоголовое внимание) позволяет модели одновременно анализировать данные с разных позиций. Вместо одного механизма внимания запускается несколько («голов»), каждая из которых имеет свои матрицы весов для Q, K и V.
Каждая голова учится фокусироваться на разных аспектах: грамматике, семантике, дальних зависимостях и т.д.
После вычисления внимания в каждой голове результаты конкатенируются («склеиваются») по размерности признаков и умножаются на общую обучаемую матрицу WO, чтобы получить итоговый выход.
Такой подход даёт модели возможность извлекать более богатые и разнообразные представления из данных.