TTPO:无标签的测试时训练,效果追平依赖标准答案的方法

没有标准答案,测试时的模型还能继续变强吗?

把 Qwen3-1.7B 这样一个 17 亿参数的小模型摆在 AIME 2026、HMMT 2026、BRUMO 2025 三套竞赛级数学题面前。它一边做题,一边用这些题目继续训练自己,全程没有看过任何一道题的标准答案。结果平均正确率从 38.0% 涨到 45.2%。更反常的是把它的思考模式关掉、让它直接答题时,1.7B、4B、8B 三个尺寸的模型分别暴涨 25.2、30.6、36.4 个百分点,而用标准答案训练的对比方法只涨了个位数。这套方法叫 TTPO(Test-Time Policy Optimization,测试时策略优化),来自浙江大学和阿里巴巴的研究者 TTPO。

但 38.0 到 45.2,怎么可能不靠标准答案做到?要解释它,先回到测试时训练绕不开的那个信号缺口。过去几年让模型在数学上变强的两条主流后训练路线,强化学习和自蒸馏,全都依赖 ground-truth(标准答案)做信号。可测试时训练(TTT)恰恰是那个拿不到标准答案的场景:模型在推理阶段碰到没批改过的题目,要一边做题一边变强。缺口本身不算新闻,早期工作已经证明,用无标签数据在推理时临时微调模型,能把 ARC 这类基准大幅推高。真正的新问题是把竞赛级数学这种硬推理放进来,还要在无标签的前提下追平有标签训练的效果 TTT-LLMs。

这个缺口为什么致命?因为缺的那部分信号,只能靠标注买回来,而标注越来越贵。竞赛级数学的标准解答要消耗专家时间,RL 和自蒸馏每迭代一轮都要一批新的标注,模型越强,还能教它的新数据越值钱。所以"没有标准答案"不只是测试时训练的一个不便,它直接划定了进化的速度上限:只要信号还得靠人去造,模型的持续进化就被人工标注的产能卡住。反过来,如果模型能在线上自己补上缺口,用每一道没批改过的新题当训练材料,进化就不再受标注产能约束。TTPO 的野心,是把"没有标准答案"从缺陷变成设计起点。

缺口里的信号从哪来?最自然的替代是让模型自问自答:同一道题采样多条回答,谁得票多谁当老师,这就是多数投票伪标签。但它有一个致命弱点。论文里那句话说得非常直白:一个坏的奖励只误导你一次,一个坏的老师误导你每一个 token。伪标签一旦错了,它作为老师会在学生生成的一整条回答的每一个 token 上都给出错误示范,训练信号被系统性污染。

TTPO 论文 Figure 1 三联子图:动机、方法总览与性能

图注:(a) 把采样出的回答按是否同意伪标签拆成 Agreeing 13% 与 Disagreeing 87%,再把后者拆成 Correct 21% 与 Wrong 79%,右侧折线显示 "不一致" 与 "不一致且错误" 两条曲线几乎重合;(b) 是 TTPO 总流程,K 条回答经多数投票得到伪标签后分入 OPSD 与 GRPO 两路;(c) 是 Qwen3-1.7B 在三套基准上的平均正确率,TTT 协议下从 Base 38.0 一路涨到 TTPO 45.2 TTPO 项目页。

所以悬念在第一张图就立住了:多数投票是最自然的替代,但它会错,而它一错,整条学习就被带偏。接下来的问题是,伪标签错的时候,模型还能从这些数据里学到什么?回答要分两步走:先看"投票"和"蒸馏"这两条路各自走到哪里堵死了,再回来看 TTPO 怎么绕过去。

多数投票:从解码时的投票技巧,到训练时的新信号源

