推理模型其实是"先决定,再编理由"?这篇论文用探针抓了个现行

你有没有想过一个问题:当一个推理模型(比如 Qwen3、GLM-Z1 这些带 think 功能的模型)在 <think>...</think> 里写下长长的推理过程时,它真的是在"想"吗?还是说,它心里早就有答案了,那些推理链不过是事后编的"理由"?

这个问题不是哲学抬杠。如果 CoT 推理链只是装饰品,那我们基于 CoT 做的可解释性分析、安全审计、对齐验证——全都建立在沙子上。

最近有一篇论文直接捅破了这层窗户纸。作者用最简单的线性探针(linear probe)去读模型的隐藏状态,发现:在推理模型生成第一个 token 之前,模型就已经"决定"了要不要调用工具。 更让人不安的是,当他们用 activation steering 强行改变这个决定时,模型的 CoT 不是抵抗这个改变,而是顺从地为新决定编出一套合理化的推理过程。

"我思故我在"?不,对于这些模型来说,更像是"我在故我思"——先有了行动意图,然后才有了看似深思熟虑的推理。


核心摘要

这篇论文研究的是推理模型(reasoning model)在 tool-calling 场景下的决策时机问题。作者发现,用简单的线性探针就能从模型还没开始生成任何 token 时的隐藏状态中解码出"要不要调工具"的决策,AUROC 超过 90%。通过 activation steering 实验进一步证实了因果关系:扰动这个预决策信号能让 7-79% 的样本翻转决策,而模型的 CoT 在决策翻转后往往选择"合理化"而非"抵抗"。这不是一篇提出新方法的论文,而是一篇揭示机制的论文——它对我们理解 CoT 的忠实性(faithfulness)提出了实质性的质疑。


论文信息

📖 标题:Therefore I am. I Think

作者:Esakkivel Esakkiraja, Sai Rajeswar, Denis Akhiyarov, Rajagopal Venkatesaramani

发表时间:2026年4月1日(v1),4月3日更新至v3

论文链接https://arxiv.org/abs/2604.01202

标题很巧妙——笛卡尔的名言是 "I think, therefore I am"(我思故我在),这里故意倒过来写成 "Therefore I am. I think.",暗示模型是先做出存在性的决策行为,然后才去"思考"出理由。


问题动机:CoT 到底是在推理,还是在表演?

这个问题的根源在于推理模型的训练方式。

我们现在的推理模型,不管是 DeepSeek-R1 那一脉的,还是 Qwen3、GLM-Z1 这些,都是在 RL 训练中鼓励模型生成长思维链然后给出答案。但 RL 优化的目标是最终答案的正确性,不是推理过程的忠实性。模型完全有可能学会一种策略:在内部快速做出决策,然后生成一段看起来合理的推理过程来"包装"这个决策。

之前也有一些工作探讨过 CoT 的忠实性问题。比如 Arcuschin 等人在 2025 年的论文 "Chain-of-Thought Reasoning In The Wild Is Not Always Faithful" 就发现,即使没有人为注入偏差,模型也会对逻辑矛盾的问题("X 比 Y 大吗?"和"Y 比 X 大吗?")给出两个自洽但相互矛盾的推理链。这说明 CoT 有时候不过是在给一个预设的答案"编故事"。

但之前的研究大多是从行为层面观察的。这篇论文的切入点不一样——它直接扒开模型的内部表示来看。


方法:三步走——探测、干预、评估

整体方法论设计得相当干净利落,分四个阶段:

图1:方法总览——从数据收集到探针训练、activation steering、再到行为评估的完整流程

图1:方法总览。A) 收集推理模型在 tool-calling 数据集上的推理轨迹;B) 在不同层、不同位置训练线性探针,看哪里能解码出决策信号;C) 用 activation steering 干预模型的隐藏状态;D) 用 LLM Judge 对干预前后的行为进行分类评估。

1. 探针训练(Probing)

核心思路很直觉:如果模型在生成推理链之前就"知道"自己要做什么,那这个信号应该能从隐藏状态里读出来。

