Đo lường Chain of Thought, RLVR và Test-Time Compute
Cùng 24 bài toán: đúng 0 % với 1,9 token, đúng 100 % với 145. Rồi self-consistency mua lại độ chính xác greedy decoding đã có.
Trên trang này
Hai mươi bốn bài toán đố hai bước. Một model nhỏ — nửa tỷ tham số, chính model trong Chương 11 — được hỏi mỗi bài hai lần.
Lần đầu, yêu cầu trả lời:
"...How many bolts are left? Reply with only the final number, nothing else."
0 / 24 correct 1.9 tokens per answerSau đó yêu cầu trả lời, nhưng được phép làm nháp trước:
"...How many bolts are left? Think step by step, then give the final
number on its own line."
24 / 24 correct 145.2 tokens per answerTừ không đến một trăm phần trăm. Cùng model, cùng weights, cùng bài toán, cùng greedy decoding. Khác biệt duy nhất là phiên bản thứ hai được phép phát ra thêm 143 token trước khi chốt một con số.
Chương này nói về khoảng cách đó: thực chất nó là gì, đi được bao xa, tốn bao nhiêu, và điều gì đã xảy ra khi lĩnh vực này ngừng yêu cầu nó trong prompt và bắt đầu huấn luyện nó vào model.
Model không suy nghĩ. Nó tính toán lâu hơn.
Liên kết đến mục: Model không suy nghĩ. Nó tính toán lâu hơn.Cám dỗ là nói phiên bản thứ hai đã “nghĩ về nó”. Hãy cưỡng lại, vì cơ chế vừa đơn giản hơn vừa hữu ích hơn để biết.
Một transformer thực hiện một lượng tính toán cố định cho mỗi token được tạo. Một forward pass: cùng các lớp, cùng ma trận, cùng số phép toán bất kể câu hỏi là 2+2 bằng mấy hay hãy chứng minh định lý này. Bên trong model không có núm chỉnh nào cho “hãy cố hơn ở câu này”.
Vì vậy, khi một model được yêu cầu trả lời ngay, toàn bộ tính toán mà nó có là một forward pass. Mọi đại lượng trung gian phải vừa trong activations của đúng pass đó, và bất kỳ thứ gì nó không tính được ở đó thì nó không thể tính.
Việc phát ra token thay đổi điều đó, và thay đổi theo hai cách riêng biệt đáng tách ra:
- Nhiều tính toán hơn. Mỗi token được tạo là một forward pass đầy đủ khác. Một trăm bốn mươi lăm token làm nháp là một trăm bốn mươi lăm lần lượng số học so với trả lời ngay.
- Bộ nhớ được ngoại hoá. Các token được ghi vào context, nên pass tiếp theo có thể đọc chúng.
5 × 13 = 65trở thành một sự kiện trong input, không phải một giá trị model phải giữ trong activation và mang tiếp. Model đang dùng chính output của nó làm giấy nháp.
Điểm thứ hai là điều mọi người hay bỏ lỡ, và nó giải thích vì sao phần làm nháp phải được viết ra thì mới có ích. Một model được yêu cầu “nghĩ thầm rồi trả lời” không có chỗ nào để đặt ý nghĩ đó.
Không điều nào trong đây cần đến sự huyền bí, và nó đưa ra một dự đoán chắc chắn: chain of thought sẽ giúp nhiều nhất ở các bài toán có cấu trúc tuần tự — nơi bước hai cần kết quả của bước một — và ít nhất ở các bài toán chỉ là một lần tra cứu. Đó chính xác là điều tài liệu nghiên cứu tìm thấy, và là lý do “think step by step” không làm gì cho thủ đô của Pháp là gì.
Chain of thought, như một kỹ thuật prompting
Liên kết đến mục: Chain of thought, như một kỹ thuật promptingKỹ thuật này xuất hiện năm 2022 theo hai mảnh. Wei và cộng sự cho thấy việc đưa các ví dụ đã giải vào prompt — các minh hoạ trong đó câu trả lời được đặt sau phần suy luận — tạo ra mức tăng lớn trên các benchmark số học và common-sense.1 Sau đó Kojima và cộng sự cho thấy một điều lạ hơn: bạn không cần các ví dụ. Thêm “Let's think step by step” vào một zero-shot prompt nắm bắt được phần lớn cùng mức tăng đó.2
Kết quả thứ hai cho bạn biết chuyện gì đang diễn ra. Nếu một câu thần chú mở khoá hành vi, thì hành vi đó đã có sẵn trong model — pretraining đầy những lời giải có bước làm, và cụm từ ấy là một con trỏ đến vùng đó của phân phối. Chain of thought không dạy model điều gì. Nó chọn một thứ model đã có.
Cách nhìn đó cũng dự đoán sự lỗi thời cuối cùng của kỹ thuật này, điều chúng ta sẽ quay lại ở cuối chương.
Self-consistency, và một kết quả làm tôi ngạc nhiên
Liên kết đến mục: Self-consistency, và một kết quả làm tôi ngạc nhiênBước tiếp theo hiển nhiên: nếu một chuỗi suy luận có thể sai, hãy sample vài chuỗi và lấy đáp án đa số. Đó là self-consistency.3 Đây là một khoản chi lớn hơn hẳn — lần generation đầy đủ thay vì một — và trực giác là các đáp án sai phân tán còn đáp án đúng thì đồng thuận.
Đo trên 16 bài trong cùng bộ, sampling ở temperature 0.8, bỏ phiếu đa số trên chuỗi:
| độ chính xác | token tích luỹ | token mỗi bài | |
|---|---|---|---|
| 1 | 81 % | 2,952 | 185 |
| 2 | 81 % | 5,618 | 351 |
| 3 | 100 % | 8,417 | 526 |
| 4 | 100 % | 11,103 | 694 |
| 5 | 100 % | 13,933 | 871 |
Mười sáu bài toán là mẫu số nhỏ, và quy tắc của Chương 4 áp dụng cho bảng này không kém bất kỳ bảng nào khác. 13 trên 16 là 81 % với khoảng Wilson 95 % là [57, 93]; 16 trên 16 là 100 % với [81, 100]. Chúng chồng lấn. Hãy đọc hình dạng của đường cong, đó mới là phát hiện; đừng đọc chính xác bậc thang nơi nó phẳng lại, vì mười sáu bài không thể định vị được.
Có hai điều trong bảng đó, và điều thứ hai không phải điều tôi kỳ vọng.
Đường cong phẳng lại ở . Đến sample thứ ba, độ chính xác đã chạm trần và hai sample còn lại không mua thêm gì trong khi tốn 172 token mỗi cái, tổng 345. Đó là hình dạng của mọi đường cong self-consistency được báo cáo trong tài liệu, và nó đến sớm hơn nhiều so với khung “càng nhiều sample càng tốt” gợi ý.
Và greedy decoding đã ở mức 100 %. Nhìn lại đầu chương: một chuỗi, không sampling, 145 token, 24/24. Sampling ở temperature 0.8 đã làm giảm độ chính xác xuống 81 %, và self-consistency cần ba lần generation để leo lại tới nơi một greedy pass duy nhất đã có — với gấp 3,6 lần số token, hoặc gấp sáu lần nếu bạn chạy sweep tới năm mà không biết nó phẳng lại ở đâu.
Đó không phải lập luận chống lại self-consistency. Đó là một phát biểu chính xác về việc nó làm: temperature mua sự đa dạng bằng cách bơm lỗi vào, và voting loại bỏ các lỗi mà nó vừa bơm vào. Trên các bài toán mà greedy decoding thất bại — nơi chuỗi có xác suất cao nhất duy nhất dẫn đến chỗ sai và một chuỗi ít khả dĩ hơn lại đúng — đánh đổi đó có lợi, và đó là lý do kỹ thuật này tồn tại. Trên các bài toán mà greedy đã thành công, nó là cách tiêu gấp sáu lần ngân sách để hoà vốn.
Không ai công bố trường hợp thứ hai, vì vậy đáng để đo trên nhiệm vụ của chính bạn trước khi áp dụng kỹ thuật này. Đây là các bài hai bước dễ đối với một model nhỏ; đó là chế độ mà đáp án đi ra theo cách này.
Từ yêu cầu đến huấn luyện
Liên kết đến mục: Từ yêu cầu đến huấn luyệnMọi thứ đến đây đều xảy ra ở prompt time trên một model chưa từng được huấn luyện riêng cho việc đó. Sự dịch chuyển tạo ra thế hệ model reasoning hiện nay là đưa nó vào huấn luyện — và chìa khoá khiến điều đó khả thi hẹp hơn nghe qua.
Post-training của Chương 11 cần sở thích của con người, vì “đây có phải câu trả lời tốt không?” không có câu trả lời bằng chương trình. Nhưng với một số câu hỏi thì có. Một đáp án toán học hoặc bằng giá trị đúng hoặc không. Code hoặc pass tests hoặc không. Một chứng minh hoặc check được hoặc không.
Với những miền đó, bạn có thể thay reward model bằng một verifier, và mọi thứ phía sau lập tức tốt hơn: không annotator, không Bradley–Terry fitting, không reward hacking kiểu đã đo ở Chương 11 — vì bạn không thể nịnh một unit test. Đây là reinforcement learning from verifiable rewards, và đó là bối cảnh GRPO được xây cho: sample một nhóm nỗ lực giải cùng một bài toán, check từng cái, rồi dùng điểm trung bình của nhóm làm baseline. Không critic, không annotator, không reward model. Chỉ một chương trình nói đúng hay sai.
Outcome reward. Chỉ chấm câu trả lời cuối. Rẻ — một phép so sánh chuỗi — và có một lỗ hổng hiển nhiên: một lời giải đi đến đúng con số bằng lập luận sai được thưởng y hệt lời giải đúng, nên policy có thể tự do học những điều vô nghĩa trông có vẻ hợp lý nhưng tình cờ hạ cánh đúng.
Process reward. Chấm từng bước. Lightman và cộng sự5 xây một dataset gồm 800.000 bước suy luận do người gán nhãn để huấn luyện một model làm việc này, và cho thấy nó vượt trội đáng kể so với outcome supervision trên toán khó. Chi phí nằm ngay trong tên gọi: ai đó đã gán nhãn 800.000 bước.
Kết quả tái định hình lĩnh vực đến từ DeepSeek đầu năm 2025.6 Họ lấy một base model và áp dụng reinforcement learning với verifiable rewards trực tiếp, không có supervised fine-tuning stage trước — stage mà Chương 11 trình bày như nền tảng của mọi thứ. Các chuỗi suy luận dài vẫn emerge. Các hành vi không ai huấn luyện cũng vậy: model bắt đầu tự kiểm tra lại các bước của mình và, trong đoạn được trích nhiều nhất của bài báo, tự phát xem xét lại một cách tiếp cận giữa lời giải.
Cách đọc trung thực không phải reasoning là phép màu. Mà là khi thứ duy nhất được thưởng là đúng, và để đúng trên một bài khó cần làm xuyên suốt bài đó, thì làm xuyên suốt là điều optimiser tìm ra — bao gồm cả những phần của việc làm xuyên suốt mà con người cũng làm, vì đó là điều bài toán đòi hỏi chứ không phải điều ai đó đã dạy.
Reasoning token là một dòng trên hoá đơn
Liên kết đến mục: Reasoning token là một dòng trên hoá đơnHệ quả thực tế của tất cả những điều này là một model reasoning tạo ra các token bạn yêu cầu và các token bạn không yêu cầu, và bạn trả tiền cho cả hai.
Các provider xử lý việc này khác nhau, và khác biệt đó quan trọng:
- Hầu hết API tính reasoning token bên trong số output token. Hoá đơn của bạn và giới hạn
max_tokenscủa bạn đều bao gồm phần suy nghĩ mà bạn không bao giờ thấy. - Gemini của Google báo thinking token như một trường riêng, nằm ngoài số output chuẩn.
Đó là một bất tương thích thật sự giữa hai cách đếm cùng một thứ, và bất kỳ code nào tính chi phí hoặc áp ngân sách xuyên provider đều phải chuẩn hoá nó. Chương 16 là nơi điều đó trở thành tiền, và Chương 23 là nơi nó trở thành một ngân sách bạn có thể thực thi.
Hệ quả còn lại là về latency, điều khiến mọi người ngạc nhiên lần đầu gặp. Thời gian tới token nhìn thấy được đầu tiên của một model reasoning bao gồm toàn bộ phần suy nghĩ của nó, nên một request không stream gì trong tám giây rồi trả lời trong một giây không phải kết nối bị treo — đó là model đang làm việc. Bất kỳ giao diện nào hiển thị spinner không giải thích trong tám giây đều có vấn đề thiết kế, không phải vấn đề mạng.
Khi “think step by step” ngừng có ích
Liên kết đến mục: Khi “think step by step” ngừng có íchMột cảnh báo kết thúc, vì đây là cách phổ biến nhất khiến nội dung chương này bị áp dụng sai.
Mọi thứ ở nửa đầu là kỹ thuật để khiến một model không được huấn luyện reasoning vẫn tạo ra reasoning. Các model được huấn luyện bằng RLVR đã tự làm điều đó: chúng phát ra phần làm việc của mình, với độ dài riêng của mình, trước khi trả lời. Bảo một model như vậy think step by step thì tốt nhất là thừa, tệ nhất là có hại — nó có thể tạo ra một chuỗi ngắn theo hình dạng prompt thay cho chuỗi dài hơn mà model lẽ ra đã tự tạo, và một số provider ghi rõ đúng điều này.
Điều tương tự áp dụng cho các scaffold reasoning cầu kỳ được xây trong application code. Một prompt dắt model đi qua một cây quyết định mà nó vốn đã điều hướng bên trong là đang tiêu token của bạn để ràng buộc một hành vi đã được huấn luyện vào. Đây là lần xuất hiện đầu tiên của một chủ đề chạy xuyên suốt phần còn lại của khoá học: các kỹ thuật từng thiết yếu năm 2022 đã trở thành mê tín vào năm 2025, và cách duy nhất để biết cái nào là cái nào với model của bạn, hôm nay, là đo cả hai.
Chương 15 là nơi phép đo đó trở thành một kỷ luật thay vì một ý kiến.
Điều này dẫn đến đâu tiếp theo
Liên kết đến mục: Điều này dẫn đến đâu tiếp theoReasoning có một tính chất khó chịu: nó là năng lực duy nhất có chi phí tăng theo độ khó của câu hỏi. Một model suy nghĩ trong chín trăm token thực hiện chín trăm forward pass, giữ một cache ngày càng lớn trong bộ nhớ cho tất cả chúng, và chiếm GPU trong suốt thời gian đó.
Điều đó khiến kinh tế học của việc phục vụ một model reasoning xấu hơn rõ rệt so với phục vụ một chat model, và biến một tập chi tiết triển khai thành khác biệt giữa một sản phẩm khả thi và một sản phẩm không khả thi: cache của các key và value quá khứ được lưu và tái sử dụng ra sao, bao nhiêu request có thể chia sẻ một forward pass, và weights thực sự cần bao nhiêu precision.
Chương 13 là chương cuối cùng nơi model là một object trong bộ nhớ của bạn thay vì một service sau một port, và chương đó nói về cách làm object đó đủ rẻ để phục vụ. Nó cũng兑现 một lời hứa từ chương này: speculative decoding, tạo ra vài token với giá xấp xỉ một token bằng cách để model nhỏ đoán và model lớn kiểm tra — một mẹo chỉ có ý nghĩa khi bạn đã thấy bao nhiêu phần của một forward pass được dùng để chờ bộ nhớ thay vì làm số học.
Nguồn và phương pháp
Liên kết đến mục: Nguồn và phương phápTất cả phép đo trong chương này đến từ Qwen/Qwen2.5-0.5B-Instruct trên 24 bài toán đố hai bước được tạo ra, greedy decoding trừ khi có nêu sampling, với không generation nào bị cắt ở các token cap đã dùng. Chúng có thể tái lập, và đây là một model nhỏ trên các bài dễ: hãy đọc kết quả self-consistency như một minh hoạ về cơ chế, không phải một benchmark. Chương 18 của ghi chú bài giảng CS229 và chương 12 của Hugging Face LLM Course đều trình bày nội dung này với model lớn hơn và benchmark đúng nghĩa.
Tài liệu tham khảo
Liên kết đến mục: Tài liệu tham khảo-
Wei, J. et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903 (2022). ↩
-
Kojima, T., Gu, S. S., Reid, M., Matsuo, Y. and Iwasawa, Y. Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916 (2022). Kết quả “let's think step by step”. ↩
-
Wang, X. et al. Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171 (2022). ↩
-
Yao, S. et al. Tree of Thoughts: Deliberate Problem Solving with Large Language Models. arXiv:2305.10601 (2023). ↩
-
Lightman, H. et al. Let's Verify Step by Step. arXiv:2305.20050 (2023). Giới thiệu PRM800K, dataset process supervision 800.000 bước. ↩
-
DeepSeek-AI. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. arXiv:2501.12948 (2025). Kết quả R1-Zero — reinforcement learning áp dụng trực tiếp lên base model, không có supervised fine-tuning stage — nằm ở mục 2.2. ↩
-
Snell, C., Lee, J., Xu, K. and Kumar, A. Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters. arXiv:2408.03314 (2024). ↩