多数投票最早不是用来训练的。2022 年的 Self-Consistency 发现,用 CoT 提示同一道题,把贪心解码换成多次采样,得到一批推理路径各不相同的回答,再对最终答案做多数投票,准确率就能大幅上升,GSM8K 上直接加了 17.9 个百分点,SVAMP、AQuA 等推理基准上也分别有 11.0 和 12.2 个点的提升。关键在多样性:如果只靠一种推理方式,模型会系统性地犯同样的错;多条路径各自独立犯错,错误就不容易重合,正确的答案反而被反复验证。注意,这一整套操作只发生在解码阶段,模型参数一个没动 Self-Consistency。

Self-Consistency 还埋了一个后来被反复引用的性质:模型越没把握,它的多条回答就越零散,多数票越稀少,作者称之为模型拥有了"知道自己不知道"的能力。不过它有个前提,最终答案必须落在固定的答案集合里才能投票。这也从侧面解释了为什么 TTPO 的测试场选在数学上,答案可比,投票才能成立。

Self-Consistency 三步法示意图

图注:Self-Consistency 三步法:一道 GSM8K 风格的题用 CoT 提示采样出多条推理路径,各自得到不同的最终答案,再对答案集合做多数投票选出最终输出。图内是示意题,不是真实基准题 Self-Consistency。

Self-Consistency 证明了"多数票更可信",但它不更新参数。要让投票变成训练信号,中间还差一步:投票结果怎么变成梯度?这就要用到 GRPO。传统的 PPO 做强化学习需要一个价值网络(critic)给每一步打分,开销接近再养一个模型。GRPO 的改动是把它整个砍掉:对同一道题采样一组回答,直接用组内相对优势 $A_i = (r_i - \text{mean})/\text{std}$ 代替价值网络,这条回答比组内平均水平高多少,就按这个幅度推高它的概率。加上 KL 项从奖励内部搬进 loss,GRPO 成了后来推理强化学习的事实标准,DeepSeek-R1 系列把它推上了工业流水线 DeepSeekMathDeepSeek-R1。注意 GRPO 只是不要价值网络,奖励本身仍然要算对错,测试时照样缺标准答案。TTRL 用投票补上的,正是这个缺口。

维度PPOGRPO
价值网络需要与策略同规模的价值网络完全不需要
优势估计GAE,靠价值网络逐 token 打分组内相对优势 (r_i − mean)/std
KL 项位置混在奖励内部直接搬进 loss

把这两件事接起来,就是 TTRL 做的事:多数投票的结果不再只是解码技巧,而是直接当 0/1 奖励喂给 GRPO。投票数出来的答案和这条回答一致,奖励 1,否则 0。这套 vote-as-reward 路线在 AIME 2024 上把 Qwen-2.5-Math-7B 的 pass@1 从 12.9% 推到 40.2%,相对提升 211.6%,证明无标签强化学习这条路走得通 TTRL。但它把一个关键问题藏了起来:投票本身错了怎么办?TTRL 的答案是把错的票也当成奖励信号硬学,一致与不一致全都喂给同一个更新,多数一旦错了,模型就是在强化错误。这一章留下一个裂隙,下一章介绍的另一条路,则干脆不碰投票。

让模型给自己当老师:OPSD 自蒸馏这条更省 token 的路

强化学习之外,还有一条给模型当老师的新路线,叫自蒸馏。OPSD(On-Policy Self-Distillation)的做法很巧:同一个模型同时扮演两个角色。student(学生)只看题目 x,尝试生成回答;teacher(老师)多看一眼标准解答 y★,在学生自己生成的那条回答的每一个前缀上,给出下一个 token 应该是什么的分布。然后让学生的分布去对齐老师的分布,损失用 forward-KL,梯度只回传给学生,老师不动 OPSD。

OPSD 同一模型 teacher+student 示意图

图注:OPSD 概览:同一个 LLM 实例化 student(只看题目 x)与 teacher(看 x 加标准解答 y★),student 在线采样一条回答,teacher 在这条回答的前缀上给出 next-token 分布,逐 token 的分布差异只把梯度回传给 student 一侧 OPSD。