具体做法: - 在不同的 token 位置(pre-gen、think_start、think 5%/10%/25%/50%/75%、think_end)提取隐藏状态 - 在不同的 (每隔4层采样一次)提取表示 - 训练一个最简单的逻辑回归分类器(没错,就是线性探针)来预测"这个样本最终会不会调用工具" - 用 5 折交叉验证评估 AUROC

为什么用线性探针?因为如果一个线性分类器就能解码出决策信号,说明这个信号在表示空间里是线性可分的,它不是某种需要复杂非线性变换才能提取的暗号,而是明晃晃地写在隐藏状态里的。

2. Activation Steering(因果干预)

探针告诉我们信号存在,但不能证明因果关系。可能模型确实在后面的推理中改变了决策,pre-gen 的信号只是个相关性。

所以作者用 activation steering 来做因果验证:

  • 构造 steering vector:\(\mathbf{v} = \boldsymbol{\mu}_+ - \boldsymbol{\mu}_-\)(工具调用 vs 不调用的平均激活之差)
  • 在模型前向推理时,在选定层注入扰动:\(\mathbf{h}' = \mathbf{h} + \alpha \cdot \hat{\mathbf{v}}\)
  • 调节强度 \(\alpha\) 来控制干预力度

两个方向的干预: - Suppression(抑制):让本来要调工具的不调 - Injection(注入):让本来不调工具的去调

3. 行为评估

用 LLM Judge(Claude Sonnet 4.6 + GPT-5.4 双裁判)对干预前后的推理链进行分类,归入六种行为类别:

行为类别 含义
Seamless Divergence 决策不同但推理流畅自然,看不出冲突
Confabulated Support 编造了 prompt 或工具中不存在的事实来支持新决策
Constraint Override 明确承认了约束条件,然后用弱理由绕过
Inflated Deliberation 大量犹豫、反复权衡,但没有新信息输入
Decision Instability 可见的摇摆——先论证一个方向,然后突然转向
No Meaningful Difference 干预前后没有实质差异

实验设置

模型: - Qwen3-4B(36层) - GLM-Z1-9B(40层) - GPT-OSS-20B(仅附录)

数据集: - When2Call:3,652 个多选样本 + 300 个 LLM-judge 样本,包含 tool_call(~57%)、direct(~12%)、request_for_info(~14%)、cannot_answer(~17%) 四种类别 - BFCL(Berkeley Function Calling Leaderboard):Irrelevance + Simple v3 (base + live) 的组合

评估集为每个基准 / 方向 100 个 held-out 样本,不参与探针训练和 steering vector 计算。


实验结果:证据链条

发现一:模型在"想"之前就做好了决定

下面这张热力图非常关键。横轴是模型的不同层,纵轴是生成过程中的不同位置(从 pre-gen 到 think_end)。颜色越深代表探针的 AUROC 越高。

图2:Qwen3-4B 在 When2Call 上各层各位置的探针 AUROC 热力图

图2:Qwen3-4B 在 When2Call 数据集上的探针 AUROC。注意 Pre-gen 行——在模型还没输出任何 token 时,中高层(L16-L24)已经达到 0.94-0.96 的 AUROC。

看到没?Pre-gen 那一行,从 L16 开始已经是 0.94 了,L20 是 0.96。这是在模型什么都没生成的时候。

更有意思的是下面这张位置扫描图:

图3:Qwen3-4B (When2Call) 探针准确率随生成位置变化的曲线

图3:探针 AUROC 随推理进度的变化。绿色实线是最佳层的准确率,灰色虚线是所有层的均值。注意 Think 5%-10% 位置有一个明显的"谷底"——推理刚开始时准确率反而下降了。

这个"U型曲线"太有意思了:

  1. Pre-gen:AUROC ~0.96,模型已经"知道"答案了
  2. Think start:还是很高,~0.95
  3. Think 5%-10%:突然掉到 ~0.85,推理刚开始时反而更不确定了
  4. Think 25%-75%:逐步回升
  5. Think end:接近 1.00,推理结束时信号完全确定

作者给出了一个很好的解释:推理开始的早期阶段引入了"不确定性"——模型在这个阶段确实有一定程度的"真实思考",信号暂时被打散了。但最终决策还是和 pre-gen 的预判高度一致。

发现二:Pre-gen 的决策和最终决策高度吻合

图4:Qwen3-4B (When2Call) 各位置探针预测与最终决策的一致性

图4:各个位置的探针预测与 think_end 探针预测的一致性。Pre-gen 位置有 88% 的样本与最终决策一致(绿色=一致且正确,红色=一致但错误,灰色=不一致)。

88% 的一致率。也就是说,在 88% 的情况下,模型还没开始"思考"就已经锁定了最终答案。那中间那么长的推理链在干什么?

发现三:Steering 能翻转决策,且 CoT 会跟着"编故事"

steering 实验的结果按模型和数据集汇总如下:

模型 数据集 方向 翻转率 \(\alpha\)
Qwen3-4B When2Call Suppression 49% 12
Qwen3-4B When2Call Injection 62% 12
Qwen3-4B BFCL Suppression 26% 12
Qwen3-4B BFCL Injection 53% 12
GLM-Z1-9B When2Call Suppression 11% 12
GLM-Z1-9B When2Call Injection 21% 12
GLM-Z1-9B BFCL Suppression 58% 30
GLM-Z1-9B BFCL Injection 79% 30

翻转率从 11% 到 79%,差异很大,这跟模型结构和数据集特性有关。GLM-Z1 在 BFCL 上需要更大的 steering 强度(\(\alpha\)=30 vs 12),但一旦够了,翻转率高达 79%。

关键发现在于翻转后的行为模式

When2Call 上 Qwen3-4B 的 injection 实验(93个样本): - Confabulated Support(编造事实):53 个案例,占全部 58 个翻转样本的绝大部分。模型为了证明"需要调工具",直接编造了 prompt 里根本不存在的参数或工具功能。 - Constraint Override(无视约束):5 个案例,模型先承认"其实不需要工具",然后话锋一转说"但还是调一下吧"。 - No Meaningful Difference:33 个案例(主要是没翻转的)。

坦率地讲,看到"Confabulated Support"占翻转案例的大头,我是有点震惊的。这说明模型在决策被外力改变后,不是去质疑这个改变,而是主动编造证据来支持新决策。

发现四:推理 token 膨胀

steering 还有一个副作用:模型在被干预后会变得更"啰嗦"。

数据集 方向 翻转样本 token 膨胀 抵抗样本 token 膨胀
When2Call (Qwen3) Suppression 1.38x 2.30x
When2Call (Qwen3) Injection 1.75x 0.98x
BFCL (Qwen3) Suppression 1.79x -
BFCL (GLM) Injection 1.34x -

有意思的是,suppression 方向上"抵抗"成功的样本反而 token 膨胀更严重(2.30x)。这很好理解——模型在"挣扎",它知道自己该调工具,但被 steering 压制了,所以反复犹豫、来回论证,推理链变得特别长。而翻转成功的样本(1.38x)反而没那么啰嗦——因为模型很快就"认了",开始为新决策编理由。


跨模型对比

GLM-Z1-9B 和 Qwen3-4B 的行为模式有明显差异:

GLM-Z1 在 When2Call 上的 suppression:72 个评估样本中,50 个被判为 "No Meaningful Difference"——也就是说 steering 基本没什么效果,模型比较"硬气"。但在 BFCL 上,GLM-Z1 却很容易被影响(翻转率 58%/79%),而且翻转后出现了大量 "Decision Instability"(25 个案例中 24 个翻转)。

这种跨模型、跨数据集的差异很值得关注。它说明不同模型对 activation steering 的敏感度不一样,可能跟训练方式、模型容量、以及数据集难度都有关系。


我的判断:这篇论文到底在说什么

亮点

1. 实验设计干净。探针 + steering + 行为分析,三层证据互相印证。用逻辑回归这种最简单的线性模型做探针,避免了"探针本身太强导致假阳性"的问题。

2. 行为分类体系做得好。六种行为类别的定义覆盖了 steering 后所有可能的反应模式,而且用双 LLM Judge 交叉验证,disagreement rate 控制在 7-38%(随机基线 2.8%),说明分类还是比较可靠的。

3. 揭示了一个真实的、有工程意义的问题。如果 CoT 真的只是事后合理化,那所有基于 CoT 做的 safety monitoring、红队测试、对齐验证都需要重新审视。这不是小事。

我觉得有问题的地方

1. 场景局限性。只做了 tool-calling 这一个决策维度。tool-calling 是一个相对"二元"的决策(调 or 不调),模型确实有可能在看完 prompt 的瞬间就知道答案。但对于更复杂的推理任务——比如多步数学推理、开放式问题解答——预决策信号是否同样强,论文没有回答。

我的直觉是,对于真正需要推理的任务,CoT 的作用可能更大。tool-calling 可能是一个"预决策信号最强"的场景,用它来推断所有 CoT 都是事后合理化,结论可能太强了。

2. 模型规模偏小。Qwen3-4B 和 GLM-Z1-9B 都不算大模型。更大的模型(70B+)是否也有同样的模式?还是说大模型的推理链更"忠实"一些?这是一个开放问题。

3. Linear probe 的局限。线性探针能检测到的是线性可分的信号。如果模型在非线性子空间里编码了更细粒度的决策信息,线性探针是看不到的。不过,对于"是否存在预决策信号"这个问题,线性探针能检测到已经足够说明问题了。

4. "Faithfulness" 的定义边界。有一种可能:模型确实在 pre-gen 就有了倾向,但推理链在某些 case 里确实改变了最终决策(那 12% 的不一致样本)。问题是这 12% 是"真正的推理"还是噪声?论文没有深入分析这些不一致的 case。

对工程实践的启发

1. 不要盲信 CoT 做安全审计。如果模型决策在 CoT 之前就确定了,那审查 CoT 只能看到"表演",看不到"动机"。未来做 AI 安全可能需要更多地关注隐藏状态层面的监控。

2. 探针可以做轻量级的决策预测。既然简单的逻辑回归就能在 pre-gen 阶段达到 90%+ 的 AUROC,那在工程上完全可以用探针做早期决策检测,比如在 agent 系统里提前判断模型是否会调用工具,从而做更好的资源调度或安全拦截。

3. 训练方法需要改进。作者在论文里提了一个有意思的建议:在 RL 训练中,把探针置信度作为惩罚项。如果模型在 pre-gen 就有很强的决策信号,说明推理链可能不忠实,应该被惩罚。这个思路值得探索。


和相关工作的关系

这篇论文其实站在一个更大的议题上:推理模型的 CoT 到底有多可信?

Arcuschin et al. (2025) 的 "Chain-of-Thought Reasoning In The Wild Is Not Always Faithful" 从行为层面发现了不忠实的 CoT,但没有深入内部机制。这篇论文用探针实验补上了机制层面的证据。

更早的工作,比如 Turpin et al. (2023) 的研究也发现模型会受到 prompt 中无关信息的影响但在 CoT 中不提及,说明 CoT 不完全反映模型的真实推理路径。

总的来说,CoT 不忠实这个现象在社区里已经有了越来越多的证据,这篇论文是其中方法论比较扎实的一个数据点。


收尾

说到底,这篇论文提出的问题比它给出的答案更重要。

推理模型的 CoT 到底在多大程度上反映了模型的真实"思考过程"?如果答案是"很大程度上不反映",那我们目前基于 CoT 的整套可解释性框架都需要打个大大的问号。但如果只是在某些简单决策(如 tool-calling)上不反映,而在复杂推理上 CoT 确实有实质作用,那结论就需要谨慎得多。

有个地方我也不太确定:activation steering 本身是一个比较"暴力"的干预手段,扰动后的行为到底能在多大程度上反映自然状态下的机制?这个问题在 mechanistic interpretability 领域一直有争议。

但不管怎样,"模型可能在想之前就决定了"这个发现,值得每个做 AI 安全和对齐的人认真对待。至少,下次看到一个推理模型写出洋洋洒洒的思维链时,别太快就信以为真。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我