Causal attention
Обычный self-attention видит всю последовательность. Для понимания текста это удобно, но при предсказании следующего токена превращается в подсказку: модель может посмотреть на сам ответ. Causal attention (причинное внимание) закрывает будущее до того, как softmax распределит веса.
Модель видит правильный ответ
Во время обучения модели показывают готовую фразу целиком. Позиция «потому» должна предсказать следующий токен — «что». Если оставить attention без ограничений, запрос «потому» сможет направить вес прямо на будущее слово «что». Задача будет решена нечестно: ответ уже лежит во входе.
Оставьте запрос «потому» и сначала рассмотрите строку без маски. Какие позиции маска должна исключить? Включите её, проверьте оставшуюся сумму весов, затем сравните первую и последнюю строки последовательности.
Переключите режим и выберите несколько строк. Causal mask закрывает всё, что находится правее текущего токена; граница всегда проходит по диагонали.
Запрет до softmax
Causal mask (причинная маска) — матрица
После softmax:
Обучение остаётся параллельным
Causal mask ограничивает информацию, а не вычисления. Все строки треугольной матрицы строятся одновременно: каждая позиция видит собственный префикс и предсказывает следующий токен в том же параллельном проходе.
При генерации ситуация другая: будущих токенов ещё нет, и модель добавляет их по одному. Отсюда возникает следующий вопрос — зачем каждый раз пересчитывать уже готовые ключи и значения?