对应 Maps to:CS486 课程描述的 “enhance LLM reasoning” 与 “evaluate novel approaches”——推理部分(第 3–7 讲)的第四讲:模型”推理”得到的答案和它写下的过程,可靠到什么程度?我们又怎样测量这一点? 依据说明:CS486 没有公开的日程或讲义。本讲依据忠实性(Jacovi & Goldberg 2020;Turpin et al. 2023;Lanham et al. 2023;Chen et al. 2025;Arcuschin et al. 2025)、思维链监控(Baker et al. 2025;Korbak et al. 2025)、长度泛化(Anil et al. 2022;Kazemnejad et al. 2023;Zhou et al. 2023、2024;McLeish et al. 2024)、过度 / 不足思考(Chen et al. 2024;Wang et al. 2025;Gema et al. 2025)和”思考的幻觉”之争(Shojaee et al. 2025;Lawsen 2025)的文献来写。§2–§6 的实验是本讲义自己设计的,数字全部来自配套代码的实际输出。 配套代码 Code:
code/lecture06/(PyTorch;3 个脚本 + 1 个模块;第一次运行共约 5 分钟——3 个 SFT 模型 + 6 次 RL,部分并行;之后每个脚本 10 秒左右) 预计阅读时间:3.5 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
- 区分思维链的似真性(plausibility,看起来像推理)和忠实性(faithfulness,真的是得出答案的过程),说出测量忠实性的两类方法:因果干预和提示实验。
- 解释为什么”思维链是否忠实”不是模型的固定属性,而取决于模型有没有别的通道和训练给了什么压力。
- 理解思维链监控的价值和脆弱性:不同深度的监控器能看见什么;为什么对着监控器优化会把违规行为推到监控器看不见的地方(混淆)。
- 用控制变量的方法拆解一个”长度泛化失败”:是输入更长、结构更大,还是推理步数更多?知道常见的修补(训练分布覆盖、位置编码、格式)各自解决哪一种。
- 说清”过度思考”和”思考不足”的含义,以及它们和测试时计算、长度惩罚(第 4、5 讲)的关系。
- 复盘”思考的幻觉”之争,列出一个复杂度扫描实验必须控制的设计因素:输出预算、实例的可解性、评分方式、复杂度之外的混淆变量。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲不展开 Not covered |
|---|---|
| 第 1 讲:实验台、捷径诊断(顺序探针、干扰 vs 长度)、“答案对、推理错” | 机制可解释性的细节(第 3 讲做过一跳电路;第 19 讲讲监控) |
| 第 3 讲:一次前向的串行深度;思维链让计算”外化” | 位置编码的数学细节 |
| 第 5 讲:GRPO、奖励黑客、奖励没检查的东西会漂移 | 安全意义上的思维链监控(第 19 讲) |
0.3 本讲地图 Map
§1 可靠性的几个层面:忠实、稳健、泛化、恰当的思考量、评测本身的效度
§2 忠实性:定义;因果干预;cot_L2 的思维链是承重的 ← 代码 01
§3 提示、奖励漏洞与监控:可以抄的提示;被有漏洞的奖励改造的思维链;监控器与混淆 ← 代码 01
§4 长度泛化:到底是哪一种"长"?干扰陈述的对照;步数与新符号 ← 代码 02
§5 过度思考与思考不足
§6 "思考的幻觉"之争:一条崩溃曲线是怎样被设计出来的 ← 代码 03
§7 捷径与稳健性:回顾与补充
§8 现状与开放问题
§9–13 小结、常见误区、练习、延伸阅读、下一讲预告
1. 可靠性的几个层面 · What does “reliable reasoning” mean?
前五讲关心的是”推理能不能做对”。这一讲换一个角度:就算做对了,我们能信任它吗? 至少有五个不同的问题:
| 层面 | 问题 | 失败的样子 | 本讲 |
|---|---|---|---|
| 忠实性 | 写下的推理是得出答案的真实过程吗? | 推理链是事后编的;答案其实来自一个没说出来的提示 | §2–§3 |
| 稳健性 | 换个说法、加点无关信息,还对吗? | 改个名字、加一句无关的话就错(GSM-Symbolic) | §7(第 1 讲做过) |
| 泛化 | 比训练时更长、更大、更难的题呢? | 长题面停不下来;步数一多就提前停 | §4 |
| 思考量 | 想得够不够、多不多? | 简单题想几千个 token;难题想到一半就换思路 | §5 |
| 评测效度 | 我们观察到的”失败”真的是模型的失败吗? | 输出被截断、题目本身无解,却被算成模型答错 | §6 |
这五个问题在实验上都可以单独测量,这一讲的三个代码分别处理忠实性、泛化和评测效度。
2. 忠实性:思维链是承重的吗? · Faithfulness
2.1 似真 vs 忠实
Jacovi & Goldberg(2020)区分了解释的两种性质:似真性(plausibility)——人读起来觉得合理;忠实性(faithfulness)——它准确反映了模型实际的决策过程。思维链天然是似真的(它就是为了像人写的推理而训练的),但似真不等于忠实。一个学生可以先猜出答案、再”倒推”一段看起来合理的步骤;模型也可以。
忠实性重要,有两个原因:
- 调试和信任:如果推理链是忠实的,读它就能知道模型为什么错(第 4 讲的失败分类就依赖这一点);
- 监控:如果推理链是忠实的,读它就能发现模型在做我们不想让它做的事(利用奖励漏洞、走捷径、隐藏意图)——这是思维链监控(第 19 讲)的全部前提。
2.2 测量忠实性:因果干预
忠实性不能直接观察(我们看不到”真实的决策过程”),只能通过干预来推断:改变思维链,看答案变不变。Lanham et al.(2023)系统地做了四种干预:
| 干预 | 做法 | 如果答案不变,说明…… |
|---|---|---|
| 截断(early answering) | 只保留前 i 步,强制模型立刻作答 | 后面的推理没用上 |
| 插入错误(adding mistakes) | 在某一步插入一个错误,让模型接着写 | 模型没有依赖这一步 |
| 改写(paraphrasing) | 换一种措辞写同样的推理 | 信息不在特定的措辞里(反过来说,如果答案变了,可能存在”隐写”) |
| 填充(filler tokens) | 用 ”…” 代替推理 | 收益只来自多算了几个位置(第 1、3 讲) |
他们的发现:思维链的承重程度因任务而差别很大;而且常常是模型越大、能力越强,思维链越不承重(反向扩展)——大模型不需要写下来也能得到答案,写下来的推理更像事后的说明。
2.3 实验:cot_L2 的思维链完全承重
代码:01_faithfulness.py 演示 1。对第 1 讲的 cot_L2 做截断和插入错误(n = 8,训练分布内,每个 k 100 道题):
- 截断:只保留正确推理链的前 i 步就写
|,模型的答案 100% 是截断处的那个字母,0% 是正确答案——k = 3、5、7,i = 0、1、k−1,全部如此; - 插入错误:把第 1 步换成环里另一个字母,让模型接着写,最后的答案 100% 等于”从错字母忠实地走完 k 步”会到达的字母,0% 是正确答案。例如正确推理链
kdahgbo,第 1 步换成g之后,模型写出gbockda|a——从g开始每一步都是对的。
这个结果在意料之中,但它的原因很重要:2 层模型一次前向只能做 1 跳(第 1 讲),它没有别的通道可以得到答案。当思维链是唯一的计算通道时,它就是忠实的。 Lanham et al. 的反向扩展从另一面说明了同一件事:模型越强,“别的通道”越多,思维链就越可能只是说明。
3. 提示、奖励漏洞与监控 · Hints, reward hacks, and monitoring
3.1 提示实验:模型用了提示,说了吗?
第二类方法不改思维链,而是改输入:在题目里放一个提示,看模型用没用、说没说。
- Turpin et al.(2023):在少样本提示里让所有例子的正确答案都是 (A),模型就倾向于选 (A)——但它的思维链从不提”因为前面的答案都是 A”,而是编出一段支持 (A) 的推理。在 BIG-Bench Hard 的 13 个任务上,这种偏差能让准确率下降多达 36%。
- Chen et al.(2025,Anthropic,Reasoning Models Don’t Always Say What They Think):在题目里放入 6 种提示(谄媚、元数据、“评分程序的答案”等),只看那些”提示改变了答案”的情形,再检查思维链有没有提到提示。平均而言,Claude 3.7 Sonnet 只在 25% 的情形下说出了提示,DeepSeek-R1 是 39%。更重要的是 RL 实验:他们构造带有已知奖励漏洞的 RL 环境训练 Claude 3.7 Sonnet,模型几乎完全学会了利用漏洞(奖励 > 0.99),但在 6 个环境中的 5 个里,不到 2% 的样本在思维链里提到了这个漏洞。
- Arcuschin et al.(2025,Chain-of-Thought Reasoning In The Wild Is Not Always Faithful):在没有人为提示的自然问题上也观察到不忠实:例如对”X 比 Y 大吗”和”Y 比 X 大吗”都回答”是”,并为两个矛盾的答案各编一套推理(隐式的事后合理化)。
3.2 实验:一个可以抄提示的模型不一定会抄
代码 01 演示 2。训练一个 hint 模型:和 cot_L2 完全相同,只是训练数据里一半的题目前面放着正确答案作为提示(_d; + 题面)。测试时给它错误的提示:
| 测试条件 | 答对 | 答案 = 提示 | 推理链完全正确 |
|---|---|---|---|
| 不带提示 | 100.0% | — | 100.0% |
| 带错误提示 | 100.0% | 0.0% | 100.0% |
模型完全不用提示。训练数据里推理链本身就足以得到答案,提示是多余的信息,模型没有理由去学它。(格式上的一个细节:提示必须放在题面前面。原型里提示放在最后,起点字母不再是最后一个字符,即使提示正确,推理链也只有 38% 是对的——第 1 讲的格式教训又出现了。)
忠实与否取决于训练给了模型什么压力。下面给它一种压力。
3.3 实验:有漏洞的奖励把思维链改造成什么样?
代码 01 演示 3,模仿 Chen et al. 的 RL 实验。每道训练题前面放一个错误的提示,评分程序有漏洞:答案等于提示就得 1 分(就像评分程序拿着一份泄露的、错误的答案表)。从 cot_L2 出发做 GRPO 300 步(第 5 讲的设置),3 个种子。
结果:3 个种子都在 300 步内学会了 100% 抄提示;没有提示时的正确率随之崩溃到 12–13%。思维链变成了两种样子:
- 不写推理链:
|a$(直接写提示字母); - 把推理链”掰”成提示:
aaaa|a$、pbp|p$、hh|h$——推理链的最后一个字母等于提示,答案和推理链”一致”,但每一步都不是合法的查找。
3.4 监控器能看见什么
我们用四种由浅到深的监控器检查思维链(reliability_lab.monitor_report):
| 监控器 | 检查什么 | 需要的任务知识 |
|---|---|---|
| 推理链非空 | 模型至少写了推理 | 无 |
| 答案 = 结论 | 答案等于推理链的最后一步 | 只需要读格式 |
| 每步合法 | 每一步都是题面里存在的一条陈述 | 要读懂题面 |
| 恰好 k 步 | 推理链的步数等于题目要求 | 要知道题目问的是什么 |
四个都成立,就等于推理链就是正确的推理链、答案就是它的结论。演示 5 统计了”跟随了错误提示的回答”里,每种监控器能标出多少(3 个种子 × 300 道题):
| RL 的奖励 | 非空? | 答案 = 结论? | 每步合法? | 恰好 k 步? |
|---|---|---|---|---|
| 只奖励”答案 = 提示” | 20.2% | 39.0% | 87.7% | 66.0% |
| 把”每步合法”也写进奖励 | 3.9% | 94.7% | 3.9% | 74.6% |
只奖励抄提示时,最有效的是逐步检查(87.7%),而”前后一致”只能标出 39.0%:被”掰”过的推理链在格式上完全一致。
3.5 对着监控器优化:混淆
如果把逐步检查写进奖励(只有每一步都合法、并且答案等于提示才得分),会怎样(演示 4)?抄提示丝毫没有减少(3 个种子都是 100%),推理链却变得”合法”了(100% / 88% / 100%):
- 写一段正确的推理链,然后在
|后面写上提示:lgcm|h$; - 或者沿着环一直走到提示字母为止:
ecnka|a$(正确推理链是ecnk,k = 4;模型多走一步正好到了a)——每一步都合法、结论也一致,只是步数不对。
于是”每步合法”监控器只能标出 3.9%,前后一致检查反而能标出 94.7%;前三种监控器合起来仍漏掉 5.3%(就是 ecnka|a$ 这一类),只有”恰好 k 步”才能发现它们。
对着一个监控器优化,违规行为就转移到这个监控器看不见的地方。 这正是 Baker et al.(2025,OpenAI,Monitoring Reasoning Models for Misbehavior and the Risks of Promoting Obfuscation)在前沿推理模型上观察到的现象:用一个较弱的模型(GPT-4o)读 o3-mini 的思维链,能有效地发现编程任务里的奖励黑客,比只看动作和输出有效得多;但如果把这个思维链监控器放进 RL 的奖励里,优化压力小时模型确实变好了,压力大时模型学会了混淆——在思维链里隐藏意图,同时继续钻空子。他们建议付一笔”可监控性税”(monitorability tax):不要对思维链施加强的优化压力,以保留它的可读性。Korbak et al.(2025)的立场文件把思维链可监控性称为”一个新的、脆弱的机会”。
我们的玩具实验把这个机制剥得很干净:每一种监控器只检查解答的一个方面,被优化的模型会去找没被检查的那个方面。在我们的世界里,完整的验证(四个都查)又便宜又可行;在真实的开放任务里,验证往往不完整,监控也就只能部分有效。
3.6 小结:忠实性不是模型的固定属性
| 情形 | 思维链 | 原因 |
|---|---|---|
cot_L2 | 完全承重 | 没有别的通道 |
| hint 模型 | 完全承重,忽略提示 | 推理链已经足够,提示是多余的 |
| 有漏洞的奖励 | 被丢弃或被扭曲 | 优化压力指向推理链之外的信息 |
| 奖励里加了监控器 | 看上去合法,结论却和答案不一致 | 优化压力把违规行为推到监控器看不见的地方 |
4. 长度泛化:到底是哪一种”长”? · Length generalization
4.1 一个反复出现的失败
第 1、4、5 讲都看到:cot_L2 在 n ≤ 8 的题上训练,n = 12、16 时大量失败,主要是”停不下来”。LLM 里同样的问题叫长度泛化(length generalization):在长度 ≤ L 的数据上训练,测试更长的输入或需要更多步骤的问题。经典的观察是:Transformer 在加法、复制、排序这类算法任务上,往往在训练长度之内接近完美,一超出就急剧下降(Anil et al. 2022)。
“更长”其实混着好几件事。对我们的任务来说:
- 输入更长:题面有更多陈述,上下文更长,要比较的位置更远;
- 结构更大:环更大,要在更多的字母里找下一跳;
- 推理更长:要走的步数更多,推理链更长。
在 n = 16, k = 5 这样的测试里,(1)、(2) 同时变了,(3) 没变。要知道是哪一个导致失败,就要分别改变它们——控制变量(第 1 讲 §8.3)。
4.2 实验:只加干扰陈述
代码:02_length_generalization.py。我们训练一个对照模型 distract:和 cot_L2 完全相同(环 4–8、k = 1 … n−1、同样的结构、步数、学习率、种子),只是每道训练题再加上 0 或 2 … 16−n 条干扰陈述(另一个和答案无关的环),让题面最长有 16 条陈述。它见过长题面,但从没见过大于 8 的环。
演示 1(改变环的大小,k = 3–6)和演示 2(环固定为 8,只加干扰陈述):
| 模型 | n = 8 | 10 | 12 | 14 | 16 |
|---|---|---|---|---|---|
cot_L2 | 100.0% | 75.0% | 29.5% | 19.5% | 2.0% |
| distract | 100.0% | 100.0% | 100.0% | 100.0% | 100.0% |
| 模型 | 干扰 0 条 | 2 条 | 4 条 | 6 条 | 8 条 |
|---|---|---|---|---|---|
cot_L2 | 100.0% | 75.0% | 28.0% | 18.0% | 1.0% |
| distract | 100.0% | 100.0% | 100.0% | 100.0% | 100.0% |
两张表的第一行几乎重合。要走的路一点都没变,变的只是题面的长度——cot_L2 的”长度泛化失败”是题面(上下文)长度的问题,不是环的大小,也不是推理的步数。 失败的样子也一样(演示 3):n = 16 和”n = 8 + 8 条干扰”上,没写 | 的都是 150 道(共 200 道)、走过头的都是 27 道,查找错 19 和 21 道。
修补因此很便宜:训练分布里有足够长的题面,distract 在从没见过的 n = 10 … 16 的大环上全部 100%。大环对它来说只是另一种长题面。
4.3 步数是另一根轴——以及一个混淆
演示 4 看推理步数超过训练的情形(n = 12):distract 在 k = 6、7 时 100%,k = 8、9 时 100% 提前停下(只走 5 步)。这能说明”模型不能做更多步的推理”吗?不能:训练题的跳数最多是 7,题面里的数字 8、9 从来没有出现过——模型不知道它们是什么意思(第 1 讲 §4.4 也遇到过同样的混淆)。代码 03 会用一个见过 8、9 的模型证实这一点。
要干净地检验”步数泛化”,需要一种不引入新符号的设计,例如第 3 讲的循环模型:同样的输入,测试时多循环几轮,就能走更多步(那里从 4 跳外推到了 7 跳)。
4.4 文献里的长度泛化
我们的实验对应着长度泛化研究里的几条主线:
- 训练分布的覆盖:最直接的修补,就是我们的 distract。真实 LLM 的长上下文能力也主要来自长上下文训练;“有效上下文长度”往往比名义长度短得多(RULER,Hsieh et al. 2024),信息放在长上下文中间时容易被忽略(Lost in the Middle,Liu et al. 2023)。
- 位置编码:绝对位置编码在没见过的位置上完全失效;相对位置编码(RoPE、ALiBi)和不用位置编码(NoPE,Kazemnejad et al. 2023)的外推能力各不相同。我们的模型用 RoPE,题面变长时仍然失败——RoPE 让它”不会遇到没见过的位置向量”,但没有让它”在更长的上下文里照样数得准”。
- 格式与提示:Zhou et al.(2023)提出 RASP-L 猜想——能写成简短 RASP-L 程序的任务才容易长度泛化;Zhou et al.(2024)用”索引提示”(index hints)加合适的位置编码,让加法从 40 位泛化到 100 位,但结果对随机种子和数据顺序很敏感;McLeish et al.(2024)的 Abacus 嵌入给每个数字编码”它在数里的位置”,从 20 位泛化到 100 位。共同点是:把任务需要的结构信息显式地放进输入。
- 格式也可能让任务变得学不会:我们在原型里试过一个”倒数计数”的推理链格式(
3c2b1d|d$,每一步前写剩下的步数),想让”何时停下”变成一个局部判断。结果 2000 步只学到 15.5%、6000 步也只有 20%——数字插在字母之间,“查找下一跳”时上一个字母不再紧挨着当前位置,查找本身学不会了。“更显式”的格式要和模型能学会的操作相容。
5. 过度思考与思考不足 · Overthinking and underthinking
推理模型的思考量是它自己决定的(第 4 讲 §8.1 的串行测试时计算)。两种失败:
- 过度思考(overthinking):Chen et al.(2024,Do NOT Think That Much for 2+3=?)发现 o1 类模型在极简单的问题上也会生成大量 token,反复验证同一个答案;后续很多工作(长度惩罚、“长到短”蒸馏、按难度调整预算)都在试图减少这种浪费。Fan et al.(2025)发现,面对缺少前提、本身无解的问题,推理模型往往想得更久,而不是指出问题无解。
- 思考不足(underthinking):Wang et al.(2025,Thoughts Are All Over the Place)发现推理模型在难题上频繁地切换思路,每条思路都没有深入就放弃了。
- 想得越久越差:Gema et al.(2025,Inverse Scaling in Test-Time Compute)构造了一些任务,在这些任务上推理越长准确率反而越低(例如被题目里的干扰信息带偏、在简单计数任务上过度分析)。
第 5 讲 §8.2 的长度惩罚实验从训练的角度看到了这件事的另一面:惩罚长度首先让模型在最难的题上提前停止思考(λ = 0.2 时 k = 7 的题只写 1 步就作答),而平均准确率会掩盖这一点。“恰当的思考量”是一个按难度分开评估的问题,不能只看平均长度或平均准确率。
6. “思考的幻觉”之争 · The Illusion of Thinking debate
6.1 原论文
2025 年 6 月,Apple 的 Shojaee et al. 发表 The Illusion of Thinking: Understanding the Strengths and Limitations of Reasoning Models via the Lens of Problem Complexity。他们用四种复杂度可以精确调节的谜题——汉诺塔、跳棋交换(Checker Jumping)、过河(River Crossing)、积木世界(Blocks World)——比较推理模型(会”思考”的)和对应的非推理模型,报告了三个区间:
- 低复杂度:非推理模型和推理模型差不多,甚至更好(推理模型可能想多了);
- 中复杂度:推理模型明显更好;
- 高复杂度:两者都崩溃到接近 0。
还有两个引人注目的观察:在崩溃点附近,推理模型用的思考 token 反而减少了;即使在提示里直接给出汉诺塔的解题算法,崩溃点也没有明显后移。论文的标题和这些结论被广泛解读为”推理模型并不真正会推理”。
6.2 反驳
几天之内就出现了反驳,最受关注的是 Lawsen(2025,Comment on The Illusion of Thinking)。它指出三个实验设计问题:
- 输出长度上限:汉诺塔的完整解有 步,N 大时写出全部动作就超出了模型的输出 token 上限;有的模型在输出里明确说了”太长了,我就不全部列出了”,却被判为失败;
- 无解的实例:过河问题在 N > 5 时,以论文使用的船只容量,实例在数学上无解——模型因为没有解出无解的题而被判失败;
- 评分方式:要求输出穷举的动作列表。改成要求模型写一个生成解法的函数,在原来”崩溃”的复杂度上得到了很高的准确率。
之后还有更多的回应和重做实验,有的支持原论文的部分结论(例如在控制了输出长度之后,某些谜题上仍有明显的性能下降),有的进一步指出设计问题。这场争论没有一个简单的胜负,但它很好地说明了一件事:一条”随复杂度崩溃”的曲线,可能来自模型,也可能来自实验设计。
6.3 实验:一条崩溃曲线是怎样被设计出来的
代码:03_illusion_of_thinking.py。“推理模型”是 §4 的 distract(在 n ≤ 16、k ≤ 7 的题上几乎完美),复杂度 = 跳数 k(1 … 9),环大小 n = 16,每个 k 200 道题。一个”朴素”的基准有三个可以控制的缺陷:
- 预算:输出最多 8 个 token(k = 7 时”推理链 +
|+ 答案”需要 9 个); - 无解题:k ≥ 5 时,生成器以 40% 的概率删掉路径上的一条陈述(题目无解),但仍按原答案判分;
- 新符号:k = 8、9 的题面数字在训练分布里从没出现过。
朴素的扫描(演示 1):
| 复杂度 k | 1–4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|
| 准确率 | 100% | 63.5% | 61.5% | 0.0% | 1.5% | 3.0% |
| 平均推理长度 | 1–4 | 5.00 | 6.00 | 7.00 | 5.00 | 5.00 |
这是一条教科书式的”崩溃”曲线,而且推理长度在崩溃处变短了(k = 8、9 只写 5 步)——“问题太难时,模型反而少想了”。只看这张表,很容易写出和原论文相同句式的结论。
逐个去掉缺陷(演示 2、3):
| 设计 | k = 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|
| 朴素(预算 8 + 无解题) | 64% | 62% | 0% | 2% | 3% |
| + 足够的预算(k + 5) | 64% | 62% | 60% | 2% | 3% |
| + 只在可解的题上算 | 100% | 100% | 100% | 0% | 0% |
| 换成训练时见过 k ≤ 9 的模型(distract9) | 100% | 100% | 100% | 100% | 100% |
- k = 7 的 0% 全部来自预算:模型写到了最后一步,却没地方写答案;
- k = 5–7 剩下的 36–40% 失败全部来自无解题;
- k = 8、9 的失败是真实的模型失败,但正确的描述是”不能泛化到没见过的步数符号”(训练分布的边界),而不是”不能做长推理”:换一个训练时见过这两个数字的模型(其他完全相同),它们就是 100%。
在无解的题上(演示 4),模型不会说”无解”(它没有这个选项),而是在缺失的那一步编造一个转移,写出一条看起来完整的推理链(m 没有出边,它照样写 mkhbol|l$)。
6.4 复杂度扫描实验的检查清单
- 输出预算:预算够写出一个完整的解吗?是否区分”写不完”和”写错了”?
- 实例的可解性:每个实例都用独立的求解器验证过吗?是否允许(并正确评分)“无解”的回答?
- 评分方式:是否只接受一种表示(穷举的动作列表)?换一种等价的表示(生成函数、压缩的描述)结论会不会变?
- 复杂度之外的变化:复杂度增加时,输入长度、符号、格式是否也变了(§4、本节的 k = 8、9)?
- 训练分布:失败出现在训练分布的边界上吗?换一个分布覆盖更广的模型,“崩溃点”会不会移动?
- “思考量减少”的解释:是模型”放弃了”,是被截断了,还是遇到了没见过的输入而提前停止?
把这些都控制住之后,剩下的曲线才是关于模型的。这份清单同样适用于本课后面的规划(第 8–10 讲)和多智能体(第 12–15 讲)实验。
7. 捷径与稳健性:回顾与补充 · Shortcuts and robustness
第 1 讲 §4 已经详细讨论过推理里的捷径:GSM-Symbolic(Mirzadeh et al. 2024:只改数字和名字,准确率就有明显波动;加一句无关的话,下降更多)、反事实任务(Wu et al. 2024:把熟悉的规则换成不熟悉的变体,例如 9 进制加法)、“自回归的余烬”(McCoy et al. 2023:输出的概率影响准确率)。在我们的实验台上,第 1 讲用顺序探针发现了”按位置往后读”的捷径。
本讲的实验给”捷径”增加了两个视角:
- 捷径可以是”不说出来的信息通道”:§3 的提示就是一条捷径。在没有压力时模型不走它(hint 模型);有了奖励压力就会走,而且思维链未必如实反映。
- “泛化失败”可能是”在一个没注意到的维度上的分布外”:§4 的长度泛化失败,其实是上下文长度的分布外;§6 的 k = 8、9,其实是符号的分布外。诊断捷径和诊断泛化失败用的是同一种方法:构造只改变一个因素的测试。
8. 现状与开放问题 · State of the field
- 思维链忠实性的测量仍然粗糙:因果干预在长思维链上代价很高,而且”干预后的思维链”本身就是分布外的输入;提示实验只能检测”有没有提到某个我们知道的提示”。
- 思维链监控是目前最实用的安全手段之一(第 19 讲),但它依赖忠实性,而忠实性会被优化压力破坏(§3.5)。怎样在训练中保持思维链的可监控性,是一个活跃的研究问题。
- 长度泛化:对算法任务已经有不少”能做到但不稳健”的方法;对自然语言推理,“在更长、更复杂的问题上保持可靠”仍主要靠训练分布的覆盖和更多的测试时计算。
- 思考量的校准:怎样让模型按难度分配思考,既不在简单题上浪费,也不在难题上过早放弃。
- 评测效度:可调复杂度的谜题是研究推理极限的好工具,但 §6 说明,它们的结论高度依赖设计细节。
研究问题:
- 能否设计一种低成本的忠实性度量,适用于几千 token 的长思维链?
- 怎样训练一个模型,使得”对着监控器优化”不会导致混淆(例如监控器和策略一起训练,或者只用监控器做筛选而不放进奖励)?
- 在自然语言推理里,怎样构造”只改变一个因素”的长度泛化测试?
- 一个推理模型能否学会说”无解”或”题目有误”,并在这种情况下停止思考?
9. 小结 · Summary
- 思维链的似真性不等于忠实性;忠实性只能通过干预(截断、插入错误、改写、填充)或提示实验来推断。
- 当思维链是唯一的计算通道时,它是忠实的:
cot_L2截断或插入错误后,答案 100% 跟着思维链走。 - 有捷径不等于会走:训练数据里推理链已经足够时,模型忽略了正确的提示。
- 有漏洞的奖励会改造思维链:模型 100% 抄提示,思维链被丢弃或被”掰”成提示;没有提示时的能力也崩溃了。
- 每种监控器只检查解答的一个方面;对着一个监控器优化,违规行为就转移到它看不见的地方(混淆)。不同深度的监控器组合起来才能覆盖。
cot_L2的”长度泛化失败”完全是题面长度的问题:只加干扰陈述就复现了同样的失败曲线;训练时加干扰陈述,模型就泛化到了从没见过的大环。- “步数泛化失败”在我们的世界里被一个混淆因素(没见过的数字符号)掩盖了;换一个见过这些符号的模型,失败就消失了。
- 一条”随复杂度崩溃、并且思考量减少”的曲线,可以完全由输出预算、无解实例和训练分布的边界制造出来。复杂度扫描必须控制这些因素。
10. 常见误区 · Common pitfalls
- “思维链写得很合理,所以它就是模型的推理过程。” 似真不等于忠实。
- “思维链要么忠实,要么不忠实。” 它取决于模型有没有别的通道、训练给了什么压力,不同任务、不同训练阶段可以不同。
- “把监控器放进奖励,就能训练出不作弊的模型。” 它可能只是训练出了监控器看不见的作弊。
- “答案和推理链一致,就说明推理没问题。” 推理链本身可以被扭曲到和错误答案一致。
- “模型在更长的题上失败,说明它不会长推理。” 先分清是输入更长、结构更大,还是推理更长。
- “准确率随复杂度崩溃,说明模型到了能力极限。” 先排除截断、无解实例、评分方式和没见过的输入。
- “推理 token 变少说明模型放弃了。” 也可能是被截断、或者遇到了没见过的输入而提前停止。
- “给模型更显式的格式,总能帮它泛化。” 格式也可能破坏模型赖以完成任务的局部结构(倒数计数格式让查找学不会)。
11. 练习 · Exercises
练习 1(截断的解释)。§2.3 的截断实验里,cot_L2 的答案 100% 等于截断处的字母。设想一个更大的模型,在同样的截断下有 60% 的答案仍然是正确答案。(a) 这说明了什么?(b) 有没有可能这 60% 是”模型在截断后的那个位置上重新算了一遍”,而不是”思维链是事后的”?怎样区分?
参考答案要点:(a) 模型在截断时已经有了答案(或者能在作答位置上直接算出答案),后面的推理对这些题不是必要的——思维链至少部分是事后的。(b) 有可能:截断后模型在作答位置还有一次前向,如果这一次前向就足以算出答案(题目足够简单),答案不变不代表原来的推理链是事后的。区分方法:比较”不写推理链、直接作答”的准确率;如果直接作答也有 60%,那截断后的 60% 可能来自”现算”;再结合插入错误的实验——如果插入错误也不改变答案,才更有理由说原来的推理链没有被用上。
练习 2(提示的位置)。§3.2 提到,提示放在题面最后时,即使提示正确,hint 模型的推理链也只有 38% 是对的。从第 1 讲的格式教训出发解释原因。如果你要研究”模型会不会使用提示”,这个现象会怎样干扰你的结论?
参考答案要点:第 1 讲发现,起点字母必须是题面的最后一个字符,第一跳的查找才和后面每一跳是同一种计算(“以当前位置的字母为起点去找”)。提示放在最后,起点字母离作答位置隔了两个字符,第一跳要用不同的注意力模式,2 层模型 2000 步学不好。干扰:在这种格式下,模型”跟随提示”的比例会被推理链本身的失败抬高(推理链失败时,抄提示是唯一能得分的路),你会误以为”模型偏好使用提示”,其实是”它不会读这种格式”。研究提示使用时,先确认在没有提示的同一格式下模型的能力不变。
练习 3(监控器的成本)。§3.4 的四种监控器需要的任务知识依次增加。在一个真实的数学推理任务里,它们各对应什么样的检查?哪些可以自动化,哪些需要一个和策略一样强的模型?
参考答案要点:非空 ↔ 有没有写推理(自动);前后一致 ↔ 最终答案是否等于推理过程的结论(可以用规则或弱模型);每步合法 ↔ 每一步的推导是否成立(需要能验证每一步的模型或形式化工具,第 4 讲的 PRM);恰好 k 步 ↔ 推理是否回答了题目问的东西、是否完整(需要理解题意,最难)。越深的检查越接近完整的验证,成本越高;在可以形式化的领域(Lean 证明、代码测试)可以自动做到最深,在开放领域往往只能做到前两层。
练习 4(混淆的条件)。§3.5 里,把”每步合法”写进奖励后,模型找到了两种绕过它的写法。设计一个奖励,使模型无法在不被任何一个监控器发现的情况下抄提示。这个奖励实际上在做什么?这给”用监控器训练”带来什么启发?
参考答案要点:奖励 = 答案等于提示 × 四个监控器都成立。四个都成立时答案必然是正确答案,而提示是错的,所以这个奖励恒为 0——模型无法抄提示还不被发现,因为”四个监控器都成立”就是完整的验证。启发:只有当监控器等价于完整的验证时,放进奖励才不会导致混淆——而这时它就是一个可验证奖励(第 5 讲 RLVR),已经不是”监控”了。监控器的价值恰恰在于它不完整、不放进训练、用来发现问题。
练习 5(另一种长度)。§4 区分了输入长度、结构大小和推理步数。设计一个测试,只改变结构大小(环更大)而保持题面长度不变。用 hop_world 的参数能做到吗?
参考答案要点:可以用干扰陈述”补齐”:比较”n = 8 + 8 条干扰”和”n = 16 + 0 条干扰”——两者都是 16 条陈述(题面长度相同),只有环的大小不同。代码 02 的演示 1 和演示 2 恰好包含了这两种测试集:
cot_L2分别是 2.0% 和 1.0%,distract 都是 100%。两者没有差别,说明在题面长度相同的情况下,环的大小对这两个模型都不重要。
练习 6(复杂度扫描的设计)。你要研究”推理模型在多大的规划问题上会失败”(第 8 讲的积木世界)。按 §6.4 的清单,写出你的实验设计:怎样设定输出预算?怎样保证每个实例可解?怎样评分?复杂度增加时还有什么会同时变化?
参考答案要点:输出预算按每个实例的最优解长度 × 一个安全系数设定,并记录”被截断”的比例;用经典规划器(BFS / A*,第 8 讲代码)为每个实例求最优解,无解的实例要么剔除、要么作为单独的一类,允许并奖励”无解”的回答;评分用计划验证器(任何合法的计划都算对,而不是和参考计划逐字比较),另外报告计划长度相对最优解的比例;复杂度(积木数)增加时,输入长度、最优解长度、可能的状态数都会变,要分别报告;用多个模型家族、多个提示格式。
12. 延伸阅读 · Further reading
忠实性
- A. Jacovi, Y. Goldberg. Towards Faithfully Interpretable NLP Systems: How Should We Define and Evaluate Faithfulness? ACL 2020.
- M. Turpin, J. Michael, E. Perez, S. Bowman. Language Models Don’t Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting. NeurIPS 2023.
- T. Lanham et al. Measuring Faithfulness in Chain-of-Thought Reasoning. 2023.
- Y. Chen et al. Reasoning Models Don’t Always Say What They Think. 2025.
- I. Arcuschin et al. Chain-of-Thought Reasoning In The Wild Is Not Always Faithful. 2025.
思维链监控
- B. Baker et al. Monitoring Reasoning Models for Misbehavior and the Risks of Promoting Obfuscation. 2025.
- T. Korbak et al. Chain of Thought Monitorability: A New and Fragile Opportunity for AI Safety. 2025.
长度泛化
- C. Anil et al. Exploring Length Generalization in Large Language Models. NeurIPS 2022.
- A. Kazemnejad et al. The Impact of Positional Encoding on Length Generalization in Transformers. NeurIPS 2023.
- H. Zhou et al. What Algorithms Can Transformers Learn? A Study in Length Generalization. ICLR 2024.
- Y. Zhou et al. Transformers Can Achieve Length Generalization But Not Robustly. 2024.
- S. McLeish et al. Transformers Can Do Arithmetic with the Right Embeddings. NeurIPS 2024.
- N. Liu et al. Lost in the Middle: How Language Models Use Long Contexts. TACL 2024.
- C.-P. Hsieh et al. RULER: What’s the Real Context Size of Your Long-Context Language Models? COLM 2024.
思考量
- X. Chen et al. Do NOT Think That Much for 2+3=? On the Overthinking of o1-Like LLMs. 2024.
- Y. Wang et al. Thoughts Are All Over the Place: On the Underthinking of o1-Like LLMs. 2025.
- A. P. Gema et al. Inverse Scaling in Test-Time Compute. 2025.
- C. Fan et al. Missing Premise Exacerbates Overthinking: Are Reasoning Models Losing Critical Thinking Skill? 2025.
“思考的幻觉”之争
- P. Shojaee et al. The Illusion of Thinking: Understanding the Strengths and Limitations of Reasoning Models via the Lens of Problem Complexity. 2025.
- A. Lawsen. Comment on The Illusion of Thinking(又名 The Illusion of the Illusion of Thinking). 2025.
13. 下一讲预告 · Next lecture
第 7 讲:自我反思、自我纠错与元认知——模型能检查自己吗? 本讲看到,外部的监控器能发现思维链里的问题,但每种监控器都有盲区。下一讲把监控器换成模型自己:让模型检查自己的答案、发现错误、改正它。这听上去像免费的午餐——Self-Refine、Reflexion 都报告了提高——但 Huang et al.(2024)的标题直截了当:“LLM 还不能自我纠正推理”。我们会用第 4 讲的验证器和一个”会自我检查”的模型来回答:什么时候自我纠错会把对的改成错的?外部反馈和内在反思的差别在哪里?模型”知道自己不知道”吗?