COMRAD404 / GLOSSARY

Self-attention

Self-attention — механизм, в котором каждый токен оценивает важность остальных токенов той же последовательности. Это базовый блок Transformer и современных LLM.

Self-attention — это механизм, который для каждого токена в последовательности вычисляет, на какие другие токены этой же последовательности нужно смотреть сильнее, чтобы получить его контекстное представление. На практике это базовый строительный блок архитектуры Transformer: он хорошо ловит дальние зависимости и легко распараллеливается, но по умолчанию требует квадратичной памяти и времени по длине последовательности, поэтому без специальных модификаций плохо подходит для очень длинных документов, длинного аудио, видео и сценариев со строгими ограничениями по задержке и памяти.

Простыми словами

Если упростить, self-attention отвечает на вопрос: какие слова вокруг важны для понимания этого слова прямо сейчас. Не вообще по словарю, а именно в текущем контексте.

Когда модель читает фразу, она не обрабатывает слово изолированно. Для слова лук в предложении Он купил лук для супа полезны слова купил и супа. В предложении Он натянул лук перед выстрелом важными станут уже натянул и выстрелом. Само слово то же, но его представление в модели меняется за счет контекста.

В этом и смысл self-attention: каждый токен получает не одно фиксированное значение, а представление, собранное из всей последовательности с разными весами важности.

Как это работает

Механизм работает не со словами как таковыми, а с их векторными представлениями. Для каждого токена модель строит три вектора: Query, Key и Value. Дальше она сравнивает Query текущего токена с Key остальных токенов и получает оценки релевантности. После нормализации эти оценки становятся весами, которыми усредняются Value.

Компонент Что делает Зачем нужен
Входные эмбеддинги Преобразуют токены в векторы Дают модели числовое представление текста
Позиционная информация Добавляет сведения о порядке токенов Без нее self-attention не знает, что было раньше и позже
Query Формулирует, что ищет текущий токен Позволяет сравнивать токен с контекстом
Key Описывает, чем токен может быть полезен другим Участвует в вычислении веса внимания
Value Содержит информацию, которую токен передает дальше Из Value собирается итоговое представление
Softmax Преобразует оценки в веса Делает веса сравнимыми и суммирующимися к 1
Multi-head Считает несколько attention-проекций параллельно Позволяет ловить разные типы связей одновременно

Классическая формула выглядит так: Attention(Q, K, V) = softmax(QK^T / sqrt(d_k))V.

Практически процесс можно описать так:

  1. Токены превращаются в эмбеддинги.
  2. К эмбеддингам добавляется позиционная информация.
  3. Три линейных слоя строят матрицы Q, K и V.
  4. Считаются попарные оценки сходства между токенами.
  5. Оценки масштабируются и пропускаются через softmax.
  6. Полученные веса используются для взвешенной суммы V.
  7. Результаты нескольких голов внимания объединяются.

В языковых моделях для генерации текста часто используется causal self-attention: токен может смотреть только на себя и предыдущие токены, но не на будущие. Это ограничение задается маской.

Важно понимать, что self-attention сам по себе не хранит «знание о мире» и не делает логический вывод. Он лишь строит более полезные контекстные представления, на которых потом работают остальные слои модели.

Зачем нужно

Для практики self-attention полезен по нескольким причинам.

  • Улавливает дальние зависимости. Токен может напрямую учитывать слова, стоящие далеко в тексте, без длинной цепочки промежуточных состояний.
  • Дает контекстно-зависимые представления. Одно и то же слово получает разный смысл в разных предложениях.
  • Хорошо параллелится. В отличие от классических рекуррентных сетей, обработку токенов можно выполнять одновременно, что удобно для обучения на GPU.
  • Масштабируется по выразительности. Несколько голов внимания позволяют модели одновременно отслеживать синтаксис, локальный контекст, согласование и тематические связи.
  • Работает не только с текстом. Идея перенесена в обработку изображений, аудио, биологических последовательностей и мультимодальных моделей.

На уровне инженерии это означает, что self-attention особенно полезен там, где важны сложные контекстные зависимости: машинный перевод, извлечение фактов, поиск по документам, генерация кода, суммаризация и диалоговые системы.

