Tổng kết: Cỗ máy LLM
Ghép sáu mảnh thành một bức tranh: pipeline sinh văn bản end-to-end và self-assessment theo learning outcomes.
TL;DR: Module 3 bóc tách đúng một cỗ máy: LLM sinh văn bản bằng cách lặp lại vòng tokenize → context → dự đoán phân phối → sample → decode, không có bước nào "hiểu" hay "kiểm tra sự thật" chen vào giữa. Sáu khái niệm — token, context window, temperature/top-p, SFT/RLHF, hallucination — đều là hệ quả trực tiếp của đúng một cơ chế đó. Đây là 1 trang để bookmark.
Đã đi qua những gì
Bạn bắt đầu từ bài 01 với một vòng lặp trần trụi: model nhìn toàn bộ token đã có, tính ra một phân phối xác suất cho token kế tiếp, chọn một token, nối vào, lặp lại — không có "chế độ" nào chuyển đổi giữa viết thơ hay giải thích lỗi. Bài 02 gọi tên chính xác đơn vị đó — token, cắt ra bởi tokenizer theo thuật toán BPE — và cho thấy tiếng Việt bị "phạt" token nặng hơn tiếng Anh, kéo theo hoá đơn API và tốc độ sinh. Bài 03 đo "bộ nhớ làm việc" hữu hạn của model bằng đúng đơn vị token đó: đầy thì cắt phần cũ nhất, và ngay cả phần chưa bị cắt cũng không được model "chú ý" đều (lost-in-the-middle). Bài 04 mổ đúng bước "chọn" trong vòng lặp ban đầu: temperature chỉnh độ nhọn của phân phối, top-p cắt tập ứng viên — hai núm độc lập, dễ bị hiểu ngược chiều. Bài 05 lùi lại một bước, cho thấy model bạn gọi qua API chat đã qua thêm hai pha huấn luyện — SFT dạy dạng hỏi-đáp, RLHF chỉnh theo lựa chọn con người — nhưng cả hai chỉ đổi hành vi, không nạp thêm sự kiện đáng tin. Bài 06 ghép mọi mảnh lại: vì không có bước kiểm tra sự thật và không có token nào nghĩa là "im lặng", model buộc phải chọn ra một token kể cả khi phân phối không được neo vững — đó là hallucination, hệ quả tất yếu chứ không phải bug ngẫu nhiên. Bài 07 đưa bạn vào vai kỹ sư trực on-call, đọc ba log thật và tách đúng dấu vết định lượng của từng cơ chế thay vì dừng ở triệu chứng "bot trả lời sai".

