Kiến trúc Large Language Model — Decoder-only Transformer (GPT)

Mô phỏng tương tác: các node nối với nhau ra sao, lắp ráp thành mô hình thế nào. Bấm vào từng khối để xem chi tiết, kéo thanh trượt để đổi cấu hình, và chạy mô phỏng attention + sinh token thật.

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.

768
12
12
1024
50k
124M
tổng số tham số (≈, embedding chia sẻ với LM head)

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.

3
12

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

0.8

τ 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.

giá trị dương giá trị âm xác suất / trọng số chưa tính / mask ✕ hàng đang nhân cột đang nhân

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.