← 返回研究 RLVR · 自我精修

ThinkTwice

只刷题、从不检查卷子的学生,考场上不会回头改错——大模型也一样。ThinkTwice 把“检查卷子”直接练进训练目标,开销只多 3%。

arXiv GitHub Hugging Face
+11.5 ptAIME pass@4
5数学评测集
2模型家族
1单一奖励
+3%训练开销

模型答错了,你提醒它“再检查一遍”,它却常常原样重复,甚至把对的改错。ThinkTwice 要回答的问题由此而来:如果“再看一眼”是一种能力,能否直接把它训练出来?实验给出了肯定的回答:不需要任何额外的监督信号,训练开销只多约 3%,竞赛数学题成绩提升 11.5 个百分点。

ThinkTwice 论文总览图
论文原图。ThinkTwice 同时训练基础推理和自我精修,而不是把精修当成推理时提示技巧。

“再检查一遍”为什么常常落空

当前让大模型学会推理的主流训练方式叫 RLVR(可验证奖励强化学习——只按最终答案的对错给分):让模型解大量数学题、写大量代码,答对得分,答错不得分。这种训练把模型的“第一次作答”磨得越来越强,竞赛级数学题的成绩因此快速上涨。

但在整个训练过程中,模型从未练习过“复查自己”这个动作。它见过海量题目的第一遍解法,却几乎没有见过“拿到一份自己的答案,再把它改对”的过程。这像极了一个只刷题、从不检查卷子的学生:考场上老师提醒他“回头检查一遍”,他多半也只是把原答案重抄一遍。于是出现了开头的一幕:被要求复查时,模型要么照抄原答案,要么没有方向地重写。

已有的补救办法大多需要额外资源:训练一个专门挑错的批评模型(critic)、为每一步推理单独打分的过程奖励,或者人工撰写的批评数据。ThinkTwice 走了另一条路:不引入任何新信号,让模型用同一个对错奖励,把“解题”和“修正自己”当成两个都需要练习的动作。

同一个奖励,用在两个动作上

训练步骤成对出现。第一步是常规的 GRPO(一种常用的 RLVR 算法:同一道题采样多个解,按组内相对优劣更新模型):模型对每道题给出若干个解,按最终答案是否正确获得二元正确性奖励——只分对错,不给部分分。

第二步把这些解原样交还给模型,要求它在此基础上修正,再用同一个奖励更新。奖励函数没有任何变化,变化的只是它被同时应用于“解题”和“改题”两种行为。整条训练流程不需要批评模型、不需要过程奖励、也不需要人工批评数据,开销只比常规方法多约 3%。

ThinkTwice 方法图
论文原图。用同一正确性奖励两次,降低了额外监督成本。

五个数学基准上的验证

实验覆盖 MATH500、AIME 2024、AMC、Minerva Math、OlympiadBench 五个数学评测集,以及 Qwen3-4B 和 OLMo-3-7B 两个模型家族。代表性结果来自 Qwen3-4B 在 AIME 2024 上的 pass@4 成绩(允许作答 4 次,任一次正确即通过):

设置AIME pass@4 增益
GRPO 单遍基线
ThinkTwice,不调用精修+5.0
ThinkTwice,调用一次精修+11.5

两层提升的来源值得分开看:完全不调用精修时,ThinkTwice 训练出的模型一次作答已比基线高 5.0 个百分点——练习修正反过来改善了第一次解题;调用一次精修后,总提升达到 11.5 个百分点。

ThinkTwice 训练动态图
论文原图。训练过程中出现“先纠错、再守住正确答案”的隐式课程。
ThinkTwice 精修曲线
论文原图。精修在多个 pass@k 设置下带来叠加收益。

训练过程中还观察到一个有意思的现象:模型先学会“把错的改对”,随后逐渐学会“守住已经正确的答案”,形成一种没有人为设计的隐式课程。精修能力还能跨模型迁移——用它修正其他模型写出的解同样有效,说明它学到的并非只是自己的输出风格。

ThinkTwice 跨模型精修热力图
论文原图。自我精修能力可以跨模型迁移,说明它不是只记住自己的输出风格。

给推理训练的启示

“再想一次”可以直接训练。自我精修能力可以由 RL 目标本身学会,无需依赖提示词工程。
成本结构很干净。仍然只需要可验证的最终答案,不需要训练批评模型或采集批评数据。
推理与精修相互促进。不调用精修时一次作答也变好,调用后再叠加提升。

阅读代码与论文

ThinkTwice 的代码和论文入口已开放,适合复现实验或迁移到其他可验证任务。

arXiv GitHub Hugging Face