TTPO:多数票不可靠时,如何在测试阶段继续训练模型?

一句话结论:TTPO 不把多数票伪标签当成真值,而只把它当作“训练信号路由器”:与多数答案一致的 rollout 用 On-Policy Self-Distillation(OPSD)学习细粒度 token 分布,与多数答案不一致的 rollout 用 Grouped RL 做选择性惩罚。这个不对称设计把错误伪标签的影响限制在较小范围内,让模型能直接在无标注测试题上继续训练。

论文:TTPO: Test-Time Policy Optimization项目主页代码

1. Motivation:为什么普通的多数票自训练不够?

RLVR 和 OPSD 已经证明,后训练可以明显增强大模型的数学推理能力。但两者通常都依赖 ground-truth answer:

  • RLVR 用真值构造序列级 reward;
  • OPSD 把真值放进 teacher prompt,再用 teacher 的逐 token 分布监督 student。

到了 Test-Time Training(TTT)阶段,训练集就是没有标签的测试题,真值不可用。最自然的替代方案是:对同一道题采样多条解答,用多数票答案作为伪标签。然而,在困难题上,“多数”并不等于“正确”。论文在 Qwen3-1.7B、AIME 2026 上观察到,约 85% 的题目其多数票伪标签是错的。如果把错误伪标签无差别地送给所有 rollout 做蒸馏,teacher 会把整组样本都拉向错误答案。

作者发现了一个关键的不对称现象:即使多数票答案本身是错的,与该答案不一致的 rollout 中仍有约 79% 既不等于伪标签,也不等于真值。换句话说,“多数答案是什么”可能不可靠,但“许多少数答案也确实是错的”仍然可以提供负信号。

这把问题从“如何得到一个绝对正确的伪标签”改写成了:

对每类 rollout,哪一种训练信号在伪标签出错时仍相对安全?

TTPO 的回答是:

  • 对同意多数票的样本,teacher 条件与样本最终答案一致,可以做密集的 forward-KL 蒸馏;
  • 对反对多数票的样本,不强迫它模仿一个可能错误的 teacher,只给粗粒度负 reward;
  • 两条分支都只更新真正有信息量的 token,减少误伤。

2. Method:TTPO 的完整流程

2.1 多数票只负责分流

对一道测试题 \(x\),当前策略采样 \(K\) 条推理轨迹:

\[ y_k\sim\pi_\theta(\cdot\mid x),\qquad k=1,\ldots,K. \]

从每条轨迹中抽取最终答案 \(a_k\),将出现次数最多的答案记为伪标签 \(\hat a\)。随后划分:

\[ \mathcal P=\{k:a_k=\hat a\},\qquad \mathcal N=\{k:a_k\ne\hat a\}. \]

\(\mathcal P\) 是“同意组”,\(\mathcal N\) 是“反对组”。重要的是,\(\mathcal P\) 不等于已知正确样本;它只表示这条轨迹与当前共识一致。

2.2 正样本分支:answer-conditioned OPSD

\(k\in\mathcal P\),teacher 与 student 使用相同的 rollout token \(y_k\),但 prompt 前缀不同:

\[ q_t^{(\hat a)} =\pi_{\theta_0}\!\left(\cdot\mid[x;\hat a]_{\text{teacher}},y_{k,<t}\right), \]

\[ p_t =\pi_\theta\!\left(\cdot\mid x_{\text{student}},y_{k,<t}\right). \]

teacher 开启 thinking mode、注入伪标签,并固定在 base model 权重;student 关闭 thinking mode并接受梯度。正样本的损失是逐 token forward KL:

\[ \mathcal L_{\text{OPSD}}(k) =\frac{1}{T_k}\sum_{t=1}^{T_k}w(t) \operatorname{KL}\!\left(q_t^{(\hat a)}\Vert p_t\right). \]

并非每个 token 都值得同样学习。作者使用 student entropy \(H(t)\) 和 teacher-student divergence

\[ \Delta(t)=\operatorname{KL}\!\left(q_t^{(\hat a)}\Vert p_t\right) \]

作为两种互补信号。二者在单条样本内 min-max 归一化为 \(\hat H(t),\hat\Delta(t)\in[0,1]\),再用 Soft-OR 合并:

\[ w(t)=\hat H(t)+\hat\Delta(t)-\hat H(t)\hat\Delta(t). \]

