Elea Notes.

自省不如重复采样:等 token 成本下 7 种推理方法的 36 组对照

七种「让模型想得更好」的方法,在等 token 预算下和重复采样逐题配对:36 组对照零胜十负,输的全是自省类。

一个 1.5B 的小模型做数学题,给你 2400 个 token 的预算。两种花法。

第一种:让它写一遍解答,然后自我批评、重写、再检查一遍。第二种:让它把同一道题独立做八遍,然后数哪个答案出现次数最多。

第一种听起来聪明得多。第二种赢了 7.7 个百分点。

这不是新猜想——Wang 等人 2024 年就提出过类似的怀疑。新的是它终于被当成实验来做了:七种方法、三个尺寸的模型、两个数学基准、每个 150 道题、36 组逐题配对的对照,全部带置信区间和多重比较校正。

先说结论

  • 等 token 成本下,没有一种”让模型想得更好”的方法可靠地打败重复采样。七种方法、36 组逐题配对对照,赢的一组都没有;十组显著输,其中两组在对全部 36 组做多重比较校正后仍然显著。
  • 输的那十组全部是”让模型检查自己输出”的方法。涉及自省的 18 组对照,无一例外为负。
  • 最干净的一刀:同样八份样本,让模型挑最好的,比直接数众数差 8.0 到 17.3 个百分点。样本、token、模型完全相同,唯一区别是赢家由模型选还是由计票决定。
  • 这个惩罚随模型变大而缩小,但只缩到”打平”。7B 上两个基准分别是 −2.0 和 −1.3 个百分点,置信区间都跨零。
  • Reflexion 在 1.5B 上一次都没触发过自己的重试。它每道题都判自己对,静默退化成一条普通思维链,然后因为便宜而”分数不错”。

问题出在哪:预算和方法被绑在了一起

先说清楚被比较的两样东西。

重复采样(论文里叫 self-consistency,自一致性):同一道题问 NN 遍,每遍让模型在温度 0.7 下自由采样,得到 NN 份可能不同的解答,取出现次数最多的最终答案。它没有任何”思考技巧”,只有重复和计票。

自省类方法:让模型先写一版,再让它批评这一版,再让它按批评重写。Self-Refine 和 Reflexion 属于这类。

现在看一个几乎所有方法论文都踩过的坑。一条普通思维链大约 300 个 token。三轮自我批评大约 1600 个。三个副本辩论两轮大约 2500 个。

所以当一篇论文说”我们的方法比思维链高 5 个百分点”时,它同时改了两件事:方法变了,预算也变了,而且常常变了五到十倍。而预算本身就会提高准确率——把同一道题多做几遍再投票,什么技巧都不用,分数就会涨。

        朴素比较(几乎所有方法论文的做法)
        ┌──────────────┐
   CoT  │ 300 token    │ → 72.0%
        └──────────────┘
        ┌──────────────────────────────────────┐
Self-Ref│ 1784 token                           │ → 72.0%
        └──────────────────────────────────────┘
        结论:「打平,但我们的方法更稳」

        等成本比较(这篇论文的做法)
        ┌──────────────────────────────────────┐
Self-Ref│ 1784 token                           │ → 72.0%
        └──────────────────────────────────────┘
        ┌──────────────────────────────────────┐
   SC   │ 1784 token(≈ 6 次采样 + 计票)      │ → 78.3%
        └──────────────────────────────────────┘
        结论:这 1784 个 token 花错了,差 6.3 pp

关键动作是:把每个方法实际烧掉的 token 数出来——包括批评、反思、辩论、检查所有中间文本——然后让重复采样也花同样多的 token,再比。

数字长什么样

Qwen2.5-1.5B、GSM8K(小学数学应用题)、150 道题。“配平的 SC”一列是把同样多的 token 换成重复采样投票的成绩。

方法该方法得分平均 token配平的 SC差值(95% CI)校正后 p
Chain-of-Thought72.0%30270.1%+1.9 [−3.2, +7.1]0.989
Plan-and-Solve70.0%31970.1%−0.1 [−5.0, +4.9]0.989
Self-Refine72.0%178478.3%−6.3 [−11.5, −1.2]0.097
Reflexion74.0%32370.1%+3.9 [−1.2, +8.9]0.441
Reflexion(强制重试)71.3%119776.3%−5.0 [−11.1, +1.1]0.441
Best-of-N(自我验证)71.3%236979.1%−7.7 [−13.3, −2.2]0.036
Multi-Agent Debate74.0%253979.2%−5.2 [−10.0, −0.7]0.110

读法上有两处容易看错,值得停一下。

第一,Reflexion 那个 +3.9 不是胜利,是没干活。它只花了 323 个 token——和一条普通思维链一样多。因为它的自我评估在这个模型上从未触发过重试:模型每道题都判自己正确,于是”反思循环”一次都没进入。它退化成了一条思维链,然后被拿去和”323 token 的重复采样”比。作者把强制重试的版本单列出来,那一行是 −5.0。

第二,看 token 列比看得分列重要。Best-of-N 得了 71.3%,和思维链的 72.0% 差不多,看起来”没变差”。但它花了 2369 个 token,是思维链的 7.8 倍。同样这 2369 个 token 用来采样投票能拿 79.1%。所以它不是”没变差”,而是把 8 倍的算力烧掉换来了 0 收益

最干净的一刀:同样的样本,谁来定胜负

上面那张表还有个可以质疑的地方:token 配平了,但两组的采样过程不完全一样,也许差异来自别处。