为什么值得学它?因为信号稠密。GRPO 拿到的奖励是"这道题对了没"的二元结果,一组回答里如果大家全对或全错,组内标准差归零,梯度直接消失。OPSD 的 teacher 给的是逐 token 的分布,每个位置都有学习信号。实测对比很能说明问题:同一训练步数下,OPSD 把生成长度上限压到 1024 token,GRPO 用 16,000 token,约 15.6 倍的上限差距,OPSD 反而在 AIME 24/25、HMMT 25 上全面超过 GRPO,因为 GRPO 超过一半的 batch 会出现奖励标准差归零、没有任何梯度信号的情况。

OPSD 在损失的选择上也不是随手抓的。三种逐 token 散度里,forward-KL 是唯一稳定超过基线的方向,反向 KL 和 JSD 都明显更差。还有一个值得注意的工程细节:当学生关掉思考模式、老师开着思考模式时,wait、think 这类风格词的逐 token 散度比数学词高出 6 到 13 倍,如果不加处理,这些口水词会主导梯度。TTPO 的正分支继承了整套设计,只是把标准解答换成了伪标签 OPSD。

OPSD 还有一个容易被忽略的性质:它是 on-policy 的。学生学的永远是它自己当下采样出来的回答,而不是静态语料。模型在训练中不断变化,采样分布跟着漂移,如果监督信号来自旧数据,师生之间的代沟会越来越大。on-policy 让 teacher 始终跟得上学生,这恰恰是测试时训练最需要的性质。

但 OPSD 有一个软肋,和 TTPO 要解决的问题严丝合缝地对上了:teacher 之所以比 student 懂,是因为它多看了标准解答。测试时哪来的标准解答?把多数投票的伪标签直接塞进 teacher 的上下文当 y★ 用,就回到第一章的污染问题,伪标签错一次,teacher 就在每个 token 上带偏学生。有意思的是,同期的 Rethinking OPSD 论文用对照实验质疑了 OPSD 的一个前提:teacher 的提升也许根本不来自"看到了正确答案",而来自参考答案改变了它的整体行为,用另一道题的解答当参考,效果也不差 Rethinking OPSD。这让"测试时没有标准答案也能蒸馏"这件事有了理论上的喘息空间,也把 TTPO 逼到了最关键的一步:既然两条路各有死穴,那要不要先搞清楚,伪标签到底错得有多离谱?

伪标签八成是错的,但错得很有规律

TTPO 首先做了一件朴素的事:把伪标签的错误率真的量出来。在 Qwen3-1.7B 做 AIME 2026 测试时训练的设定下,多数投票给出的伪标签在约 85% 的题目上是错的。八成五的错误率,几乎可以说这个老师本身就没及格。注意口径:这是论文给出的平均观察,并没有按基准拆分的分表统计 TTPO。

但紧接着的第二个数字才是真正的转折:在所有与伪标签不一致的回答里,约 79% 自身也是错的。把两个数字放在一起看,不对称性就露出来了。伪标签错,不代表你能分辨它什么时候错;可"和伪标签不一致"这件事,几乎总是意味着这条回答错了,而且这个判断根本不需要知道伪标签对不对。

这个不对称性绝不是琐碎的。如果失败模式是对称的,不一致的回答里对错各半,惩罚不一致就会把正确的回答一起打掉,整个方案立刻失效。正因为不一致的回答里约 79% 是错的,惩罚才近乎安全。这也是为什么论文花力气把这两个数字量出来,它们是整个方法的承重墙,后面所有设计都压在它们上面。

可以用一个判卷的场景来理解:你拿到一沓没有标准答案的试卷,但你发现全班大部分学生的答案聚在一个值附近。你不知道聚堆的那个值是不是正确答案,可你几乎可以确定,那个和所有人都不一样的学生错了。抓"不一样"这件事,不需要正确答案,只需要一个多数。把对应关系说清楚:"聚堆的答案"就是伪标签,"与众不同的学生"就是不一致的 rollout,改卷人 TTPO 既不信任聚堆答案的内容,也不打算判断它到底对不对,只用它把试卷分成两摞。两摞的用途不同,这就是下一章的路由。这就是 TTPO 的核心观察:失败模式是不对称的,不一致≈错误,这个近似在伪标签大规模出错时依然成立。注意它反过来不成立,和伪标签一致的回答里也混着不少错的,所以"一致性"不是好消息,"不一致性"才是坏消息。

