Self-attention có mặt nạ nhân quả (GPT)
KhóTransformerattentionAI4 test · 12 giây · sai số 1e-5
Trong mô hình sinh văn bản như GPT, token ở vị trí t chỉ được nhìn các token ≤ t (không được nhìn tương lai). Cài đặt:
1. Q = X Wq, K = X Wk, V = X Wv
2. S = Q Kᵀ / √d (d = số cột của Wk)
3. Mặt nạ nhân quả: S[i, j] = −∞ với mọi j > i
4. out = softmax(S) V (softmax theo trục cuối)
- Gợi ý:
np.triu(np.ones((T, T), bool), k=1)cho vị trí cần che; dùng-1e9hoặc-np.inf(vì mỗi hàng luôn còn ít nhất 1 vị trí không bị che).
Viết hàm
causal_self_attention(X, Wq, Wk, Wv)Tham số
X: chuỗi token đã nhúng (T, d_model)Wq: (d_model, d)Wk: (d_model, d)Wv: (d_model, dᵥ)
Trả về
Ma trận (T, dᵥ).
Ví dụ
Tham số
X = [[1,0,0],[0,1,0],[0,0,1]] Wq = [[1,0,0],[0,1,0],[0,0,1]] Wk = [[1,0,0],[0,1,0],[0,0,1]] Wv = [[1],[2],[3]]
Kết quả
[[1.0],[1.640457476],[2.206624616]]
Token đầu chỉ nhìn chính nó → out[0] = 1
Tham số
X = [[1,0],[0,1]] Wq = [[1,0],[0,1]] Wk = [[1,0],[0,1]] Wv = [[1,0],[0,1]]
Kết quả
[[1.0,0.0],[0.330238451,0.669761549]]
Bài tiếp theo: Multi-Head Attention →
Python · NumPy
Bấm “Chạy thử” để gọi causal_self_attention() với 2 ví dụ trong đề và so sánh kết quả. Dùng print() thoải mái để gỡ lỗi.