Архитектура трансформера и 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.
Проверьте себя
1. Что такое self-attention?
AВнимание декодера к словам другого языка
BМеханизм, при котором каждое слово предложения смотрит на все слова этого же предложения
CСпособ удаления стоп-слов
DМетод сжатия словаря
2. Какое ключевое преимущество дало трансформеру победу над RNN?
AОн не нуждается в данных
BПараллельная обработка всех слов и прямой доступ к далёким словам за один шаг
CОн работает только с короткими текстами
DОн не использует внимание
3. Зачем трансформеру позиционное кодирование?
AЧтобы ускорить softmax
BЧтобы модель знала порядок слов, ведь все слова обрабатываются одновременно
CЧтобы удалить редкие слова
DЧтобы перевести текст
Поддержать проект