Transformer (2017) là kiến trúc của GPT, BERT, LLaMA… Một khối Transformer (kiểu GPT, pre-norm) gồm hai bước, mỗi bước có đường tắt residual:
x = x + multi_head_attention(layer_norm(x)) # trộn thông tin giữa các token
x = x + feed_forward(layer_norm(x)) # xử lý từng token (MLP 2 lớp, GELU)Xếp chồng vài chục khối như vậy, cuối cùng nhân với ma trận từ vựng để ra logits cho token tiếp theo.
Multi-head attention: chia d_model thành h "đầu", mỗi đầu chạy attention riêng trên d_model/h chiều — đầu này học quan hệ ngữ pháp, đầu kia học quan hệ ngữ nghĩa… rồi ghép lại và nhân Wo. Kỹ thuật chính là reshape + transpose: (T, d_model) → (T, h, d_h) → (h, T, d_h).
def split_heads(M, h): # (T, d_model) → (h, T, d_h)
T, dm = M.shape
return M.reshape(T, h, dm // h).transpose(1, 0, 2)
Q, K, V = (split_heads(X @ W, h) for W in (Wq, Wk, Wv))
heads = softmax(Q @ K.transpose(0, 2, 1) / np.sqrt(dm // h)) @ V # (h, T, d_h)
out = heads.transpose(1, 0, 2).reshape(T, dm) @ Wo # ghép đầuHai thành phần còn lại:
- Residual (x + …): giữ đường đi thẳng cho gradient — giúp huấn luyện mạng rất sâu
- LayerNorm: chuẩn hóa mỗi token theo chiều đặc trưng (khác BatchNorm chuẩn hóa theo lô)
- Mã hóa vị trí: attention không biết thứ tự, nên cộng thêm vector vị trí (hình sin, hoặc học được) vào embedding
?d_model = 512, 8 đầu. Mỗi đầu làm việc với vector bao nhiêu chiều?
Luyện tập ngay
Viết code và chấm tự động — có trợ lý AI gợi ý khi bí.