Архитектура трансформера и self-attention
Трансформер выбросил рекуррентность и оставил одно внимание — и это оказалось революцией, на которой стоит весь современный NLP.
Трансформер (Transformer) — нейросетевая архитектура, основанная целиком на механизме внимания, без рекуррентности; обрабатывает все слова последовательности параллельно.
Главная идея: «Attention is all you need»
В 2017 году вышла статья с дерзким названием «Внимание — это всё, что нужно». Авторы убрали из модели RNN полностью и оставили только внимание. Оказалось, что для понимания текста рекуррентность не обязательна — достаточно, чтобы каждое слово могло посмотреть на все остальные. Так родился трансформер.
Self-attention: каждое слово смотрит на все
В прошлом разделе декодер смотрел на слова входа. Self-attention («самовнимание») применяет ту же идею внутри одного предложения: каждое слово вычисляет, насколько оно связано с каждым другим словом этого же предложения, и собирает из них свой контекст. Так слово «его» найдёт, к кому относится; «банк» поймёт из соседей, речной он или финансовый.
«кошка села на коврик, потому что она устала»
↑
слово «она» через self-attention смотрит на все слова
и обнаруживает сильную связь с «кошка» — вот к кому относится
Каждое слово как бы задаёт вопрос (query) и сравнивает его с ключами (keys) всех слов, получает веса внимания (тот самый softmax из прошлого урока) и собирает взвешенную смесь значений (values). Результат — контекстное представление слова, учитывающее всё предложение сразу.
Почему это победило RNN
| Свойство | RNN/LSTM | Трансформер |
| Обработка слов | строго по очереди | все сразу (параллельно) |
| Длинные зависимости | затухают через много шагов | любое слово видит любое за один шаг |
| Скорость на GPU | плохо распараллеливается | отлично распараллеливается |
Два решающих преимущества. Первое — параллельность: RNN обязана идти слово за словом, а трансформер обрабатывает все слова одновременно, что идеально для видеокарт и позволяет обучаться на огромных данных. Второе — прямой доступ: чтобы связать первое и последнее слово, RNN нужно протащить сигнал через всё предложение, а в self-attention они связаны напрямую, за один шаг.
Откуда трансформер знает порядок слов
Раз все слова обрабатываются сразу, сеть теряет информацию о порядке («кошка села» и «села кошка» выглядели бы одинаково). Чтобы это исправить, к эмбеддингу каждого слова добавляют позиционное кодирование — вектор, кодирующий позицию слова в предложении. Так модель знает не только что за слово, но и где оно стоит.
Что ещё в трансформере
- Multi-head attention: несколько «голов» внимания параллельно, каждая ловит свой тип связей (синтаксис, кореференция, и т.д.).
- Слои: блоки внимания + полносвязные слои, сложенные в стопку (десятки слоёв).
- Энкодер и декодер: исходный трансформер имел обе части (как seq2seq), но BERT использует только энкодер, GPT — только декодер.
Итог
- Трансформер построен целиком на внимании, без рекуррентности.
- Self-attention: каждое слово смотрит на все слова предложения и собирает контекст.
- Победил RNN за счёт параллельности и прямого доступа к далёким словам.
- Порядок слов задаётся позиционным кодированием.
- На этой архитектуре построены BERT и GPT.