只要 student 很不确定,或 teacher 与 student 分歧很大,权重就会较高;只有两种信号都低时,已收敛 token 才会被降权。

2.3 负样本分支:带 token mask 的 Grouped RL

对所有 \(K\) 条 rollout,先用与多数票是否一致构造二值 reward:

\[ r_k=\mathbf 1[a_k=\hat a], \]

再在组内标准化,得到 advantage \(A_k\)。因此 \(k\in\mathcal N\)\(A_k<0\)。负样本损失为:

\[ \mathcal L_{\text{GRPO}}(k) =-\frac{A_k}{T_k}\sum_{t=1}^{T_k}m(t) \log\pi_\theta\!\left(y_k^{(t)}\mid x,y_k^{(<t)}\right). \]

直接惩罚整条错误推理会误伤其中正确的局部步骤。TTPO 因此为每个 token 计算:

\[ s(t)=-\log\pi_\theta\!\left(y_k^{(t)}\mid x,y_k^{(<t)}\right) \bigl(1-\hat H(t)\bigr), \]

并只保留分数不低于样本内中位数的 token:

\[ m(t)=\mathbf 1\!\left[s(t)\ge\operatorname{median}_{t'}s(t')\right]. \]

直觉是:低概率说明该 token 对当前策略而言异常,低 entropy 又说明模型在这个位置很确信;二者结合,更像是导致失败的“自信错误”。常见的正确算术、格式 token 则不必一起受罚。

2.4 合并两条分支

最终目标为:

\[ \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). \]

实验使用 \(K=64\) 条 rollout 形成多数票,再选 \(K_{\text{train}}=8\) 条最短轨迹参与更新,正负各占 50%;\(\lambda=0.1\)。采样上限是 16,000 tokens,但梯度只作用于前 1,024 个 completion tokens。

3. 一个带具体数值的完整推演

下面用一个教学例子走完“投票 → 分流 → 正样本蒸馏 → 负样本惩罚 → 合并损失”。为便于手算,把实际的 \(K=64\) 缩小为 \(K=4\)

第一步:投票与 advantage

假设四条 rollout 的答案是:

\[ [42,42,41,43]. \]

所以 \(\hat a=42\)\(\mathcal P=\{1,2\}\)\(\mathcal N=\{3,4\}\),reward 为:

\[ r=[1,1,0,0]. \]

组内均值 \(\mu=0.5\),总体标准差 \(\sigma=0.5\),标准化后:

\[ A=\frac{r-\mu}{\sigma}=[1,1,-1,-1]. \]

因此答案 41 和 43 的轨迹只得到负 advantage;它们不会被迫逐 token 模仿“答案 42”的 teacher。

第二步:算一个正样本 token 的蒸馏信号

假设某个关键 token 上,teacher 和 student 对两个候选 token 的分布分别是:

\[ q=[0.8,0.2],\qquad p=[0.5,0.5]. \]

该位置的 forward KL 为:

\[ \begin{aligned} \Delta &=0.8\ln\frac{0.8}{0.5}+0.2\ln\frac{0.2}{0.5}\\ &=0.8\ln1.6+0.2\ln0.4\\ &\approx0.1927. \end{aligned} \]

假设样本内归一化后 \(\hat H=0.6\)\(\hat\Delta=0.5\),则:

\[ w=0.6+0.5-0.6\times0.5=0.8. \]

这个 token 对损失的加权贡献为:

\[ w\Delta=0.8\times0.1927\approx0.1542. \]

若这条正样本只有两个有效 token,另一个位置 teacher 与 student 已一致、贡献为 0,则:

\[ \mathcal L_{\text{OPSD}}=\frac{0.1542+0}{2}=0.0771. \]

第三步:定位负样本中的“自信错误”

再看答案 41 的负样本,设它有两个 token:

  • token 1 的生成概率为 \(0.1\),归一化 entropy 为 \(0.2\)
  • token 2 的生成概率为 \(0.8\),归一化 entropy 为 \(0.4\)

两者的异常分数分别是:

\[ s_1=-\ln0.1\times(1-0.2) =2.3026\times0.8 \approx1.8421, \]

\[ s_2=-\ln0.8\times(1-0.4) =0.2231\times0.6 \approx0.1339. \]

