Комментарии (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 между разными источниками информации, что делает трансформеры универсальными архитектурами для множества задач.
Похожие вопросы
- Как развернуть ML модель в production?
- Как борются с квадратичной сложностью внимания?
- Какие плюсы и минусы трансформеров?
- В чём разница в реализации алгоритма между XGBoost и LightGBM?
- Что происходит в MAE при дифференциале?
- Какие знаешь вариации anchor-free детекторов?
- Есть ли детекция без anchor-box?
- Что такое MRR (Mean Reciprocal Rank)?
- Что такое мета-признаки?
- Как использовать модель бустинга в случае дисбаланса?
- Что такое ансамбль методов?
- Как выбирается порог в дереве?
- Какие знаешь метрики для задач классификации?
- GD, SGD и Mini-Batch SGD: различия, плюсы и минусы каждого
- Как модель выпускалась в production в рабочем ML-проекте?
- Что такое критерий Джини?
- В чем разница между K-Means и KNN моделями?
- Какие знаешь критерии остановки в градиентном спуске?
- Что такое N-gram?
- Что такое дисбаланс классов и как с ним бороться?