Как трансформер читает «The cat sat on the mat»: шаг за шагом
Проследим одно предложение через слой трансформера: токены, эмбеддинги, позиции, self-attention, residual-связи, нормализация и feed-forward сеть.
Большая языковая модель — это модель глубокого обучения на архитектуре трансформера, обученная на огромных объёмах текста, чтобы понимать и порождать человеческий язык. Если ввести в неё простое предложение «The cat sat on the mat» («Кошка сидела на коврике»), она прочитает его совсем не так, как вы. Модель превращает слова в числа, добавляет к ним сведения о том, где стоит каждое слово, позволяет каждому слову посмотреть на все остальные, чтобы собрать контекст, а затем раз за разом уточняет эти числа, пока каждое слово не получит более богатое и осмысленное представление.
Всё это происходит внутри трансформера, и для понимания основной идеи тяжёлая математика не нужна. Достаточно проследить путь предложения от сырого текста до итогового набора чисел, в котором закодированы смысл, связи и контекст. Ниже — маршрут, который «The cat sat on the mat» проходит через один слой трансформера.
Четыре идеи, которые стоит запомнить
- Attention: токены общаются друг с другом.
- Feed-forward сеть (FFN): каждый токен обрабатывает то, что успел собрать.
- Residual-связь: старую информацию не выбрасываем.
- Нормализация: держим числа в стабильном диапазоне.
Что подаётся на вход блока
1. Текст
На входе — обычное английское предложение. По пути слова не превращаются в другие слова. На каждом шаге меняется векторное представление каждого токена.
2. Токены
Предложение нарезается на небольшие единицы — токены. Часто это целые слова или их части: «The», «cat», «sat», «on», «the», «mat».
3. Эмбеддинги
Каждый токен становится списком чисел — эмбеддингом, своего рода грубым первым отпечатком смысла слова. На этом этапе у «cat» и «mat» уже разные отпечатки, но ни один из них ничего не знает об остальном предложении. Каждый ID токена превращается в вектор:
The → [vector]
cat → [vector]
sat → [vector]
on → [vector]
the → [vector]
mat → [vector]
4. Позиция
Порядок важен, поэтому каждый токен получает ещё и метку своего места: первый, второй и так далее. Теперь «cat» знает, что он второе слово, а «mat» — что последнее. Отпечатки становятся чуть богаче.
5. Self-attention
Здесь трансформер для каждого токена выясняет, какие другие токены в предложении для него важны. Модель позволяет токенам смотреть друг на друга и может выучить сильные связи: например, что «The» относится к «cat», а «sat» описывает действие, в котором участвует «cat». Каждый токен смотрит на все остальные и решает, сколько внимания уделить каждому. «Sat» сильно опирается на «cat» — того, кто сидит, — и на «mat» — место. Артикль «the» перед «mat» в основном смотрит на «mat».
После attention каждый токен впитал полезную информацию из остального предложения. У «cat» появляется смутное ощущение, что сидит именно он, а у «mat» — намёк, что на нём что-то сидит. Иначе говоря:
- cat становится «cat плюс информация о его контексте»
- sat становится «sat плюс информация о том, кто сидит»
- mat становится «mat плюс информация о его связи с 'on'»
Токены перешли от изолированных представлений к представлениям, учитывающим контекст.
6. Residual-связь
Исходную информацию о токене терять нельзя, поэтому результат attention к ней прибавляется. Для «cat»:
Original: "cat"
+Attention
information: "cat is related to The and sat"
Updated : "cat + its contextual information"
7. Нормализация
Затем представления нормализуются:
Updated representations
↓
Normalize
↓
Well-scaled representations
Концептуально для всего предложения:
cat + context
↓
normalized cat + context
sat + context
↓
normalized sat + context
Что изменилось? Смысл на этом шаге меняться не должен. Числа просто масштабируются, чтобы сеть была стабильнее и легче обучалась.
8. Feed-forward сеть
Дальше каждый токен работает со своим обновлённым представлением. Небольшая нейросеть, feed-forward сеть, отдельно разбирает числа каждого токена и снова их преобразует: уточняет смысл, смешивает идеи или готовит вектор к следующему слою. «Cat» может выйти отсюда с более чётким ощущением, что это сидящее животное, а «mat» — что это поверхность. Эта работа отличается от работы attention:
In Attention "Which other tokens are useful?"
In FNN "Now that I have this information, how should I transform it?"
9. Вторая residual-связь
Предыдущая информация снова сохраняется — та же идея применяется к каждому токену:
Before FFN:
"cat + context"
+
FFN output:
"refined representation"
↓
After residual:
"cat + context + refined information"
Что изменилось:
Previous representation
+
FFN's new information
↓
Richer representation
10. Вторая нормализация
Обновлённые представления ещё раз нормализуются для стабильности:
Richer representations
↓
Norm
↓
Stable richer representations
11. Более богатое представление
То, что начиналось как грубые отпечатки слов, теперь стало гораздо более полным набором чисел. Каждый токен хранит свой смысл, свою позицию и связь с другими словами. Это представление идёт в следующий слой трансформера или на финальный выход, где цикл повторяется и «понимание» моделью фразы «The cat sat on the mat» становится глубже.
До блока каждый токен содержит в основном информацию о самом себе:
The → mostly information about "The"
cat → mostly information about "cat"
sat → mostly information about "sat"
on → mostly information about "on"
the → mostly information about "the"
mat → mostly information about "mat"
После блока:
The
↓
"The + information from its context"
cat
↓
"cat + information about its relationships"
sat
↓
"sat + information about cat and the sentence"
on
↓
"on + relationship information"
the
↓
"the + contextual information"
mat
↓
"mat + information about its relationship with on"
.
↓
". + sentence-ending context"
Затем идёт следующий блок трансформера:
Block 1
──────────────
The → contextual representation
cat → contextual representation
sat → contextual representation
on → contextual representation
the → contextual representation
mat → contextual representation
↓
Block 2
──────────────
The → more refined representation
cat → more refined representation
sat → more refined representation
on → more refined representation
the → more refined representation
mat → more refined representation
Дальше тот же процесс повторяется на множестве слоёв. Трансформер постепенно преобразует представления токенов: от простой информации о токене к контекстной и далее к очень богатым представлениям, по которым итоговая модель предсказывает следующий токен.
Что в итоге
Трансформер не понимает язык так, как человек. Он берёт предложение вроде «The cat sat on the mat», делит его на токены и превращает каждый в числа с добавленной информацией о позиции. Attention позволяет каждому слову собрать контекст от остальных, residual-связи и нормализация смешивают и уточняют числа, а feed-forward сеть преобразует их дальше. После многих повторений у модели складывается гораздо более богатая числовая картина предложения, в которой незаметно закодированы смысл, связи и порядок. Именно она позволяет большим языковым моделям так гладко продолжать текст, отвечать на вопросы и предлагать новые идеи.