Một LLM kiểu GPT là một chồng N khối decoder giống hệt nhau. Dữ liệu chảy theo một chiều từ dưới lên: văn bản → token → vector → qua N khối → chiếu ra từ vựng → xác suất token kế tiếp. Trục dọc ở giữa được gọi là residual stream (luồng tồn dư) — "xương sống" mà mọi khối đọc vào và ghi thêm thông tin.
Luồng dữ liệu (bấm vào node để xem chi tiết)
B = batch · T = số token · d = d_model · V = kích thước từ vựng
Token Embedding
[B, T, d]
Di chuột hoặc bấm vào một node trong sơ đồ để xem mô tả, công thức và kích thước tensor tại điểm đó.
🎛️ Cấu hình & đếm tham số
Đổi siêu tham số để thấy mô hình "phình to" thế nào.
Mỗi khối decoder có hai khối con, mỗi khối con theo mẫu x → LayerNorm → Sub-layer → cộng lại vào x. Đường màu xanh lá là residual (skip) connection: đầu vào được cộng thẳng vào đầu ra, giúp gradient chảy qua hàng chục lớp mà không bị triệt tiêu. Đây là kiểu pre-norm như GPT-2.
Một khối Decoder = Masked Self-Attention + Feed-Forward
🔎 Phóng to: Masked Multi-Head Attention
Mỗi token tạo Query/Key/Value, "chú ý" tới các token trước nó (mask nhân quả), làm song song trên h đầu rồi ghép lại.
🔎 Phóng to: Feed-Forward Network (MLP)
Áp dụng độc lập cho từng vị trí token: nở rộng lên 4× rồi co lại, với hàm phi tuyến GELU ở giữa.
Đây là mô phỏng tính toán thật (chạy ngay trên trình duyệt) cho self-attention nhân quả. Với chuỗi mẫu, mỗi đầu (head) có ma trận chiếu khởi tạo ngẫu nhiên; ta tính QKᵀ/√d_k, áp mặt nạ nhân quả, rồi softmax theo hàng. Ô càng sáng = token hàng "chú ý" càng nhiều tới token cột.
Chuỗi đầu vào
Đầu đang xem — ba bước biến đổi
d_k = d_model / h = 4 chiều mỗi đầu
Tất cả các đầu (trọng số chú ý sau softmax)
Mỗi đầu học một kiểu "chú ý" khác nhau. Bấm để xem chi tiết đầu đó ở trên.
Tam giác trên (ô tối, có dấu ✕) bị mặt nạ nhân quả chặn: token chỉ được nhìn về quá khứ và chính nó, không nhìn tương lai — đó là lý do GPT sinh được văn bản tuần tự từ trái sang phải.
LLM sinh văn bản tự hồi quy: dự đoán phân phối xác suất cho token kế tiếp, lấy mẫu một token, nối vào chuỗi, rồi lặp lại — token vừa sinh trở thành đầu vào cho bước sau. Dưới đây là mô phỏng vòng lặp đó với một mô hình bigram nhỏ.
Chuỗi đang sinh
τ thấp → chọn token có xác suất cao nhất (chắc chắn, lặp lại). τ cao → đa dạng, ngẫu nhiên hơn. τ chỉ co giãn logits trước softmax.
Phân phối token kế tiếp (softmax của logits)
Điều kiện trên token cuối: <s>
Vòng lặp tự hồi quy
Mỗi bước đi một vòng: token mới được nối vào chuỗi và đưa ngược trở lại làm đầu vào. Dừng khi gặp <eos> hoặc đạt độ dài tối đa.
Xem một lượt forward thật chạy qua mạng, ở mức vector & ma trận: mỗi tensor là một lưới số có màu, mỗi phép tính được "quét" từng ô để bạn thấy dữ liệu biến đổi ra sao. Mô hình tí hon (3 token, d=6, 2 đầu) nhưng mọi con số đều tính thật. Bấm ▶ để chạy hoặc ⏭ đi từng bước.
Mô hình mô phỏng: T=3 token · d_model=6 · 2 đầu (d_k=3) · FFN ẩn=12 · từ vựng đầu ra=8. Cùng một khuôn x → LayerNorm → sub-layer → +residual như tab "Khối Decoder", nhưng giờ thấy rõ từng con số trong vector/ma trận.