这个现象不是 TTPO 第一个看到的。TTRL 报告过一个后来被称为 Lucky Hit 的现象:它在 AIME 2024 上多数投票的标签精度只有约 37%,但用投票做的 0/1 奖励与真实正确性的吻合度高达约 92%,投票明明经常给错答案,奖励却几乎总是分得清对错。Rethinking OPSD 的观察也从侧面印证:学生学到的更多是行为对齐而不是标签内容,参考答案本身被高估了。几条独立的证据线指向同一个结论:与其费劲分辨伪标签内容对不对,不如直接把"与伪标签不一致"当作负信号 TTRL。伪标签的定位从此开始变化,从"要信任的内容"降级为"用来分拣的开关"。TTPO 的整个方法,就是把这个开关装进损失函数。

把不对称写进损失:一致的去蒸馏,不一致的去挨罚

方法本身是把第二、三章的两个工具各改一半,再焊在一起。

对每个 prompt 先采样 K=64 条回答,按数学等价把答案相同的聚成簇,取最大的簇当伪标签 â。这一步叫多数投票路由。然后按每个 rollout 的答案是否等于 â,把样本分成一致集 P 和不一致集 N。一致的 rollout 走 OPSD 正分支:student 看 x,teacher 看 [x; â],用 forward-KL 让学生对齐老师。不一致的 rollout 走 GRPO 负分支:二元奖励加组内相对优势,只做惩罚侧,把回答这类错误的概率压下去。两个分支合起来就是总目标 TTPO:

$$\mathcal{L}{\text{TTPO}} = \frac{1}{|\mathcal{B}|}\left(\sum{k\in\mathcal{P}} \mathcal{L}{\text{OPSD}}(k) + \lambda \sum{k\in\mathcal{N}} \mathcal{L}_{\text{GRPO}}(k)\right)$$

两个限定必须说清楚,否则容易误读。这里的 OPSD 不是完整的 OPSD,它只在一致分支上生效,teacher 的上下文是伪标签 â。这里的 GRPO 也不是主强化学习,它只施加给不一致的 rollout,还去掉了正优势那一半的平衡。这正是把前两章的工具定向嫁接:OPSD 拿掉标准答案、只对"和多数一致"的回答蒸馏;GRPO 砍掉正反馈、只惩罚"和多数不一致"的回答。实现细节一句话带过:每个问题采样 K=64 条,真正做梯度更新的每步挑 8 条,正负各半,强化学习分支的权重 λ 取 0.1。

TTPO 方法图:多数投票路由加双分支

图注:TTPO 训练框架:左侧 Policy 生成 K 条 rollout 后经多数投票得到伪标签 â,按答案是否等于 â 分流;上方 (2.1) OPSD 分支给一致样本做逐 token 蒸馏并加权,下方 (2.2) GRPO 分支用组内优势加 token 掩码惩罚不一致样本,两个总目标分别由虚线框的 forward-KL 与 GRPO 包裹并反馈回 Policy TTPO 项目页。

正分支还有一个值得停下来想的安全机制。对一致集里的 rollout 来说,它的答案本身就等于 â,所以 teacher 看到的 [x; â] 里的 â,就是这个 rollout 自己给出的答案。哪怕伪标签错了,teacher 教的也只是"同一个模型在看到自己答案时的行为",forward-KL 退化成思维到非思维的蒸馏,而不是朝某个任意错误方向硬拉。这是整篇论文最巧的地方:伪标签内容可以错,但位置关系不会错。

