Какие три матрицы используются в multihead attention?
Что проверяют
Понимаете ли вы, откуда берутся Q, K и V и что именно в них обучается. Самый частый уточняющий вопрос: зачем делить скалярное произведение на корень из размерности и чем несколько голов лучше одной большой.
Как отвечать
Обучаемых матриц три на каждую голову: W_Q, W_K, W_V (на практике их хранят одной большой матрицей на слой и режут на головы). Входные эмбеддинги X умножаются на них, и получаются запросы Q = X·W_Q, ключи K = X·W_K и значения V = X·W_V. Смысл ролей:
- Query: что текущий токен ищет в контексте;
- Key: по какому признаку токен можно найти, с ним сравнивается запрос;
- Value: какую информацию токен отдаёт, если на него обратили внимание.
Внимание считается как softmax(Q·Kᵀ / √d_k)·V. Деление на √d_k нужно, потому что с ростом размерности скалярные произведения растут по модулю, softmax уходит в насыщение и градиенты почти обнуляются.
Multi-head значит, что пространство модели делится на h голов: в исходной статье d_model = 512, h = 8, у каждой головы d_k = 64. Головы считаются параллельно, выходы склеиваются и проходят через четвёртую матрицу W_O. Разные головы учатся замечать разные связи: синтаксис, соседние токены, дальние ссылки.
Покажите, что источник Q, K и V зависит от типа внимания. В self-attention все три получаются из одной последовательности, в cross-attention запрос идёт из декодера, а ключи и значения из выхода энкодера. В декодере добавляется каузальная маска, чтобы токен не видел будущее.
Где спотыкаются
Называют Q, K и V входными данными и не упоминают, что обучаются именно проекции W_Q, W_K, W_V.
Не могут объяснить масштабирование на √d_k или путают его с нормализацией слоя.
Забывают про выходную проекцию W_O и про то, что в современных моделях головы часто делят ключи и значения: Multi-Query и Grouped-Query Attention так экономят память KV-кэша при генерации.