样本比反思更管用:一篇论文把 Self-Refine 和 Reflexion 拉平了比,结果不太好看
我注意到这篇论文的时候,是因为最近好几个人都跑过来问同一个问题:让模型自己批评自己、重新写答案,到底值不值?这篇文章直接给出了一个有点让人尴尬的回答——不值,至少在 token 预算相同的情况下不值。
作者 Iliya Mirzaei 做的事情其实特别朴实:把 Self-Refine、Reflexion、Best-of-N、多轮辩论这类「让模型自己反复折腾自己」的方法,跟一个几乎不需要动脑的 baseline——重复采样(Repeated Sampling)——拉到同一个 token 成本上做比较。模型用了 1.5B、3B 和 7B 三个规模,两个数学 benchmarks 各 150 题,总共 36 组对比,全部带置信区间和多重假设检验校正。
结果呢?36 组对比里,没有任何一种方法能可靠地赢过同等成本的重复采样。反倒是 10 组结果显著更差,清一色全都是需要模型审视自己输出的方法。所有 18 个涉及「自我检查」的对比,方向都是负的。
这个结论听起来反直觉,但逻辑其实很硬:Self-Refine 让模型写答案,然后批评答案,再重写。Reflexion 更重,出错还要反思原因再试。Best-of-N 要生成 N 个候选再挑一个最好的。这些方法每调用一轮都要吐大量 token——而重复采样的做法极其简单:同一个问题采样多次,哪个答案出现次数最多就选哪个。
把两者的推理成本对齐之后,Self-Refine 和 Reflexion 的真正优势就消失了。它们提升效果的主要机制可能根本不是「反思能力」,而是「多生成了几轮文本,撞对答案的概率变得更高」。
论文里有两个细节挺戳人。
Best-of-N 里那种「让模型自己选一个最好的」的做法,在小模型上明显拖后腿。在 1.5B 模型上,让模型自选比直接取多数答案要低 8.0 和 11.3 个点。到了 7B,这个差距缩小到 2.0 和 1.3 个点,统计上已经区分不出来了。模型越大,自我判断越靠谱;但在小模型上,它根本不知道什么是对的。
Reflexion 在 1.5B 模型上出了个很尴尬的 bug——它从未触发过重试。模型总是认为自己答对了,然后安然变成一条普通的单次 CoT。这个号称能反思纠错的方法,在小模型上完全是在表演反思,实际根本没有重写过。
这揭了当前不少「自我改进」类方法的底。模型不够强的时候,让它审视自己的输出,它很可能只是信心满满地在错误答案旁边画了个勾。而模型足够强之后,简单重复采样可能已经足够好了,用不着再搞那些花哨的管道。
这个实验也有明确的边界。数学题是一个答案相对确定、可以用多数投票来收敛的领域。放在开放性写作、代码生成或者需要深度推理的长链条任务上,重复采样可能就没这么好使了。论文自己也只测了两个数学 benchmark,150 题不算多。
这件事给团队提了个醒:下次再搭「多轮反思」Agent 工作流之前,先算清楚 token 账单,然后花同样的钱去做十次普通采样,看看谁的结果更好。如果简单方案效果差不多甚至更好,那多出来那套批评-反思-重写的管线,就只是在给 API 提供商送钱。
作者倒是很厚道,把代码、prompts、全部 generations 和验证脚本都放出来了。想在自己数据上复现对比的,可以自己去跑一遍。
这篇论文提醒了一个很容易被忽略的基本事实:当我们加一轮「反思」的时候,多出来的那些 token 本身就值钱,效果增益有多少来自方法设计、有多少来自多写了字,这事一直没有被认真拆开过。现在有人拆了,答案不太让人舒服,但至少是诚实的。