Трансформер

Коротко
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-only | BERT | Строит представления входного текста |
| Decoder-only | GPT | Генерирует следующий токен |
| Encoder-decoder | T5, 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_decay | L2-регуляризация |
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. Вход и выход имеют форму:
То есть модель возвращает контекстуальное представление для каждого токена последовательности.