В чём разница self-attention и cross-attention, для чего используется каждый?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Self-attention использует одни и те же входные данные для построения запросов, ключей и значений, поэтому каждый токен “смотрит” на другие токены внутри той же последовательности. Cross-attention связывает две разные последовательности: запросы приходят из одной последовательности, а ключи и значения — из другой. Self-attention обычно нужен для моделирования контекста внутри текста, а cross-attention — для передачи информации между источником и целевой последовательностью, например в encoder-decoder архитектурах.
Определение:
Self-attention — это механизм внимания, в котором каждый элемент входной последовательности вычисляет, на какие другие элементы этой же последовательности ему важно обратить внимание.
Cross-attention — это механизм внимания, в котором одна последовательность выступает источником запросов, а другая — источником ключей и значений. То есть модель “смотрит” не внутрь себя, а на внешнее представление.
Обе схемы основаны на одинаковой идее: сравнить запрос с ключами, получить веса внимания и по ним собрать взвешенную сумму значений. Разница только в том, откуда берутся Q, K и V.
Пример использования:
Self-attention: в предложении “Банк выдал кредит, потому что он надёжный” модель должна понять, что “он” относится к “банк”. Для этого токен “он” учитывает другие токены той же фразы.
Cross-attention: в задаче перевода модель генерирует английское слово и при этом обращается к выходам энкодера, которые представляют исходное русское предложение.
# Упрощённая схема без привязки к конкретной библиотеке
# self-attention
Q = X
K = X
V = X
context = Attention(Q, K, V)
# cross-attention
Q = decoder_hidden_states
K = encoder_outputs
V = encoder_outputs
context = Attention(Q, K, V)
Пояснение кода:
В первом блоке один и тот же тензор X используется для формирования Q, K и V, поэтому это self-attention. Модель сравнивает токены внутри одной последовательности и строит контекстное представление для каждого из них.
Во втором блоке Q берётся из декодера, а K и V — из энкодера. Это cross-attention: декодер “запрашивает” нужную информацию у выходов энкодера, чтобы сгенерировать следующий токен с учётом входной последовательности.
Ключевые моменты:
- Self-attention работает внутри одной последовательности.
- Cross-attention связывает две разные последовательности.
- В self-attention обычно
Q,K,Vполучаются из одного и того же входа. - В cross-attention
Qприходит из одной стороны, аKиV— из другой. - Self-attention нужен для понимания внутрипоследовательного контекста.
- Cross-attention нужен для переноса информации между источником и генератором, например в переводе, суммаризации и seq2seq-моделях.