Как устроен трансформер: механизм внимания в нейросетях

Как устроен трансформер: механизм внимания в нейросетях

Описана архитектура 2017 года; данные на октябрь 2026Опубликовано 9 декабря 2025Обновлено 30 сентября 20267 мин чтения
Пять машин с линзами, связанные арками проводов
Коротко
  • Трансформер обрабатывает все токены последовательности сразу и не читает их по очереди, как рекуррентная сеть.
  • Его основа — механизм внимания: каждое слово взвешивает, насколько важны для него все остальные.
  • Внимание считают через запросы, ключи и значения, а порядок слов задают позиционными кодировками.
  • Цена параллельности — расчёт внимания растёт с длиной текста квадратично, поэтому контекст ограничен.
Содержание7 разделов ▾
  1. Какую задачу решает трансформер
  2. Как работает механизм внимания
  3. Из чего состоит блок трансформера
  4. Трансформер и RNN
  5. Условия и ограничения
  6. Частые ошибки
  7. Короткий вывод

Трансформер — это архитектура нейросети, которая обрабатывает всю последовательность токенов сразу и с помощью механизма внимания решает, какие слова важны для каждого другого слова. Статья для тех, кто уже знаком с нейросетями и токенами и хочет понять, что внутри современных языковых моделей.

Опираемся на оригинальную статью Васвани и соавторов 2017 года, на работу Бахданау о мягком внимании, на главу учебника Яндекса и курс Hugging Face. Расчёт внимания запускался на Python 3.13, данные на октябрь 2026 года. Описана оригинальная архитектура: современные модели вносят в неё изменения.

Какую задачу решает трансформер

До 2017 года последовательности, например тексты, обрабатывали в основном рекуррентными сетями (RNN). В учебнике Яндекса перечислены их минусы. Вся информация о прошлом хранится в одном скрытом состоянии, которое обновляется на каждом шаге, и далёкие детали приходится терять или иметь огромное состояние. Кроме того, чтобы вычислить состояние на шаге t, нужно сначала получить состояние на шаге t−1, поэтому обучение трудно распараллелить.

Авторы трансформера предложили отказаться от рекуррентности и свёрток полностью. По их словам, модель оказалась лучше по качеству перевода, лучше параллелится и обучается быстрее. Идею внимания они не изобрели: в 2014 году Бахданау, Чо и Бенжио применили мягкое выравнивание слов в нейронном машинном переводе.

Как работает механизм внимания

В статье внимание описано как отображение запроса и набора пар «ключ — значение» в результат. Запрос, ключи, значения и результат — векторы. Результат — взвешенная сумма значений, а вес каждого значения вычисляется по совместимости запроса с соответствующим ключом.

Конкретная формула в статье называется масштабированным скалярным произведением:

Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V

Разберём её словами:

  • QQ — матрица запросов: строка на каждое слово, вопрос «что мне нужно?».
  • KK — матрица ключей: «что я могу предложить?».
  • VV — матрица значений: то, что слово передаст, если на него обратят внимание.
  • QK⊤QK^{\top} — скалярные произведения всех запросов со всеми ключами: чем больше число, тем лучше слова подходят друг другу.
  • dk\sqrt{d_k} — делитель, где dkd_k — размерность ключа. Авторы заметили: при большом dkd_k произведения вырастают, и softmax попадает в область с крайне малыми градиентами. Деление это компенсирует.
  • softmax\mathrm{softmax} превращает числа в веса: все неотрицательны, а сумма равна единице.

Посчитаем это на трёх словах. Чтобы не усложнять, возьмём векторы из двух чисел и положим Q=K=V=XQ=K=V=X, то есть пропустим обучаемые матрицы, которые в настоящей модели строят QQ, KK и VV из эмбеддингов. Числа учебные.

Python
import math

слова = ["кошка", "ловит", "мышь"]
# Учебные векторы из двух чисел (в настоящих моделях их сотни и тысячи)
x = [[1.0, 0.0], [0.5, 0.5], [0.0, 1.0]]
d = 2  # размерность ключа

def softmax(числа):
    e = [math.exp(v) for v in числа]
    s = sum(e)
    return [v / s for v in e]

def скалярное(a, b):
    return sum(p * q for p, q in zip(a, b))

# Упрощение: запросы, ключи и значения берём равными самим векторам слов
Q = K = V = x

for i, слово in enumerate(слова):
    оценки = [скалярное(Q[i], K[j]) / math.sqrt(d) for j in range(len(слова))]
    веса = softmax(оценки)
    результат = [sum(веса[j] * V[j][c] for j in range(len(слова))) for c in range(d)]
    print(f"{слово:6} веса внимания: " + "  ".join(f"{w:.2f}" for w in веса))
    print(f"       новый вектор: [{результат[0]:.2f}, {результат[1]:.2f}]")

Вывод при запуске на Python 3.13.12:

Текст
кошка  веса внимания: 0.46  0.32  0.22
       новый вектор: [0.62, 0.38]
ловит  веса внимания: 0.33  0.33  0.33
       новый вектор: [0.50, 0.50]
мышь   веса внимания: 0.22  0.32  0.46
       новый вектор: [0.38, 0.62]

Каждая строка весов в сумме даёт единицу. «Кошка» сильнее всего «смотрит» на себя и на соседа, «мышь» — тоже на себя. «Ловит» стоит посередине, поэтому его веса одинаковы. Новый вектор каждого слова — смесь векторов всех слов с этими весами.

Одного такого расчёта мало, поэтому в трансформере используют многоголовое внимание. Авторы взяли h=8h=8 параллельных «голов», в каждой dk=dv=64d_k=d_v=64 при размерности модели 512. Так модель одновременно ищет разные типы связей.

Из чего состоит блок трансформера

