Трансформер

Коротко

Definition

Трансформер — это нейросетевая архитектура для обработки последовательностей, основанная на self-attention и не требующая рекуррентных или свёрточных слоёв.

Трансформер был предложен в статье Attention Is All You Need. Его ключевая идея — заменить пошаговую рекуррентную обработку последовательности механизмом внимания, который позволяет токенам напрямую учитывать друг друга.

Трансформеры лежат в основе многих современных моделей:

  • BERT и RoBERTa — encoder-only модели;
  • GPT и LLaMA — decoder-only модели;
  • T5, BART и NLLB — encoder-decoder модели;
  • Vision Transformer — применение transformer-подхода к изображениям.

Интуиция

В RNN и LSTM последовательность обрабатывается по шагам: сначала первый токен, потом второй, потом третий. Это естественно, но плохо параллелится и может затруднять работу с дальними зависимостями.

Трансформер делает иначе. Он позволяет каждому токену сразу «посмотреть» на другие токены последовательности через механизм self-attention.

Например, в предложении местоимение может быть связано со словом, которое стоит далеко раньше. Self-attention позволяет построить такую связь напрямую, без передачи информации через длинную цепочку рекуррентных состояний.

Главная идея:

  • каждый токен получает embedding;
  • к embedding добавляется информация о позиции;
  • self-attention смешивает информацию между токенами;
  • feed-forward слои преобразуют представления;
  • residual connections и нормализация стабилизируют обучение.

Формальное описание

Входная последовательность токенов:

Сначала каждый токен преобразуется в embedding:

Так как self-attention сам по себе не знает порядок токенов, к embeddings добавляется positional encoding или positional embedding:

Далее transformer-блок применяет self-attention и feed-forward сеть.

В scaled dot-product attention используются три матрицы:

Attention вычисляется так:

где:

  • — queries;
  • — keys;
  • — values;
  • — размерность key-векторов;
  • — нормировка для стабильности softmax.

В multi-head attention несколько attention-голов работают параллельно:

Затем головы объединяются:

Входы и выходы

КомпонентОписание
ВходПоследовательность токенов или векторов
ВыходКонтекстуальные представления токенов или вероятности следующих токенов
Основной механизмAttention / self-attention
Типичные данныеТекст, последовательности, изображения как patch-последовательности
Тип обученияС учителем, self-supervised, instruction tuning и другие варианты

В зависимости от варианта архитектуры трансформер может решать разные задачи.

ВариантПримерЧто делает
Encoder-onlyBERTСтроит представления входного текста
Decoder-onlyGPTГенерирует следующий токен
Encoder-decoderT5, BARTПреобразует одну последовательность в другую

Как обучается

Трансформер обучается через обычную нейросетевую оптимизацию: forward pass, функция потерь, backpropagation и обновление параметров.

Но конкретная обучающая задача зависит от типа модели.

Encoder-only

Encoder-only модели часто обучают через masked language modeling.

Часть токенов скрывается, а модель должна восстановить их по контексту:

Такие модели хорошо подходят для классификации, извлечения признаков, поиска и анализа текста.

Decoder-only

Decoder-only модели обучаются предсказывать следующий токен:

Для этого используется causal mask: токен может смотреть только на предыдущие токены, но не на будущие.

Так обучаются autoregressive language models.

Encoder-decoder

Encoder-decoder трансформеры обучаются преобразовывать входную последовательность в выходную:

Это удобно для перевода, суммаризации и других Seq2Seq-задач.

Функция потерь

Для текстовых transformer-моделей чаще всего используется Кросс-энтропия по токенам.

Если модель предсказывает распределение вероятностей по словарю, а правильный токен на позиции равен , то loss:

Для всей последовательности:

Или среднее по токенам:

Для других задач могут использоваться:

  • binary cross-entropy для multilabel-классификации;
  • contrastive loss для retrieval и representation learning;
  • MSE для регрессии;
  • reinforcement learning objective для некоторых этапов дообучения генеративных моделей.

Гиперпараметры

Главные гиперпараметры трансформера:

