Sample More, Reflect Less: Self-Refine and Reflexion Lose to Repeated Sampling at Equal Token Cost, from 1.5B to 7B
Iliya Mirzaei
cs.CL, cs.AI, cs.LG
2026-07-31
token 预算拉平后,七种推理增强方法无一胜过多次采样取众数;让模型自评或改写答案,在 7B 以下规模稳定掉点。
Self-Refine、Reflexion、Best-of-N、多智能体辩论这些「让模型想得更细」的方法,几乎都会让模型多吐字。一条思维链(chain of thought)可能 300 token,三轮自我批评能到 1600,三个副本辩论两轮能到 2500。算力变了五到十倍。而把更多算力花在「同一题多采样几次、取众数答案」(self-consistency)上,本来就能涨点。所以一个方法「比单条思维链强」说明不了是它的机制在起作用,可能只是它烧了更多 token。
Wang et al.(2024)点破过这件事,但他们只给了点估计,没有置信区间、没有显著性检验,每个数据集只有 100 题,差异小于约十个百分点就和噪声分不开。这篇把它重做成一个正经的对照实验。
作者固定 Qwen2.5 的 1.5B、3B、7B 三个尺寸(Q80 量化、纯 CPU 跑,无 GPU),在 GSM8K 和 MATH-500 上各抽 150 题,比七种方法:Chain-of-Thought、Plan-and-Solve、Self-Refine、Reflexion(含一个强制版)、Best-of-N(模型自选)、多智能体辩论。
关键在成本计量。一个方法为一道题生成的所有 token 都算钱,包括批评、反思、辩论往返、校验这些从不出现在最终答案里的 token。然后拿这个实测成本,去查「重复采样」曲线(self-consistency 在 N=1…16 上的准确率-成本曲线)上同样成本那一点的准确率,比的就是这个。为了省钱,他们每题只采一个 16 条链的池子,从中无放回抽 N 条做众数投票,反复 200 次,就能廉价描出整条曲线。
所有比较按题配对,报配对 bootstrap 的 95% 置信区间,再用 Holm 校正应对「一次比七种方法总有一两个撞大运」的问题。这套设计能稳定识别大约 5 到 6 个百分点以上的差异。
36 个「方法×设置」比较里,没有一种在任何设置下显著优于等成本重复采样;10 个显著更差,全都是要求模型检查自己输出的方法。
最干净的一刀来自 Best-of-N。它采 8 个样本,然后让模型挑最好的。把同样这 8 个样本拿来做众数投票,样本、token、模型完全一样,只差最后一步是谁来定胜负。结果是数票处处赢,差距随模型变大而收窄:
| 设置 | 模型选 | 数票 | 差距(百分点) |
| 1.5B / GSM8K | 71.3% | 79.3% | -8.0 |
| 1.5B / MATH-500 | 46.7% | 58.0% | -11.3 |
| 3B / MATH-500 | 52.0% | 69.3% | -17.3 |
| 7B / GSM8K | 90.7% | 92.7% | -2.0(不显著) |
7B 以下数票四战四胜,到 7B 差距掉到约两点、与零分不开。改写类(Self-Refine、强制 Reflexion)到 7B 仍比基线低 3.6 到 10.1 个点,没回升。
还有个反讽细节:按原论文实现的 Reflexion 在 1.5B 上一题都没触发反思,模型每次都判自己对,于是悄悄退化成单条思维链,分数不低恰恰因为它最便宜。作者把「自适应部分到底触发了多少次」也测了,否则这个数字会被当成「反思有效」报出来。
对从业者,结论很务实:在算力固定、答案是可判定的数学题上,把多出来的 token 花在「再多采一次」比花在「让模型自我批评」更划算,模型规模越小越是如此。如果你的 pipeline 在 7B 以下用 Self-Refine 或 Best-of-N 自选来省钱提点,先拿「等成本多次采样取众数」当对照组跑一遍,很可能是白花的算力。这条结论有明确的边界,见下一节。
方向上的信号是:差距在 7B 收敛,是因为模型越来越认同多数票,不是因为它变成了更好的裁判。它偏离多数票时仍常常错。文献里训练过的验证器(process supervision、训出来的 self-verifier)确实能在 7B 附近胜过众数投票,所以真正起作用的可能是训练而不是「验证」这个动作本身。
作者自己把边界讲得很清楚,这也是这篇可信的地方。完整成本匹配比较只覆盖 1.5B 和 3B,Best-of-N 到 7B,再往上(前沿模型)没测,数票对自选会不会反超未知。任务只有可自动判分的数学题,而 Self-Refine 本是为开放式生成设计的:在数学题上答案非对即错,一次改写就是一次赌博,换到开放式任务、众数投票本身不存在(没法对一段散文取众数)的比较里,结论未必成立。作者明说不主张「这些方法没用」,只主张「在数学题、这些规模下,它们输给把同样 token 拿去多采样」。
方法上每种只实现了一个版本、固定超参、没按数据集调,prompt 措辞敏感(Reflexion 在 1.5B 不触发反思就取决于判分 prompt)。统计上只重采样了题目、没估种子级方差,所以涉及随机的三种方法(采样、Best-of-N、辩论)的区间是总不确定性的下界,那几个显著结果应算最不牢靠的部分。作者还坦白抓到并修了两个 bug:一个服务端上下文截断让 Best-of-N 偏向更易的题(重跑补齐),一个评分 bug 把 Best-of-N 当成众数投票打分(修完后它从「贴着基线」变成「每个设置都低于基线」),并放了独立重算脚本对全部 96 项核对一致。