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.