Пример

Практический пример — снятие неоднозначности слова.

Возьмем два предложения:

Предложение Для токена лук важнее Что меняется
Он купил лук для супа купил, супа Представление смещается к значению «овощ»
Он натянул лук перед выстрелом натянул, выстрелом Представление смещается к значению «оружие»

Здесь не нужно вручную описывать правило «если рядом суп, то это овощ». Модель сама учится распределять веса внимания так, чтобы контекст менял представление токена.

Для практикующего инженера это означает следующее: если downstream-задача зависит от смысла слова в контексте, self-attention обычно полезнее простого усреднения эмбеддингов или мешка слов. Но это не гарантирует интерпретируемость: из того, что вес на слове высокий, не всегда следует, что именно оно стало причиной финального решения модели.

Заблуждения и ограничения

1. Self-attention — это не «человеческое внимание»

Название легко вводит в заблуждение. Механизм не имитирует когнитивное внимание в строгом смысле, а лишь вычисляет веса взаимодействия между токенами.

2. Веса attention не равны объяснению решения

По картинке attention-weight удобно смотреть, куда модель «смотрит», но это не полноценное объяснение. На результат влияют и остальные слои, и residual-связи, и MLP-блоки.

3. Без позиционной информации порядок теряется

Чистый self-attention не знает, какой токен первый, а какой последний. Поэтому нужны позиционные эмбеддинги или их аналоги.

4. Стандартный self-attention плохо масштабируется на очень длинные последовательности

Полная матрица внимания требует O(n^2) операций и памяти по длине последовательности n. На коротких и средних входах это нормально, но для длинных документов, аудиодорожек и видео стоимость быстро становится высокой. В таких случаях используют оконное, разреженное, линейное, иерархическое внимание или специализированные реализации вроде FlashAttention.

5. Self-attention не всегда лучший выбор

  • Для маленьких табличных задач без выраженной последовательной структуры он часто избыточен.
  • Для жесткого real-time на слабом железе квадратичная сложность может быть неприемлемой.
  • Для очень длинных сигналов без модификаций архитектуры он быстро упирается в память.
  • Для задач, где важна сильная локальная индуктивная предвзятость, свертки иногда эффективнее и дешевле.

Итоговый практический вывод простой: self-attention — мощный универсальный механизм, но не бесплатный и не универсально оптимальный.

Частые вопросы

Чем self-attention отличается от обычного attention?

В self-attention запросы, ключи и значения берутся из одной и той же последовательности. В cross-attention запросы приходят из одной последовательности, а ключи и значения — из другой. Поэтому self-attention связывает элементы внутри одного контекста, а cross-attention — между двумя контекстами.

Зачем нужен positional encoding?

Потому что self-attention сам по себе инвариантен к перестановке токенов. Без позиции модель не отличит собака укусила человека от человек укусил собаку, если смотреть только на набор токенов и их попарные взаимодействия.

Что такое multi-head attention?

Это несколько независимых механизмов внимания, работающих параллельно на разных проекциях признаков. Одна голова может сильнее реагировать на локальные связи, другая — на согласование или дальние зависимости. После этого результаты объединяются.

Можно ли применять self-attention к длинным документам?

Можно, но не всегда в лоб. Для длинных входов стандартная полная матрица внимания дорога по памяти и времени. На практике используют chunking, sliding window, sparse attention, retrieval, иерархические схемы или специальные оптимизации ядра.

Связанные понятия

  • Transformer — архитектура, в которой self-attention стал центральным механизмом обработки последовательностей.
  • Scaled dot-product attention — базовая форма вычисления внимания через скалярные произведения Q и K.
  • Multi-head attention — параллельные головы внимания, расширяющие выразительность модели.
  • Cross-attention — внимание между двумя разными последовательностями, например между декодером и энкодером.
  • Positional encoding — способ добавить в модель информацию о порядке токенов.
  • Causal mask — ограничение, запрещающее токену смотреть в будущее при авторегрессионной генерации.
  • FlashAttention — класс оптимизированных реализаций attention, уменьшающих накладные расходы по памяти и ускоряющих обучение и инференс.

Читайте также

LINKS