更强的保障在 token 粒度上。蒸馏端用 Soft-OR 权重:$w(t) = \hat{H}(t) + \hat{\Delta}(t) - \hat{H}(t)\cdot\hat{\Delta}(t)$。H 是学生对该位置的熵,也就是模型自己的犹豫程度,Δ 是师生分歧。两个"还没学会"的信号取或,任一高,权重就高,继续教;两个都低,说明这个位置已经收敛,权重趋近 0,不再重复教已经会的地方。惩罚端用异常分数 $s(t) = -\log\pi(y_t)\cdot(1-\hat{H}(t))$ 给每个 token 排序,只对前 50% 高置信度的 token 施罚。原因很具体:一条回答整体错了,不代表每个 token 都错。中间两步算术可能完全正确,只是最后一步算岔了,无差别惩罚会把中间的正确步骤一起压低。只罚高置信的错误 token,这些局部正确才能幸免 TTPO。

分支样本目标token 级机制
正分支 OPSD 蒸馏与伪标签一致forward-KL 拉近师生Soft-OR 权重,降权已收敛位置
负分支 GRPO 惩罚与伪标签不一致组内相对优势只罚anomaly masking,只罚高置信错误

论文还给了一个反直觉的理论结论,但要说准它究竟保证了什么。理论证明的其实只有一件事:投票路由下,一致集非空。伪标签 â 取的是最大簇的答案,而最大簇来自 K 条回答自身的聚类,成员至少有一条,所以只要做了采样和聚类,正分支就一定有样本可学,模型全错也不例外。反直觉的对比恰在这里:真标签路由拿标准答案当分界,难题上全员答错、一条都对不上,一致集几乎为空,而投票路由在最坏情形下也留得下一份蒸馏素材。负分支没有这条理论保证,它只在 K 条回答彼此不一致、至少一条落在最大簇之外时才有样本。模型对某道题很有把握、所有采样答案都聚进同一个簇时,负分支这一轮就是空的。好在数学难题上不一致才是常态,动机图里与伪标签不一致的样本约占 87%,其中约 79% 又确实错了,负信号出现时几乎总是可信。真标签路由的饿死也值得拆开看:正分支是几乎没有样本,负分支则是全员奖励为零、组内标准差归零,优势估计失去意义,同样学不到东西。用伪标签当路由,反而比用真标签当路由更可学。伪标签至此彻底完成了角色转变,它不再是老师,只是一台分拣开关。

追平有标签训练:这套方法靠什么,又止步于哪里

效果验证用了三套协议,正好形成一条闭环证据链。

OpenThoughts 训练协议下,模型先在 OpenThoughts 系列开源数据上完成常规后训练,再分别叠加 TTPO 或对照方法继续训练。Qwen3-1.7B、4B、8B 的平均分分别是 40.1、58.6、62.6。对照组的 OPSD 和 GRPO 都用上了 ground-truth,表中用 † 标注,其中 OPSD 是 39.7、58.4、61.7。无标签的 TTPO 追平甚至略超了依赖标准答案的 OPSD,这是第一个值得记住的结果。TTT 协议下差异更明显,Qwen3-1.7B 从 Base 38.0 到 TTRL 40.2、OPSD-TTT 41.9,再到 TTPO 45.2,比 TTRL 高出 5.0 个点。最戏剧化的是 without-thinking 评测,关掉思考模式直接答题:TTPO 在三个尺寸上分别涨了 25.2、30.6、36.4 个点,而 OPSD 只涨 7.1、5.8、3.5。归因也讲得通。thinking 模式下的提升主要靠路由,正分支蒸馏加负分支惩罚。without-thinking 下的大幅提升,来自 GRPO 负分支直接惩罚了学生在不思考分布下的错误模式,这是纯蒸馏做不到的 TTPO。对实际部署来说,非思考模式是更快、更省算力的在线形态,测试时训练恰好补上了这个分布下最严重的错误模式。

