
Реализуйте single-head self-attention для входной матрицы токенов X.
Даны матрицы весов W_q, W_k, W_v. Нужно посчитать:
Q = X @ W_q
K = X @ W_k
V = X @ W_v
Attention = softmax(Q @ K.T / sqrt(d_k)) @ V
Softmax применяется построчно. Для численной стабильности вычитайте максимум строки перед exp.
def single_head_self_attention(
X: list[list[float]],
W_q: list[list[float]],
W_k: list[list[float]],
W_v: list[list[float]],
) -> list[list[float]]:
Верните результат, округленный до 6 знаков после запятой.
X = [[1,0],[0,1]]W_q = [[1,0],[0,1]]W_k = [[1,0],[0,1]]W_v = [[1,0],[0,1]][[0.669762,0.330238],[0.330238,0.669762]]Identity projections with two tokens
X = [[1,2]]W_q = [[1],[1]]W_k = [[2],[0]]W_v = [[3,1],[1,3]][[5,7]]Single token attends only to itself
X = [[1,0],[0,1]]W_q = [[1],[0]]W_k = [[1],[0]]W_v = [[2],[4]][[2.537883],[3]]One-dimensional Q/K and scalar V