В чём разница между self-attention и cross-attention?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Self-Attention vs Cross-Attention в трансформерах
Основное различие
Self-attention — это механизм, где каждый токен внутри одной последовательности обращает внимание на все остальные токены этой же последовательности. Cross-attention — это взаимодействие между двумя разными последовательностями, где один набор токенов обращает внимание на другой набор.
Self-Attention
В self-attention все три компоненты (Query, Key, Value) происходят из одного источника — входной последовательности:
# Допустим, у нас есть входная последовательность X размера (batch, seq_len, dim)
Q = X @ W_q # Queries
K = X @ W_k # Keys
V = X @ W_v # Values
# Вычисляем attention weights
attention_weights = softmax(Q @ K.T / sqrt(dim))
# Применяем к Values
output = attention_weights @ V
Примеры использования:
- Кодировщик (encoder) в трансформере анализирует отношения внутри одного текста
- BERT использует self-attention для понимания контекста каждого слова относительно соседних
- Декодировщик на этапе обучения (masked self-attention для предотвращения утечки информации из будущих токенов)
Cross-Attention
В cross-attention Query происходит из одной последовательности, а Key и Value — из другой:
# Query из последовательности декодера
Q = decoder_output @ W_q
# Key и Value из последовательности кодера
K = encoder_output @ W_k
V = encoder_output @ W_v
# Вычисляем attention weights между ними
attention_weights = softmax(Q @ K.T / sqrt(dim))
# Результат показывает, на какие части кодера обращает внимание декодер
output = attention_weights @ V
Примеры использования:
- Machine translation: декодер смотрит на исходный текст
- Vision-Language модели: текстовый декодер обращает внимание на признаки изображения
- Retrieval Augmented Generation (RAG): декодер смотрит на релевантные документы
Практические различия
| Аспект | Self-Attention | Cross-Attention |
|---|---|---|
| Источник Q | Сама последовательность | Другая последовательность (обычно декодер) |
| Источник K, V | Сама последовательность | Другая последовательность (обычно кодер) |
| Использование | Понимание отношений внутри одного текста | Связь между двумя разными модальностями/текстами |
| Маскирование | Часто маскируют будущие позиции | Не маскируют обычно |
| Матрица attention | Квадратная (seq_len × seq_len) | Прямоугольная (decoder_seq × encoder_seq) |
Визуализация
Само-внимание: каждое слово смотрит на все слова в своём предложении. Кросс-внимание: слово из перевода смотрит на слова из оригинала.
Вывод
Оба механизма критичны для современных трансформеров. Self-attention позволяет модели понимать отношения внутри одного контекста, а cross-attention enables bridging между разными источниками информации, что делает трансформеры универсальными архитектурами для множества задач.