协议Qwen3-1.7BQwen3-4BQwen3-8B
OpenThoughts 训练(无标签 TTPO / 有标签 OPSD†)40.1 / 39.758.6 / 58.462.6 / 61.7
TTT 协议(Base → TTPO)38.0 → 45.257.4 → 61.160.7 → 65.3
without-thinking(Base → TTPO,括号内为增益)9.5 → 34.7(+25.2)19.9 → 50.5(+30.6)20.3 → 56.7(+36.4)

这套评测能成立,有两个外部条件值得交代。一是 Qwen3 系列本身支持 thinking 和 non-thinking 双模式切换,同一个模型加一个 flag 就能关掉思考,without-thinking 这套评测才有技术前提 Qwen3。二是 OpenThoughts 协议复用了开源的训练数据配方 OpenThoughts。

还要排除一个嫌疑:TTPO 是不是只会背题?跨基准泛化实验把三个基准分别当训练集,再在另外两个上评测,TTPO 在绝大多数目标上仍然最优。比如在 HMMT 2026 上训练后去考 AIME 2026,Base 是 37.8,TTRL 是 39.9,OPSD-TTT 是 43.3,TTPO 是 46.7。学到的不是特定题目集的过拟合,而是更一般的解题能力。

训练过程中还有一个与正反馈假说一致的现象:模型先变强,投票跟着变准,投票信号变准又让监督更紧,模型更强。论文在 HMMT 2026 上观察到 Avg@12 与多数投票 Maj@12 同步上升,二者一起走高,提示这个回路可能存在。但单凭这条同步曲线还不能证明因果闭环,两个指标也可能是在同一股进步的推动下各自走高。多数投票路由会随模型进步自动收紧,同样只能算作与假说一致的现象,不能就此认定它是长训练里信号不塌的原因 TTPO。

跨基准泛化:学到的不是题目级过拟合

图注:跨基准泛化(Qwen3-1.7B):三个子图分别对应在 AIME 2026、HMMT 2026、BRUMO 2025 上做 TTT 训练,每个子图内是另一评测基准上 Base、TTRL、OPSD-TTT、TTPO 四根柱的 Avg@12 正确率,柱顶标有数值,大多数目标上 TTPO 最高 TTPO 项目页。

把视野拉远一点,TTPO 不是孤例。同期几条工作都在回应同一个根问题。Self-Harmony 用跨视图的调和平均替代单视图投票,在 30 个评测设置里拿到 28 个第一 Self-Harmony。RSTG 在 GRPO 优势全为零的负样本组上改用蒸馏,和 TTPO 的"负样本交给惩罚"形成相反解法 RSTG。再加上质疑标准解答必要性的 Rethinking OPSD,几条线各走各的路,却共同承认了一点:失败模式不对称是这个赛道公认的根问题,谁先利用好"不一致≈错误"这个结构,谁就先跑出来。

边界也划得很清楚。TTPO 依赖投票质量,题目太难、K 条采样全军覆没时,投票信号退化成噪声。它只做了数学推理,因为数学有可验证的最终答案,代码生成和开放式推理还没碰。实验只覆盖 1.7B 到 8B 的小模型。λ 和正负比例是静态课程,不随训练自适应。代码和项目页都已公开,整套流程可以复现 TTPO 项目页。把同一套信号搬到代码生成、通识推理和更大的模型上,是论文留给后续的三个自然方向。这些限制意味着,下一步的杠杆大概率在投票信号本身的质量上,而不是路由结构上。TTPO 的贡献不在于给出更聪明的伪标签,而在于承认伪标签不可靠之后,把失败模式的结构变成了训练信号。无标签的测试时训练在竞赛级数学上追平了标注驱动的后训练,这条路从此有了可复现的起点。对工程师来说,它意味着部署后的模型可以用真实流量继续自举;对研究者来说,它把"无标签时信什么"这个问题的答案,从"更准的投票"换成了"失败模式的结构"。

想深入可以读原文:TTPO: Test-Time Policy Optimization — arXiv:2608.27448

参考文献

TTPO:无标签的测试时训练,效果追平依赖标准答案的方法