Код Middle Attention и трансформеры спрашивают часто обновлено

Scaled dot-product attention

Условие

Напишите attention(Q, K, V, causal): Q, K, V матрицы (списки строк) размера n×d. Посчитайте softmax(QKᵀ / √d)·V; при causal=True позиция i видит только ключи j ≤ i. Softmax устойчивый. Верните матрицу n×d_v, значения округлены до 4 знаков.

Примеры

attention([[1, 0]], [[1, 0]], [[5, 7]], false) // [[5, 7]]
attention([[0, 0], [0, 0]], [[1, 0], [0, 1]], [[1, 0], [0, 1]], false) // [[0.5, 0.5], [0.5, 0.5]]
attention([[0, 0], [0, 0]], [[1, 0], [0, 1]], [[1, 0], [0, 1]], true) // [[1, 0], [0.5, 0.5]]

Как подойти

Подсказки: 2
  1. Сначала посчитайте вектор оценок для строки i, потом устойчивый softmax.
  2. При causal пропускайте j > i, а не ставьте им ноль после softmax.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме