Как работает архитектура Transformer?

Архитектура Transformer — это нейросетевой подход, основанный исключительно на self-attention механизме, без использования рекуррентных или сверточных слоев. Он был предложен в работе “Attention is All You Need” (Vaswani et al., 2017) и стал базовой архитектурой для современных NLP и CV моделей (BERT, GPT, ViT и др.).

Общая структура Transformer

Классический Transformer состоит из двух симметричных частей:

  • Энкодер (encoder) — обрабатывает входную последовательность и формирует контекстные представления.

  • Декодер (decoder) — генерирует выход (например, перевод), используя выход энкодера и ранее сгенерированные токены.

Обе части состоят из повторяющихся блоков (обычно 6–12), и каждая из них включает attention-механизмы и полносвязные слои.

Входные данные

Последовательность токенов преобразуется в векторы через embedding слой. Но поскольку attention не чувствителен к порядку, добавляется позиционное кодирование (positional encoding) — чтобы вектора знали, где они находятся в последовательности.

Xinput=Embedding(x)+PositionalEncodingX_{\\text{input}} = \\text{Embedding}(x) + \\text{PositionalEncoding}  

Позиционное кодирование бывает:

  • синусоидальным (фиксированное)

  • обучаемым (learnable)

Энкодер

Каждый из NN идентичных энкодер-блоков содержит:

  1. Multi-Head Self-Attention:

    • Каждый токен «смотрит» на другие токены, включая себя.

    • Позволяет учитывать весь контекст при обработке каждого элемента.

  2. Add & Norm:

    • Остаточная связь (residual connection) + layer normalization.
  3. Feed-Forward Neural Network (FFN):

    • Два линейных слоя с ReLU или GELU:
      FFN(x)=max⁡(0,xW1+b1)W2+b2\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2
  4. Ещё раз Add & Norm.

В энкодере все attention-слои — это self-attention, одинаково обрабатывающие вход.

Декодер

Каждый из NN декодер-блоков включает 3 слоя:

  1. Masked Multi-Head Self-Attention:

    • Маскируется будущий контекст (чтобы токен не «знал», что будет дальше).
  2. Multi-Head Attention над выходом энкодера:

    • Каждый токен в декодере обращается к информации, полученной энкодером.
  3. Feed-Forward + Add & Norm, как и в энкодере.

Multi-Head Attention

Ключевая особенность трансформера. Вместо одного внимания — несколько:

  • Разделяются входные векторы на подпространства (головы attention).

  • Каждая голова обучается фокусироваться на разных аспектах (грамматика, семантика и т.п.).

  • Итоговые результаты конкатенируются и снова проецируются.

Формально:

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

где:

  • QQ: запросы (queries)

  • KK: ключи (keys)

  • VV: значения (values)

Residual Connections и LayerNorm

Чтобы улучшить обучение и стабилизировать градиенты:

  • После каждого sublayer (attention или FFN) добавляется остаточная связь:
    Output=LayerNorm(x+Sublayer(x))\text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x))

Архитектурные гиперпараметры

Параметр Значение (пример BERT-base)
Число слоёв (N) 12
--- ---
Размер эмбеддинга 768
--- ---
Число attention-голов 12
--- ---
Размер FFN слоя 3072
--- ---
Dropout 0.1
--- ---

Преимущества архитектуры Transformer

  • Параллелизация: Вся последовательность обрабатывается одновременно, в отличие от RNN.

  • Контекст всей последовательности: Каждый токен учитывает все остальные.

  • Модульность: Компоненты легко заменяются/расширяются.

  • Универсальность: Работает в NLP, CV (Vision Transformer), speech, графах и др.

Разновидности и применения

BERT (Bidirectional Encoder Representations from Transformers)

  • Использует только энкодер.

  • Обучается в двух направлениях (bidirectional).

  • Применяется для классификации, QA, NER, извлечения признаков.

GPT (Generative Pretrained Transformer)

  • Использует только декодер.

  • Unidirectional (слева направо).

  • Применяется для генерации текста, диалогов, программного кода и т.п.

T5, BART

  • Используют полный encoder-decoder, как оригинальный Transformer.

  • Применяются в задачах seq2seq: переформулировка, перевод, суммаризация.

Vision Transformer (ViT)

  • Разбивает изображение на патчи.

  • Преобразует каждый патч в токен (как в NLP).

  • Применяет ту же архитектуру трансформера.

  • Отличается тем, что использует learnable positional encoding для патчей.

Пример реализации (PyTorch):

import torch.nn as nn
transformer = nn.Transformer(
d_model=512,
nhead=8,
num_encoder_layers=6,
num_decoder_layers=6,
dim_feedforward=2048,
dropout=0.1
)

Кратко об архитектуре блока

Каждый энкодер-блок:

Input 
├──> Multi-Head Attention  Add & Norm
├──> FFN  Add & Norm
Output
Каждый декодер-блок:
Input 
├──> Masked Multi-Head Attention  Add & Norm
├──> Encoder Attention  Add & Norm
├──> FFN  Add & Norm
Output

Проблемы и улучшения

  1. Время и память: O(n²) по длине последовательности.

    • Решение: Longformer, Linformer, Performer (спарс/линейное внимание).
  2. Отсутствие Recurrence: неявно обрабатываются последовательности.

    • Иногда это может быть проблемой при сигнале с жёсткой временной структурой.
  3. Неинформативное позиционное кодирование.

    • Улучшается обучаемыми embeddings, rotary embeddings (RoPE) и др.

Архитектура Transformer произвела революцию в обработке последовательностей, вытеснив рекуррентные подходы во многих задачах. Сегодня трансформеры лежат в основе большинства современных моделей: GPT, BERT, T5, ViT, Whisper, CLIP и других.