- Трансформер обрабатывает все токены последовательности сразу и не читает их по очереди, как рекуррентная сеть.
- Его основа — механизм внимания: каждое слово взвешивает, насколько важны для него все остальные.
- Внимание считают через запросы, ключи и значения, а порядок слов задают позиционными кодировками.
- Цена параллельности — расчёт внимания растёт с длиной текста квадратично, поэтому контекст ограничен.
Содержание7 разделов ▾
Трансформер — это архитектура нейросети, которая обрабатывает всю последовательность токенов сразу и с помощью механизма внимания решает, какие слова важны для каждого другого слова. Статья для тех, кто уже знаком с нейросетями и токенами и хочет понять, что внутри современных языковых моделей.
Опираемся на оригинальную статью Васвани и соавторов 2017 года, на работу Бахданау о мягком внимании, на главу учебника Яндекса и курс Hugging Face. Расчёт внимания запускался на Python 3.13, данные на октябрь 2026 года. Описана оригинальная архитектура: современные модели вносят в неё изменения.
Какую задачу решает трансформер
До 2017 года последовательности, например тексты, обрабатывали в основном рекуррентными сетями (RNN). В учебнике Яндекса перечислены их минусы. Вся информация о прошлом хранится в одном скрытом состоянии, которое обновляется на каждом шаге, и далёкие детали приходится терять или иметь огромное состояние. Кроме того, чтобы вычислить состояние на шаге t, нужно сначала получить состояние на шаге t−1, поэтому обучение трудно распараллелить.
Авторы трансформера предложили отказаться от рекуррентности и свёрток полностью. По их словам, модель оказалась лучше по качеству перевода, лучше параллелится и обучается быстрее. Идею внимания они не изобрели: в 2014 году Бахданау, Чо и Бенжио применили мягкое выравнивание слов в нейронном машинном переводе.
Как работает механизм внимания
В статье внимание описано как отображение запроса и набора пар «ключ — значение» в результат. Запрос, ключи, значения и результат — векторы. Результат — взвешенная сумма значений, а вес каждого значения вычисляется по совместимости запроса с соответствующим ключом.
Конкретная формула в статье называется масштабированным скалярным произведением:
Разберём её словами:
- — матрица запросов: строка на каждое слово, вопрос «что мне нужно?».
- — матрица ключей: «что я могу предложить?».
- — матрица значений: то, что слово передаст, если на него обратят внимание.
- — скалярные произведения всех запросов со всеми ключами: чем больше число, тем лучше слова подходят друг другу.
- — делитель, где — размерность ключа. Авторы заметили: при большом произведения вырастают, и softmax попадает в область с крайне малыми градиентами. Деление это компенсирует.
- превращает числа в веса: все неотрицательны, а сумма равна единице.
Посчитаем это на трёх словах. Чтобы не усложнять, возьмём векторы из двух чисел и положим , то есть пропустим обучаемые матрицы, которые в настоящей модели строят , и из эмбеддингов. Числа учебные.
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]Каждая строка весов в сумме даёт единицу. «Кошка» сильнее всего «смотрит» на себя и на соседа, «мышь» — тоже на себя. «Ловит» стоит посередине, поэтому его веса одинаковы. Новый вектор каждого слова — смесь векторов всех слов с этими весами.
Одного такого расчёта мало, поэтому в трансформере используют многоголовое внимание. Авторы взяли параллельных «голов», в каждой при размерности модели 512. Так модель одновременно ищет разные типы связей.
Из чего состоит блок трансформера
Оригинальная модель — это энкодер и декодер. По описанию в статье, энкодер — стек из одинаковых слоёв. В каждом два подслоя: многоголовое самовнимание и простая полносвязная сеть, применяемая к каждой позиции. Вокруг каждого подслоя стоят остаточная связь и нормализация слоя. В учебнике Яндекса эту часть схемы называют «Add & Norm». У декодера схема похожая, но слоёв внимания в блоке два, и один из них использует выходы энкодера.
Остаётся вопрос порядка слов. Внимание само по себе не знает, какое слово стоит первым. Поэтому, как сказано в статье, к эмбеддингам добавляют позиционные кодировки: в оригинале это синусы и косинусы разных частот.
Курс Hugging Face описывает оригинальную архитектуру как сочетание энкодера и декодера. Отдельные главы курса посвящены моделям, построенным только из энкодера.
Трансформер и RNN
| Свойство | Рекуррентная сеть | Трансформер |
|---|---|---|
| Как читает текст | По одному токену, передавая скрытое состояние | Все токены сразу |
| Путь между далёкими позициями | шагов | шагов |
| Последовательные операции | ||
| Сложность слоя | ||
| Узкое место | Трудно распараллелить | Рост вычислений при увеличении длины |
Данные таблицы взяты из таблицы 1 статьи Васвани и соавторов: — длина последовательности, — размерность представления. Для самовнимания слой дешевле рекуррентного, когда меньше , что для типичных представлений предложений обычно выполняется. Для очень длинных текстов авторы предлагали ограничивать внимание окрестностью позиции.
Условия и ограничения
- Версия
- Октябрь 2026 — данные приведены на дату написания; расчёт проверен на Python 3.13.12.
- Архитектура
- Оригинал 2017 года — описана исходная модель; современные большие модели вносят в неё изменения, и обобщать описание на них нельзя.
- Размеры
- Числа из статьи — шесть слоёв, восемь голов и размерность 512 относятся к оригинальной модели; у других моделей значения другие.
- Контекст
- Стоимость внимания — вычисления растут с длиной текста; пределы конкретной модели смотрите в её документации.
- Код
- Учебный пример — расчёт упрощён (Q, K и V равны входным векторам) и не заменяет настоящую модель.
Частые ошибки
- Считают веса внимания объяснением решения модели: это промежуточные числа, а не доказательство причины.
- Забывают про позиционные кодировки и удивляются, откуда модель знает порядок слов.
- Путают размер контекста и размер модели: это разные параметры.
- Путают архитектуру «трансформер» и продукт вроде чат-бота: чат-бот строят на модели, а не наоборот.
- Переносят цифры оригинальной статьи на современные модели.
- Думают, что внимание — изобретение 2017 года: идею мягкого внимания в переводе описали ещё в 2014 году.
Короткий вывод
Трансформер заменил последовательное чтение текста параллельной обработкой, а в основе его работы лежит внимание — взвешенное смешивание представлений всех токенов. Пока вы читаете формулу, помните три слова: запрос, ключ, значение. Дальше изучайте то, что строится на этой основе: дообучение, генерацию и работу с документами.




