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 -1e9 hoặ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.