Оригинальная модель — это энкодер и декодер. По описанию в статье, энкодер — стек из N=6N=6 одинаковых слоёв. В каждом два подслоя: многоголовое самовнимание и простая полносвязная сеть, применяемая к каждой позиции. Вокруг каждого подслоя стоят остаточная связь и нормализация слоя. В учебнике Яндекса эту часть схемы называют «Add & Norm». У декодера схема похожая, но слоёв внимания в блоке два, и один из них использует выходы энкодера.

Остаётся вопрос порядка слов. Внимание само по себе не знает, какое слово стоит первым. Поэтому, как сказано в статье, к эмбеддингам добавляют позиционные кодировки: в оригинале это синусы и косинусы разных частот.

Курс Hugging Face описывает оригинальную архитектуру как сочетание энкодера и декодера. Отдельные главы курса посвящены моделям, построенным только из энкодера.

Трансформер и RNN

СвойствоРекуррентная сетьТрансформер
Как читает текстПо одному токену, передавая скрытое состояниеВсе токены сразу
Путь между далёкими позициямиO(n)O(n) шаговO(1)O(1) шагов
Последовательные операцииO(n)O(n)O(1)O(1)
Сложность слояO(n⋅d2)O(n \cdot d^2)O(n2⋅d)O(n^2 \cdot d)
Узкое местоТрудно распараллелитьРост вычислений при увеличении длины

Данные таблицы взяты из таблицы 1 статьи Васвани и соавторов: nn — длина последовательности, dd — размерность представления. Для самовнимания слой дешевле рекуррентного, когда nn меньше dd, что для типичных представлений предложений обычно выполняется. Для очень длинных текстов авторы предлагали ограничивать внимание окрестностью позиции.

Условия и ограничения

Версия
Октябрь 2026 — данные приведены на дату написания; расчёт проверен на Python 3.13.12.
Архитектура
Оригинал 2017 года — описана исходная модель; современные большие модели вносят в неё изменения, и обобщать описание на них нельзя.
Размеры
Числа из статьи — шесть слоёв, восемь голов и размерность 512 относятся к оригинальной модели; у других моделей значения другие.
Контекст
Стоимость внимания — вычисления растут с длиной текста; пределы конкретной модели смотрите в её документации.
Код
Учебный пример — расчёт упрощён (Q, K и V равны входным векторам) и не заменяет настоящую модель.

Частые ошибки

  • Считают веса внимания объяснением решения модели: это промежуточные числа, а не доказательство причины.
  • Забывают про позиционные кодировки и удивляются, откуда модель знает порядок слов.
  • Путают размер контекста и размер модели: это разные параметры.
  • Путают архитектуру «трансформер» и продукт вроде чат-бота: чат-бот строят на модели, а не наоборот.
  • Переносят цифры оригинальной статьи на современные модели.
  • Думают, что внимание — изобретение 2017 года: идею мягкого внимания в переводе описали ещё в 2014 году.

Короткий вывод

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

Источники

  1. Vaswani et al. Attention Is All You Need, arXiv:1706.03762↗ arxiv.org
  2. Bahdanau, Cho, Bengio. Neural Machine Translation by Jointly Learning to Align and Translate, arXiv:1409.0473↗ arxiv.org
  3. Учебник по машинному обучению ШАД Яндекса: Трансформеры↗ education.yandex.ru
  4. Курс Hugging Face на русском: Как работают трансформеры?↗ huggingface.co
  5. Wikipedia: Attention (machine learning)↗ en.wikipedia.org

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

Что такое трансформер в нейросетях?

Трансформер — архитектура нейросети, предложенная в 2017 году в статье «Attention Is All You Need». Она целиком построена на механизме внимания и обходится без рекуррентных и свёрточных слоёв. Авторы показали на задачах машинного перевода, что такая модель точнее и обучается быстрее предшественниц. В учебнике Яндекса отмечено, что на этой архитектуре так или иначе опираются почти все заметные достижения глубинного обучения последних лет.

Как работает механизм внимания простыми словами?

Для каждого слова модель оценивает, насколько важно каждое другое слово текста, и собирает новое представление как взвешенную сумму. В статье это описано через запрос, ключи и значения: близость запроса к ключам даёт веса, а веса смешивают значения. Если слово «ловит» одинаково связано со всеми соседями, веса будут почти равны. Расчёт на трёх словах есть в этой статье.

Чем трансформер отличается от рекуррентной нейросети?

Рекуррентная сеть читает текст по шагам и хранит всё прошлое в одном скрытом состоянии, поэтому ей трудно параллельно обучаться и помнить далёкое. Трансформер даёт каждому слову прямой доступ ко всем остальным за константное число шагов. По таблице из статьи 2017 года у внимания путь между любыми позициями O(1), у рекуррентного слоя O(n).

Почему у моделей ограничен размер контекста?

Одна из причин в стоимости внимания. В статье 2017 года сложность слоя внимания оценена как O(n²·d), где n — длина последовательности. Значит, при удвоении текста вычислений нужно примерно вчетверо больше. Авторы предлагали для очень длинных последовательностей смотреть только на окрестность каждой позиции. Конкретные пределы зависят от модели; их указывают в документации сервиса.

Нужно ли знать математику, чтобы понять трансформер?

Для общей идеи хватит этой статьи: она объясняет формулу внимания словами и примером на трёх словах. Для разработки нужны линейная алгебра и основы вероятностей. На русском языке подробный разбор есть в главе «Трансформеры» учебника по машинному обучению Школы анализа данных Яндекса и в курсе Hugging Face, переведённом на русский.

  • #transformer
  • #vnimanie
  • #arhitektura
РедакцияМатериал подготовлен по источникам выше · 30 сентября 2026