Multi-Head Attention

Khó

TransformerattentionAI4 test · 12 giây · sai số 1e-5

Thay vì một attention lớn, Transformer chia thành h đầu nhỏ để mỗi đầu học một kiểu quan hệ khác nhau:

1. Q = X Wq, K = X Wk, V = X Wv — mỗi ma trận shape (T, d_model)

2. Tách đầu: d_h = d_model / h; reshape (T, d_model) → (T, h, d_h) rồi đổi trục thành (h, T, d_h) (đầu thứ i dùng các cột i·d_h … (i+1)·d_h − 1)

3. Mỗi đầu: softmax(QₕKₕᵀ / √d_h) Vₕ (không có mặt nạ)

4. Ghép đầu: (h, T, d_h) → (T, h, d_h) → (T, d_model), rồi nhân Wo

Viết hàm

multi_head_attention(X, Wq, Wk, Wv, Wo, num_heads)

Tham số

  • X: (T, d_model)
  • Wq: (d_model, d_model)
  • Wk: (d_model, d_model)
  • Wv: (d_model, d_model)
  • Wo: (d_model, d_model)
  • num_heads: h, chia hết d_model

Trả về

Ma trận (T, d_model).

Ví dụ

Tham số

X = [[1,0],[0,1]]
Wq = [[1,0],[0,1]]
Wk = [[1,0],[0,1]]
Wv = [[1,0],[0,1]]
Wo = [[1,0],[0,1]]
num_heads = 1

Kết quả

[[0.669761549,0.330238451],[0.330238451,0.669761549]]

Tham số

X = [[-0.8865,1.5436,0.3956,0.8794],[-1.2547,2.8683,-2.8741,-1.2881],[0.0658,0.2767,-0.4978,-0.1413]]
Wq = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
Wk = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
Wv = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
Wo = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
num_heads = 2

Kết quả

[[-1.169814907,2.608878577,-0.071924513,0.45286145],[-1.23545533,2.802382833,-2.866849145,-1.284494588],[-0.786857561,1.75525074,-1.807121781,-0.681662358]]

Bài tiếp theo: Mã hóa vị trí hình sin →

Python · NumPy

Bấm “Chạy thử” để gọi multi_head_attention() với 2 ví dụ trong đề và so sánh kết quả. Dùng print() thoải mái để gỡ lỗi.