Что такое self-attention
Что проверяют
Понимаете ли вы, что именно считает слой, а не только то, что он «учитывает контекст». В разговоре про модели почти всегда просят довести до формулы и оценить сложность: от этого зависят все практические решения, от длины контекста до выбора оптимизаций внимания.
Как отвечать
Каждый элемент последовательности проецируется тремя матрицами в запрос, ключ и значение. Вес связи это скалярное произведение запроса одного элемента с ключами всех элементов, пропущенное через softmax. Выход это взвешенная сумма значений.
Attention(Q, K, V) = softmax(Q @ K^T / sqrt(d_k)) @ VДеление на корень из размерности ключа нужно, чтобы дисперсия скалярных произведений не росла вместе с d_k: иначе softmax уходит в насыщение и градиенты почти обнуляются.
Дальше три вещи, без которых ответ неполный. Multi-head: те же вычисления идут параллельно в нескольких подпространствах, результаты конкатенируются, разные головы ловят разные типы связей. Позиции: операция симметрична относительно перестановки входа, поэтому порядок задаётся отдельно, абсолютными или относительными кодировками. Маски: причинная маска запрещает декодеру смотреть вперёд, маска дополнения убирает добивку батча.
Сложность: время порядка n в квадрате на d и память порядка n в квадрате на наивной реализации против n на d в квадрате у рекуррентного слоя. Главный выигрыш не в числе операций, а в том, что последовательных шагов константа вместо n, и путь между любыми двумя позициями равен одному шагу.
Где спотыкаются
Пропускают деление на корень из размерности или называют его нормировкой, не объясняя, что именно ломается без него. Ответ сразу выглядит пересказанным, а не понятым.
Утверждают, что механизм сам по себе учитывает порядок слов. Без позиционной информации это операция над множеством: перемешайте вход, и выход перемешается ровно так же.
Делают из квадратичности вывод, что внимание всегда медленнее рекуррентных слоёв. На коротких последовательностях доминирует размерность, а не длина, и матрица весов не обязана материализоваться в памяти целиком. Корректная формулировка: квадратично по длине, зато полностью параллельно по ней.