Как работает архитектура 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 идентичных энкодер-блоков содержит:
-
Multi-Head Self-Attention:
-
Каждый токен «смотрит» на другие токены, включая себя.
-
Позволяет учитывать весь контекст при обработке каждого элемента.
-
-
Add & Norm:
- Остаточная связь (residual connection) + layer normalization.
-
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
- Два линейных слоя с ReLU или GELU:
- Ещё раз Add & Norm.
В энкодере все attention-слои — это self-attention, одинаково обрабатывающие вход.
Декодер
Каждый из NN декодер-блоков включает 3 слоя:
-
Masked Multi-Head Self-Attention:
- Маскируется будущий контекст (чтобы токен не «знал», что будет дальше).
-
Multi-Head Attention над выходом энкодера:
- Каждый токен в декодере обращается к информации, полученной энкодером.
-
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
Проблемы и улучшения
-
Время и память: O(n²) по длине последовательности.
- Решение: Longformer, Linformer, Performer (спарс/линейное внимание).
-
Отсутствие Recurrence: неявно обрабатываются последовательности.
- Иногда это может быть проблемой при сигнале с жёсткой временной структурой.
-
Неинформативное позиционное кодирование.
- Улучшается обучаемыми embeddings, rotary embeddings (RoPE) и др.
Архитектура Transformer произвела революцию в обработке последовательностей, вытеснив рекуррентные подходы во многих задачах. Сегодня трансформеры лежат в основе большинства современных моделей: GPT, BERT, T5, ViT, Whisper, CLIP и других.