Sobes.tech
Back to questions
Middle — Senior
39

В чём разница self-attention и cross-attention, для чего используется каждый?

Answer from AI

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-моделях.