Scaled Dot-Product Attention

HardAlgo
10:00
Лучше работает на десктопе
attentiontransformernumpyML

Реализуйте механизм 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

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.

Примеры

Пример 1

Вход:
Q = [[2]]
K = [[3]]
V = [[5]]
Выход:[[5]]

Пример 2

Вход:
Q = [[0],[0]]
K = [[0],[0]]
V = [[1],[3]]
Выход:[[2],[2]]

Пример 3

Вход:
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]]
Консоль
Нажмите Run или Ctrl+Enter для запуска