中位阈值约为 \((1.8421+0.1339)/2=0.9880\),所以 \(m=[1,0]\):只惩罚第一个 token。代入 \(A=-1,T=2\)

\[ \mathcal L_{\text{GRPO}} =-\frac{-1}{2}\ln0.1 \approx-1.1513. \]

这个负值没有问题。它对 \(\log p_1\) 的梯度为 \(-A/T=0.5>0\),梯度下降会降低 \(\log p_1\),也就是降低错误 token 的概率;第二个 token 因 \(m_2=0\) 不受影响。

第四步:合并

若一个 mini-batch 只取上述一条正样本和一条负样本,\(\lambda=0.1\),则:

\[ \mathcal L_{\text{TTPO}} =\frac{0.0771+0.1\times(-1.1513)}{2} \approx-0.0190. \]

一次更新同时完成两件事:把 student 在关键位置拉向 thinking teacher,并只压低负轨迹中最可疑的 token。TTPO 的核心并不是这个总损失的正负,而是两类样本的梯度方向和作用范围不同。

4. 实验结果:它到底提升了多少?

4.1 纯无标签 Test-Time Training

模型直接在 AIME 2026、HMMT 2026、BRUMO 2025 的无标签测试题上训练。指标为温度 1.0 下的 Avg@12:

模型 Base TTRL OPSD-TTT TTPO TTPO 相对 Base
Qwen3-1.7B 38.0 40.2 41.9 45.2 +7.2
Qwen3-4B 57.4 58.8 59.4 61.1 +3.7
Qwen3-8B 60.7 63.0 63.7 65.3 +4.6

Qwen3-4B 经 TTPO 后达到 61.1,超过未经适配的 Qwen3-8B(60.7)。在 1.7B 上,TTPO 比 OPSD-TTT 高 3.3 分;按主表数值计算,比 TTRL 高 5.0 分。论文正文写成了 5.4 分,应是算术或版本残留问题。

4.2 与使用真值的训练方法比较

在 OpenThoughts 训练设置中,GRPO 与 OPSD 使用 ground-truth,而 TTPO 仍只用多数票:

模型 Base 监督式 OPSD 无标签 TTPO
Qwen3-1.7B 34.6 39.7 40.1
Qwen3-4B 56.0 58.4 58.6
Qwen3-8B 58.6 61.7 62.6

TTPO 在三个尺度上都略高于监督式 OPSD。不过这不应被解读为“伪标签比真值更准确”。作者的解释是:困难题的真值往往没有任何 rollout 能答到,导致正分支几乎没有样本、负样本的组相对 advantage 也趋近于零;多数票始终能形成一个当前模型可达的簇,从而让两条训练分支持续工作。

4.3 非 thinking 推理与消融

OpenThoughts 训练后关闭 thinking mode,TTPO 相对 base 的平均提升分别为:

  • Qwen3-1.7B:9.5 → 34.7,+25.2
  • Qwen3-4B:19.9 → 50.5,+30.6
  • Qwen3-8B:20.3 → 56.7,+36.4

这说明能力不只是来自测试时写出更长的思维链,teacher 的 reasoning distribution 确实被压进了 student。

token 选择消融也支持两个组件的互补性。在 Qwen3-1.7B 的 OpenThoughts 设置中,完整 TTPO 在 AIME26/HMMT26/BRUMO25 上得到 46.5/31.6/54.7;去掉正样本权重后变为 43.3/30.6/52.8,去掉负样本 mask 后变为 45.4/29.5/50.0。

此外,训练在一个竞赛数据集上、评估到另外两个竞赛数据集时也普遍提升,说明它至少学到了一部分可迁移的数学推理模式,而不只是记忆当前测试题。

5. 最具创新性的点

我认为最创新的并不是多数投票、OPSD 或 GRPO 中的任何一个单独组件,而是按噪声下的可靠性边界来路由训练信号

\[ \text{agreement} \Rightarrow\text{dense but label-sensitive distillation}, \]

\[ \text{disagreement} \Rightarrow\text{coarse but label-robust negative RL}. \]

传统伪标签方法通常追问“这个标签能不能信”;TTPO 更细地追问“即使标签错了,这条样本上的哪一种操作仍然安全”。这是一种很有推广价值的设计原则:不必把噪声监督整体接受或整体丢弃,而可以拆解其中可靠的正、负信息,并为它们匹配不同粒度的目标函数。