ГиперпараметрЧто контролирует
d_modelРазмерность токен-представлений
num_layersКоличество transformer-блоков
num_headsКоличество attention-голов
d_ffРазмерность feed-forward слоя
context_lengthМаксимальная длина контекста
dropoutРегуляризация
learning_rateШаг оптимизации
batch_sizeРазмер батча
vocab_sizeРазмер словаря
weight_decayL2-регуляризация
warmup_stepsПлавный разогрев learning rate

Для decoder-only языковых моделей особенно важны:

  • длина контекста;
  • способ positional encoding;
  • размер словаря и tokenizer;
  • стратегия маскирования будущих токенов;
  • параметры генерации: temperature, top-k, top-p, beam search.

Когда использовать

Трансформер стоит использовать, когда:

  • данные являются последовательностью;
  • важны дальние зависимости между элементами;
  • нужен современный подход к NLP;
  • требуется генерация текста;
  • есть достаточно данных или доступна pretrained-модель;
  • важна параллелизация обучения;
  • нужно строить контекстуальные представления токенов;
  • задача похожа на перевод, суммаризацию, классификацию текста, поиск или диалог.

Трансформеры особенно сильны там, где модель должна учитывать контекст, а не обрабатывать элементы независимо.

Когда не использовать

Трансформер может быть не лучшим выбором, если:

  • данных мало и нет pretrained-модели;
  • задача простая и решается классическим ML;
  • важны минимальная задержка и маленький размер модели;
  • последовательности очень длинные, а полный self-attention слишком дорогой;
  • данные табличные и не имеют естественной последовательной структуры;
  • требуется простая интерпретируемая модель.

Для табличных задач часто лучше начать с линейных моделей, случайного леса или градиентного бустинга. Для маленьких временных рядов иногда проще использовать LSTM, сверточные модели или классические методы.

Метрики оценки

Метрики зависят от задачи.

Для языкового моделирования:

  • cross-entropy loss;
  • perplexity.

Для классификации текста:

  • accuracy;
  • precision;
  • recall;
  • F1-score;
  • ROC-AUC.

Для машинного перевода:

  • BLEU;
  • chrF;
  • COMET.

Для суммаризации:

  • ROUGE;
  • BERTScore;
  • human evaluation.

Для retrieval:

  • recall@k;
  • precision@k;
  • MRR;
  • NDCG.

Для генеративных моделей важно не полагаться только на автоматические метрики: часто нужна ручная проверка качества, фактической точности и полезности ответов.

Типичные ошибки понимания

Ошибка 1. Думать, что трансформер — это только ChatGPT

ChatGPT-подобные модели — это частный случай decoder-only трансформеров. Трансформеры шире: они бывают encoder-only, decoder-only и encoder-decoder.

Ошибка 2. Путать attention и трансформер

Attention — это механизм. Трансформер — архитектура, которая строится из attention, feed-forward слоёв, residual connections, нормализации и positional encoding.

Ошибка 3. Забывать про positional encoding

Self-attention без позиционной информации не знает порядок токенов. Поэтому трансформеру нужно явно добавить информацию о позициях.

Ошибка 4. Думать, что attention всегда дешёвый

Полный self-attention имеет сложность:

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

Ошибка 5. Считать attention-веса полным объяснением модели

Attention-веса могут быть полезны для анализа, но они не всегда являются строгим объяснением решения модели.

Минимальный пример

import torch
from torch import nn
 
batch_size = 4
seq_len = 12
d_model = 32
num_heads = 4
 
layer = nn.TransformerEncoderLayer(
    d_model=d_model,
    nhead=num_heads,
    batch_first=True,
)
 
encoder = nn.TransformerEncoder(
    encoder_layer=layer,
    num_layers=2,
)
 
x = torch.randn(batch_size, seq_len, d_model)
output = encoder(x)
 
print(output.shape)

В этом примере создаётся небольшой transformer encoder. Вход и выход имеют форму:

То есть модель возвращает контекстуальное представление для каждого токена последовательности.

Связанные понятия

Что знать перед этим

Связанные заметки