于是作者做了一个几乎无法反驳的对照。取 Best-of-N 的那八份样本——同一批样本,一个字都不重新生成——然后只换最后一步:

  • :把八份都给模型看,让它挑出最好的那一份。
  • :数八份里哪个最终答案出现次数最多。

样本相同、token 相同、模型相同、题目相同。唯一的变量是赢家由模型的判断决定,还是由计票决定

模型 / 基准模型来判计票差值(95% CI)p
Qwen2.5-1.5B / GSM8K71.3%79.3%−8.0 pp [−13.3, −3.3]0.001
Qwen2.5-1.5B / MATH-50046.7%58.0%−11.3 pp [−17.3, −6.0]<0.001
Qwen2.5-3B / GSM8K84.0%89.3%−5.3 pp [−10.7, −0.7]0.038
Qwen2.5-3B / MATH-50052.0%69.3%−17.3 pp [−24.0, −11.3]<0.001
Qwen2.5-7B / GSM8K90.7%92.7%−2.0 pp [−5.3, +0.7]0.241

这一刀切出来的结论没有回避空间:在这些模型上,“让模型自己选”这个动作本身就是有害的,与生成质量无关。信息完全一样,只是读取信息的方式不同。

有意思的是模型判得并不算离谱:它和多数答案的一致率有 63% 到 89%,说明它确实在跟踪某种信号。但在小模型上它约有四分之三的时间挑第一个候选——这是位置偏差,不是判断。而正确答案在八份里出现在哪个位置是随机的。

为什么会这样

一个能解释全部结果的说法:判断答案对不对,和生成答案,是同一个能力

重复采样只需要模型”有时候对”。它把八次独立尝试的正确率聚合起来——只要正确答案比任何单一错误答案更常出现,计票就能捞到它。它不要求模型知道自己什么时候对

自省要求的是另一件事:模型必须能区分自己的对与错。而这个能力恰恰是它欠缺的——如果它能可靠地识别自己的错误,它一开始就不会犯。于是自我批评拿到的是一个和生成过程相关的噪声信号,然后据此重写。重写有时改对,有时把对的改错,净收益接近零,而 token 已经花掉了。

   重复采样:把独立性变成信号
   sample1 ─→ 42   ┐
   sample2 ─→ 42   ├─→ 计票 ─→ 42   (错误彼此不一致,
   sample3 ─→ 17   │                  正确答案聚集)
   ...             ┘
   要求:模型「有时候对」

   自省:把相关的噪声当成信号
   draft ─→ 自评 ─→ 重写 ─→ 自评 ─→ ...

        评判者和生成者是同一个模型,
        错误也是同一批错误
   要求:模型「知道自己何时对」← 这个它没有

这解释了为什么惩罚随模型变大而缩小:大模型的自我判别能力更强,噪声更小。但 7B 的两个数字(−2.0 和 −1.3,置信区间跨零)只到”打平”,不到”更好”。作者据此把结论写成一个趋势而非阈值——他们明确说,三个尺寸不足以外推 32B 或 70B 会怎样。

边界:这篇论文不能推广到哪里

这些限制不是免责声明,是使用条件。越界引用这个结果和不知道这个结果一样糟。

只测了数学。GSM8K 和 MATH-500 有一个共同特性:答案是可以精确比对的短字符串,所以”数众数”这个操作有定义。写代码、写摘要、多轮对话里,“最常见的输出”往往不成立——两份都正确的代码可能长得完全不同。重复采样在没有可聚合答案的任务上不可用,这时自省是不是就赢了,这篇论文没测。

只测了 1.5B / 3B / 7B。趋势指向”大模型上惩罚消失”,但这是三个点连的线。

只测了 Qwen2.5 一个家族。同一个预训练配方共享自我判别的弱点是完全可能的。

自省有真实反馈时是另一回事。Reflexion 原始设定里有环境反馈(比如单元测试跑没跑过)。这篇论文测的是纯自我评估——没有外部信号,模型只靠自己判断。有可执行测试、有编译器、有检索到的事实做对照时,“批评—重写”回路拿到的就不是自相关噪声了。这条边界很重要:它把结论收窄到”没有外部验证器的自省”。

150 道题的样本量。逐题配对设计(同一批题上比两种方法)比独立组比较更敏锐,置信区间也是用 bootstrap 算的,但它撑不起细分到小格子上的结论。

一个能直接用的检查

这篇论文真正可迁移的不是”自省没用”这个结论——它有一堆前置条件。可迁移的是那个实验设计,而且它便宜到没有理由不做。

你手上任何一个”让模型想得更仔细”的流程,问三个问题:

  1. 它比朴素基线多花了多少 token?不是估算,是数出来——包括所有中间产物。倍数常常比人以为的大得多(这篇里最高 7.8 倍)。
  2. 同样的 token 换成”多跑几遍取多数”,成绩是多少?这是真正的基线。和 1 倍成本的基线比,赢了不算赢。
  3. 流程里的自省环节,实际触发了几次?Reflexion 那一行是整篇论文最有价值的教训:如果作者没有埋点统计触发率,他们会报告”Reflexion 涨了 3.9 个百分点”——而真相是它一次都没运行过。一个静默失效的组件会伪装成一个便宜又有效的组件。

第三条最容易被跳过,也最容易造成假结论。任何带条件分支的智能体流程都该记录每个分支的实际命中次数,否则你无法区分”这个机制有效”和”这个机制没跑”。

来源

  1. Rethinking Test-Time Reasoning: Iterative Self-Reflection Underperforms Repeated Sampling at Matched Token BudgetsarXiv