第二个值得注意的点是,作者没有停留在 sequence-level 路由,还为两条分支设计了方向相反但互补的 token 选择:正分支寻找“还需要学的位置”,负分支寻找“最可能错的位置”。

6. 不足与可能的改进

下面前三点来自论文的 Limitations,后几项是我的分析。

6.1 仍依赖多数票质量,而且采样很贵

\(K\) 太小,或题目难到所有 rollout 都错时,正负分流都会变得噪声很大。实际配置每题采样 64 条、每条最多 16,000 tokens,测试时训练成本也很高。

改进方向:按共识强度、答案熵和预算动态调整 \(K\);低共识时允许 abstain;优先调用代码执行器、符号验证器或独立 reward model,而不是继续放大内部共识。

6.2 目前只验证了可抽取最终答案的数学题

数学题可以用 exact match 聚类,代码、开放式问答和 agent 任务却没有如此干净的答案等价关系。

改进方向:代码任务接入单元测试与执行反馈,agent 任务接入环境状态,开放式任务使用多个相互独立的 verifier,并显式校准 verifier uncertainty。

6.3 固定的训练配方未必适合整个训练过程

论文固定使用 \(\lambda=0.1\)、正负 50/50。消融显示 \(\lambda\) 从 0.1 改到 0.05 或 0.15 都会明显掉点,而随着模型变强,伪标签准确率和正样本比例本来就在变化。

改进方向:根据两条分支的梯度范数、共识强度和验证集代理信号动态调节 \(\lambda\) 与采样比例,而不是只用训练前确定的常数。

6.4 “选择最佳 checkpoint”在真正无标签场景中不可直接实现

论文训练 OPSD/TTPO 100 步,并报告每 25 步 checkpoint 中的峰值表现。计算“峰值”需要拿真实答案评估,这在严格的无标签 TTT 部署中不可用,也可能高估可落地收益。

改进方向:预先固定训练步数,或使用不接触真值的停止准则,例如共识稳定性、策略 KL、held-out 无标签代理指标;同时报告最后一个 checkpoint,而不只报告 oracle best checkpoint。

6.5 统计稳定性还不充分

主结果给出 Avg@12,但没有展示多次独立训练的均值、方差或置信区间。TTT 同时含 rollout 采样、伪标签和在线更新三层随机性,单次峰值不足以说明稳定性。

改进方向:报告多个训练 seed、逐题 Learned/Degraded 转移、最差 seed 和训练过程中完整曲线;尤其要验证少数正确轨迹是否会被错误多数持续压制。

6.6 “错误正样本是安全的”仍需要更严格的边界

论文的理论分析说明:当正样本答案与 teacher 条件一致时,不会出现把一条答案 \(a_k\) 强行扭向另一答案 \(\hat a\) 的 conflict term。但这只消除了答案冲突,并不保证错误轨迹中的推理模式本身值得蒸馏。

改进方向:在正分支中加入过程一致性检查、因果 token attribution 或外部验证;当共识错误风险高时,只蒸馏可复用的局部推理片段,而不是整条 rollout。

7. 如何正确理解这篇论文?

TTPO 并没有解决“模型不知道答案时如何凭空获得新知识”。它做的是更务实的一件事:当模型已经能产生多样候选、其中蕴含部分有效推理时,尽可能从噪声共识中提取安全的训练方向。

因此它最适合被理解为一个自举型 test-time post-training 框架

  1. 多次采样暴露模型当前的集体知识;
  2. 多数票形成与当前能力匹配的临时路由;
  3. 正分支吸收细粒度 reasoning,负分支清除明显失败模式;
  4. 模型改善后产生更好的 rollout,再反过来提高下一轮伪标签质量。

这个循环能否持续,最终仍取决于初始模型覆盖、任务可验证性、探索多样性与停止策略。TTPO 的真正贡献,是让这个循环在伪标签频繁出错时比“全量蒸馏”或“只有二值 RL”更不容易失控。

参考资料


TTPO:多数票不可靠时,如何在测试阶段继续训练模型?
https://kissshhot.github.io/2026/09/01/ttpo-test-time-policy-optimization/
作者
丁一帆
发布于
2026年9月1日
许可协议

点赞与评论

喜欢这篇文章?点个赞,或留下你的想法。登录 GitHub 后即可参与。

如果评论无法加载,请检查网络连接后刷新页面。