Реализуйте механизм Scaled Dot-Product Attention — ключевой компонент архитектуры Transformer.
Attention(Q, K, V) = softmax(Q·Kᵀ / √d_k) · V
где:
- Q (Query) — матрица запросов, shape (n, d_k)
- K (Key) — матрица ключей, shape (n, d_k)
- V (Value) — матрица значений, shape (n, d_v)
- d_k — размерность ключей (используется для масштабирования)
Softmax применяется построчно (axis=-1). Для численной стабильности используйте:
softmax(x) = exp(x - max(x)) / sum(exp(x - max(x)))
Строка 1: n d_k d_v — размеры матриц
Строка 2: Q в flatten-формате (n × d_k чисел через пробел)
Строка 3: K в flatten-формате (n × d_k чисел)
Строка 4: V в flatten-формате (n × d_v чисел)
Результат в flatten-формате (n × d_v чисел), каждое округлено до 3 знаков после запятой.
Ввод:
1 1 1
2.0
3.0
5.0
Вывод: 5.000
Единственный токен → softmax([[score]]) = [[1.0]] → результат = V.
Q = [[2]]K = [[3]]V = [[5]][[5]]Q = [[0],[0]]K = [[0],[0]]V = [[1],[3]][[2],[2]]Q = [[1,0,1],[0,1,0]]K = [[0,1,1],[0,0,1]]V = [[1,0],[0,1]][[0.5,0.5],[0.64,0.36]]