🗺️ Cheat sheet
| Concept | Khi nào cần nhớ | Pitfall |
|---|---|---|
| Vòng lặp autoregressive | Giải thích vì sao cùng model viết được cả thơ lẫn debug code | Tưởng có "bộ định tuyến" chuyển chế độ bên trong model |
| Token / Tokenizer (BPE) | Ước lượng chi phí API, giải thích lỗi đếm ký tự | Dùng quy tắc "1 token ≈ 4 ký tự" hoặc tiktoken cho model không phải OpenAI |
| Context window | Debug bot "quên" constraint đầu hội thoại, ước lượng ngân sách token | Nghĩ model "yếu trí nhớ" thay vì hiểu đây là giới hạn kiến trúc |
| Lost-in-the-middle | Đặt vị trí thông tin quan trọng trong prompt dài | Tin "còn trong context là chắc chắn được dùng đều" |
| Temperature | Cần output nhất quán (thấp) hay đa dạng (cao) | Coi là "nút chỉnh độ thông minh" của model |
| top-p (nucleus sampling) | Cắt đuôi dài xác suất thấp mà không đổi hình dạng phân phối | Hiểu ngược chiều — nghĩ p cao là "an toàn hơn" |
| SFT | Phân biệt vì sao base model không "trả lời" mà chỉ viết tiếp | Coi base model rẻ là lựa chọn an toàn cho chatbot hỏi-đáp |
| RLHF | Hiểu vì sao chat model biết dừng, biết từ chối | Nghĩ RLHF làm model "biết nhiều sự kiện hơn" |
| Hallucination | Đoán trước 4 tình huống dễ bịa: ngoài train, chi tiết cụ thể, thiếu context, temperature cao | Tin giọng tự tin là tín hiệu đáng tin, hoặc hỏi lại model "bạn có chắc không?" |
📖 Glossary module
| Thuật ngữ | Định nghĩa 1 câu |
|---|---|
| Token | Đơn vị nhỏ nhất model xử lý — mảnh sub-word do tokenizer cắt ra, mỗi mảnh là một ID trong vocabulary |
| Tokenizer | Chương trình tách văn bản thành token trước khi model thấy bất cứ gì |
| Vocabulary | Danh mục token cố định (vài chục tới vài trăm nghìn mục) mà tokenizer dùng để tách |
| BPE (Byte Pair Encoding) | Thuật toán tách token: đóng combo cặp ký tự xuất hiện nhiều nhất trong kho huấn luyện |
| Autoregressive | Cơ chế sinh văn bản: token vừa sinh ra trở thành một phần input của bước kế tiếp |
| Logits | Điểm số thô model tính cho từng token trong vocabulary, trước khi qua softmax |
| Softmax | Hàm biến logits thành phân phối xác suất, tổng luôn bằng 1 |
| Context window | Số token tối đa model "nhìn thấy" trong một request — system prompt + lịch sử + input + output |
| Lost-in-the-middle | Hiện tượng model dễ bỏ sót thông tin nằm giữa một context dài, dù thông tin đó chưa bị cắt |
| Temperature | Tham số chia vào logits trước softmax — chỉnh độ nhọn/phẳng của phân phối xác suất |
| top-p (nucleus sampling) | Giữ tập token nhỏ nhất có tổng xác suất đạt ngưỡng p, loại hẳn đuôi dài xác suất thấp |
| Text degeneration | Hiện tượng output rời rạc, lặp cụm vô nghĩa khi sample trúng token lạc quẻ trong đuôi dài |
| Base model | Model chỉ qua pretrain — dự đoán token kế tiếp trên corpus thô, không có khái niệm "trả lời câu hỏi" |
| SFT (Supervised Fine-Tuning) | Tinh chỉnh base model bằng cặp (instruction, response mẫu) do con người viết |
| RLHF (Reinforcement Learning from Human Feedback) | Chỉnh model đã qua SFT bằng lựa chọn con người: reward model chấm điểm, model tối ưu theo đó |
| Reward model | Model phụ học dự đoán điểm số khớp với thứ tự xếp hạng con người, dùng để huấn luyện RLHF |
| Chat model | Model đã qua SFT (+ RLHF) — biết dừng, biết từ chối, theo đúng định dạng hỏi-đáp |
| Hallucination | Output trôi chảy nhưng sai sự thật — hệ quả tất yếu khi phân phối xác suất không được neo vững |
⚠️ Pitfall tổng hợp
1. Nhờ model đếm ký tự, đảo chữ, tách vần:
Model không thấy ký tự, chỉ thấy ID token — tác vụ mức ký tự là điểm mù kiến trúc. Cần đếm thì để code đếm.
2. Ước lượng chi phí API bằng "1 token ≈ 4 ký tự":
Quy tắc đó là rough rule cho tiếng Anh. Với tiếng Việt, đo thực tế (2026-07-23) ra 1.53×–2.39× số token so với tiếng Anh cùng nội dung — sai số đủ vỡ ngân sách. Cách đúng: đo bằng đúng tokenizer của model định dùng.
3. Dùng tiktoken đếm token cho mọi model:
tiktoken là tokenizer của OpenAI. Đếm cho Claude bằng nó là đếm bằng thước hãng khác — lệch hệ thống. Nguyên tắc: model nào, thước đó.
4. Nghĩ model "yếu trí nhớ" khi hội thoại dài, đổi model "thông minh hơn" để sửa:
Đây là giới hạn kiến trúc — context đầy thì hệ thống buộc cắt token cũ nhất. Đúng chỗ cần sửa là ứng dụng: tóm tắt lịch sử cũ, hoặc nhắc lại constraint quan trọng gần cuối prompt.
5. Tin "còn chỗ trống trong context là an toàn tuyệt đối":
Còn chỗ chỉ đảm bảo không bị cắt, không đảm bảo model dùng đều — thông tin chôn giữa context dài dễ bị bỏ sót (lost-in-the-middle) dù chưa từng rời khỏi context.
6. Coi temperature là "độ thông minh" của model:
Temperature không đổi model biết gì — nó chỉ đổi cách chọn giữa các khả năng đã tính sẵn. Cứng nhắc ở T thấp không phải vì kém đi; sáng tạo ở T cao không phải vì giỏi hơn.
7. Hiểu ngược chiều top-p — nghĩ p cao là "an toàn", p thấp là "rủi ro":
Ngược lại. p = 1.0 là không lọc gì, giữ nguyên đuôi dài xác suất thấp. p càng thấp mới càng siết chặt, càng gần-greedy.
8. Nghĩ RLHF làm model "biết nhiều sự kiện hơn" hoặc "đúng hơn":
RLHF chỉnh cách trình bày và mức hữu ích của câu trả lời — không phải nguồn kiến thức. Sự kiện model biết đến từ dữ liệu pretrain; base model và chat model có thể sai cùng một sự kiện y hệt.
9. Tin giọng tự tin là tín hiệu đáng tin, đặc biệt với citation đúng định dạng:
Form câu không mang thông tin về độ chắc chắn. Model học rất tốt khuôn mẫu trích dẫn học thuật, nhưng khuôn mẫu không đảm bảo bài báo tồn tại.
10. Hỏi lại model "bạn có chắc không?" để kiểm tra một câu trả lời nghi ngờ:
Câu hỏi đó vẫn đi qua đúng cơ chế sinh token ban đầu, không phải phép tự-kiểm-tra độc lập. Cách đáng tin là đối chiếu nguồn ngoài.
✅ Self-assessment
Bạn đã đạt module này nếu trả lời được:
- Trace vòng lặp sinh văn bản của LLM: tokenize → context → dự đoán phân phối → sample → decode.
- Explain vì sao model xử lý token thay vì ký tự, và hệ quả với tiếng Việt, code và chi phí API.
- Nếu chưa: đọc lại bài 02 mục 2–4.
- Predict hành vi model khi context window tràn và khi temperature/top-p thay đổi.
- Distinguish base model vs chat model qua vai trò của SFT và RLHF.
- Nếu chưa: đọc lại bài 05 mục 2–4.
- Diagnose hallucination từ cơ chế next-token thay vì coi nó là bug ngẫu nhiên.
- Nếu chưa: đọc lại bài 06 mục 2–4.
🚀 What's next
Module 3 dừng lại ở việc coi model như một hộp đen tính phân phối xác suất — bạn biết nó làm gì, chưa biết vì sao nó tính được như vậy. Module 4 — Transformer & attention mở hộp đen đó ra một bậc: vì sao kiến trúc tuần tự cũ (RNN) bị bỏ lại phía sau, attention "nhìn" vào token nào khi dự đoán token kế tiếp, bức tranh lớn của kiến trúc transformer, và scaling laws ở mức định tính — một module, không cần nền toán sâu.
Xem tiếp: AI Core cho lập trình viên
📚 Tài liệu mở rộng
- Paper — vòng lặp next-token: Brown et al. — Language Models are Few-Shot Learners (arXiv:2005.14165)
- Paper — tokenization (BPE): Sennrich, Haddow & Birch — Neural Machine Translation of Rare Words with Subword Units (arXiv:1508.07909)
- Paper — bất công token giữa ngôn ngữ: Petrov et al. — Language Model Tokenizers Introduce Unfairness Between Languages (arXiv:2305.15425)
- Paper — lost-in-the-middle: Liu et al. — Lost in the Middle: How Language Models Use Long Contexts (arXiv:2307.03172)
- Paper — nucleus sampling: Holtzman, Buys, Du, Forbes & Choi — The Curious Case of Neural Text Degeneration (arXiv:1904.09751)
- Paper — SFT + RLHF (InstructGPT): Ouyang et al. — Training language models to follow instructions with human feedback (arXiv:2203.02155)
- Paper — khảo sát hallucination: Ji et al. — Survey of Hallucination in Natural Language Generation (arXiv:2202.03629)
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên