测试时训练为什么总崩?TEMPO 用 EM 把缺失的那一步补回来

最近半年盯着 test-time training(TTT,测试时训练)这条线的人应该都有同样的感受——开局都很好看,跑着跑着就拐弯下来了。

我自己第一次跑 TTRL 的时候,前 50 个 step 看到 AIME 上的准确率从 30 多直接飙到 40+,那一瞬间是真有点兴奋的。然后再多跑 100 个 step,曲线就开始塌——平均准确率还在涨,但是 pass@16 在掉,跟另外几个同事对了一下,大家都遇到了。

这种"前甜后苦"的味道,其实就是这篇 TEMPO 想解的题。它给出的判断挺狠的:之前那一票 self-rewarding TTT 方法(TTRL、EMPO、Intuitor 这些),从 EM 算法的视角看,全都是只做了 M 步、没做 E 步的退化版。E 步丢了,奖励信号就和真实正确性脱钩,自我强化的飞轮一旦转起来,模型只会越来越自信于一种推理模式,最后多样性塌了,性能也卡死。

补上那一步,就是 TEMPO 全部的故事。


核心摘要

痛点:现有的 LRM 测试时训练方法(TTRL/EMPO/Intuitor 等)依赖模型自己生成的奖励信号——多数投票、熵、self-consistency。开局有效,但很快就 plateau,并且在追求平均准确率的过程中把输出多样性压塌了,pass@k 反而下降。

核心方案:把 TTT 重新写成一个 EM 算法。引入一个 critic 模型作为外部锚点。E 步用带标签的小数据集 \(D_L\) 周期性地重新校准 critic("E 步"对应估计正确性的后验分布);M 步在无标签测试问题 \(D_u\) 上用 critic 打的分作为 reward 去更新 policy。两步交替,让 ELBO 始终是个 tight bound,奖励信号就不会跟着 policy 一起漂移。

关键效果:OLMO3-7B 在 AIME 2024 上从 33.0% 拉到 51.1%;Qwen3-14B 从 42.3% 拉到 65.8%,绝对涨幅 23.5 个点。更重要的是 pass@k 没崩——AIME 24 上 Qwen3-14B 的 pass@8 是 73.3,TTRL 只有 56.7。

一针见血的评价:这篇论文最值钱的地方不是"又涨了多少点",而是它给整个 self-rewarding TTT 方向开出了一个统一的诊断书——你不是方法不够花哨,你是把 EM 拆碎了只用一半。从工程上讲,这是一个"加一个能用 RLVR 训出来的 value model 就能解决问题"的方案,迁移成本很低。但前提是:你必须有那个 \(D_L\)


论文信息

  • 标题:TEMPO: Scaling Test-time Training for Large Reasoning Models
  • 作者:Qingyang Zhang, Xinke Kong, Haitao Wu, Qinghua Hu, Minghao Wu, Baosong Yang, Yu Cheng, Yun Luo, Ganqu Cui, Changqing Zhang
  • 机构:天津大学、Tongyi Lab(阿里巴巴)、香港中文大学、上海人工智能实验室
  • 链接https://arxiv.org/abs/2604.19295
  • 代码https://github.com/QingyangZhang/TEMPO

为什么 self-rewarding TTT 总是会崩

先把背景串一下,因为这块没搞清楚就读不动 TEMPO 的动机。

LRM(large reasoning model,大推理模型)的能力来自训练后那条静态的参数。但题目本身是动态的——AIME 2025、AIME 2026 出来的时候你不可能再去重训一遍。于是 test-time training 的想法很自然:让模型在推理时,在测试题目(无标签)上继续做参数更新。

问题是,没有标签的情况下,奖励信号从哪儿来?

业界给出的答案大概就这么几条路:

方法 奖励信号来源 致命弱点
TTRL 多数投票产生伪标签 模型越自信,投票越偏向已有模式
EMPO 输出分布的熵 鼓励确定性,多样性会被压扁
Intuitor 自我一致性 / self-certainty 同上,奖励等价于 confidence
Theta-Evolve 各种 self-consistency 启发式 同病同源

这些方法有一个共同的结构性病灶:训练信号完全来自模型自己。模型对某种推理路径越来越确信,那条路径在投票/熵/一致性里就越占优,下一轮更新又会进一步加强这条路径——一个完美的正反馈环。

我之前就是被这个东西坑过。当时跑一个内部的小推理模型,TTRL 的 paper 复现得很顺,前期看曲线觉得没毛病,结果跑到第 200 个 step,模型对一类题目的输出几乎一模一样——pass@16 跟 pass@1 差别已经不大了。这个时候你做 best-of-N 的时候是真的会崩溃的,因为 N 个样本采出来都一样。

更恶心的是这种崩塌不是"啪"地一下断崖式发生的,是慢慢渗出来的。avg 一直在涨,loss 看着也健康,TensorBoard 上的曲线甚至挺漂亮,要不是有人专门去采 16 个样本算 pass@16,你根本发现不了模型已经在自我塌缩。

TEMPO 这篇论文用的话术叫 diversity collapse,说的就是这件事。

图1:TEMPO 的可扩展性。蓝色曲线是 TEMPO,灰色那一片是 TTRL 的多次实验。横轴是 training step,纵轴是 AIME accuracy。可以非常清楚地看到 TTRL 在 50-100 step 之后开始震荡甚至下滑,而 TEMPO 一路平稳地往上爬到 350 step 还在涨。

图1:TEMPO 在 AIME 上的可扩展性曲线。蓝色 TEMPO 持续向上 350 步还在涨;灰色 TTRL 50 步后就开始抖动塌方。


把 TTT 写成 EM 算法

OK 上正题。TEMPO 的核心 trick 其实就一句话:把 self-rewarding 那条路径里"奖励信号生成"和"策略更新"显式地解耦,分别对应到 EM 的两步。

一句话直觉

如果你做过 RLHF/RLVR,应该习惯了一个画面——"actor 生成、reward 打分、policy 优化"。TEMPO 就是把这个画面里的那个 reward model 单独拎出来,让它周期性地回到带标签的数据上重新校准一次,避免 reward model 跟 policy 一起漂走。这就是 E 步。

而 M 步还是熟悉的味道:用 critic 打的分作为 reward,在无标签的测试题上跑 policy gradient。

数学是怎么走通的

response 的"正确性"在测试时是一个未观测的隐变量。这是整个 EM 视角的起点。

目标函数是最大化生成正确响应的对数概率:

\[J(\theta) = \mathbb{E}_x[\log P(\text{Correct} \mid x; \theta)]\]

引入辅助分布 \(q(y|x)\),做一次经典的变分分解,就拿到 ELBO:

\[J(\theta) = \sum_{x \in D_u} \left( \sum_y q(y|x) \log \frac{P(\text{Correct} \mid y, x) \pi_\theta(y|x)}{q(y|x)} + \mathrm{KL}(q(y|x) \, \| \, P(y|x, \text{Correct})) \right)\]

去掉非负的 KL 项,就拿到一个可以优化的下界 \(\mathcal{L}(q, \theta)\)。等号成立当且仅当 \(q\) 等于真实后验。

E 步:固定 \(\theta\),找最优的 \(q^*(y|x) = P(y|x, \text{Correct})\)。这一步本身做不到(我们没有 \(P(\text{Correct})\)),所以训练一个 critic \(V_\phi(x, y_t)\) 去近似——MSE loss 拟合 0/1 正确性指示函数。critic 的最后一个 token 的输出就是对整个 response 是否正确的估计:

\[q(y|x) \propto V_\phi(x, y_T) \pi_{\theta_0}(y|x)\]

M 步:固定 \(q\),最大化下界。代入上面的近似,policy 更新规则化简为一个加权 MLE:

\[\theta_{\text{new}} = \arg\max_\theta \sum_{x \in D_u} \sum_y V_\phi(x, y_T) \log \pi_\theta(y|x)\]

这一项用 policy gradient 实现就行。critic 的 last-token value 当作整段 response 的 reward \(R = V_\phi(x, y)\),中间各 token 的 value 当作 baseline,advantage 取差:

\[A_t = R - V_\phi(x, y_{1:t})\]

policy loss 是标准的:

\[\mathcal{L}_{\text{policy}}(\theta) = -\mathbb{E}_{x \in D_u, y \sim \pi_\theta}\left[\sum_{t=1}^T A_t \log \pi_\theta(y_t \mid x, y_{\lt t})\right]\]

整个流程就是:先用 RLVR 在 \(D_L\) 上同时初始化 actor 和 critic,然后进入 N 轮交替——每轮先在 \(D_L\) 上用 MSE 更新 critic(E 步),再在 \(D_u\) 上用 critic 打分跑 PPO 风格的更新(M 步)。

图2:TEMPO 的整体架构。左半边 E-step,critic 用带标签数据集 D_L 周期性校准;右半边 M-step,actor 在无标签测试集 D_u 上生成 reasoning trajectory,用 critic 给的 quality-aware score 做 reward 来更新 policy。两步交替形成一个完整的 EM 闭环。

图2:TEMPO 的双循环架构。E-step 锚定真实正确性,M-step 在测试题上自我精进。

它聪明在哪

我看完方法这章最有感觉的一点:TEMPO 没有发明新东西。critic 是 PPO 时代就有的,actor-critic 的解耦也是 RL 的老配方。它的高明处在于把一个老配方放到新场景里,并且给出了一个非常自然的 EM 解释——这个解释顺手把 TTRL/EMPO 全部归类为"只做 M 步的 degenerate variant",这是论述上的杀招。

更细一点看:TTRL 的多数投票伪标签等价于把 \(q(y|x)\) 强行做成 \(\mathbf{1}(y \in \mathcal{Y}_{\text{majority}}) \cdot \pi_{\theta_0}(y|x)\) 的二值指示——一个完全由当前 policy 自己定义的 \(q\)。当 policy 偏向某种模式,majority 集合就更偏,\(q\) 就更偏,KL 项越拉越大,ELBO 越来越松。模型自我陶醉。

TEMPO 的 critic 给出的是连续的 quality score,并且通过 E 步定期"喝一口外部水",避免和 policy 一起漂。这就是它能持续涨的根本原因。


实验:数据真的挺能打

实验设定先说一下。math 这块用 OLMO3-7B、Qwen3-8B、Qwen3-14B 三个 base model,先用 PPO 在 DAPO-Math-17K 上做 zero-RL 初始化,然后在 AIME 2024/2025 + Beyond AIME 上跑 TTT,留 AIME 2026 和 OlymMath 作为 holdout。基本配置:batch size 256、mini-batch 64(14B 是 128/32,吃不下显存),最大 response 16K,dual-clip 用 \(3 \times 10^{-4}\)\(5 \times 10^{-4}\)(参考 GSPO)。指标是 avg@16 和 pass@8。

数学推理主表

直接看主结果。下面是 OLMO3-7B 和 Qwen3-14B 上的数(单位:%):

方法 Beyond AIME Acc Beyond AIME Pass@K AIME 24 Acc AIME 24 Pass@K AIME 25 Acc AIME 25 Pass@K AIME 26 Acc OlymMath Acc
OLMO3-7B Zero-RL (PPO) 17.6 38.8 33.0 56.1 26.3 41.1 26.7 18.9
↪ TTRL 21.8 22.3 40.8 45.6 27.1 30.7 22.8 18.9
↪ EMPO 21.3 28.4 41.6 43.3 26.7 29.5 23.6 18.7
TEMPO 24.5 44.0 51.1 61.6 37.0 52.5 30.1 23.5
提升 vs Zero-RL +6.9 +5.2 +18.1 +5.5 +10.7 +11.4 +3.4 +4.6
Qwen3-14B Zero-RL (PPO) 24.9 50.0 42.3 69.1 37.1 59.0 38.1 24.2
↪ TTRL 25.5 29.4 53.1 56.7 40.8 45.8 31.7 18.3
↪ EMPO 27.6 31.4 55.6 59.7 44.6 46.7 28.3 17.7
TEMPO 29.3 46.3 65.8 73.3 44.6 60.0 38.8 25.8
提升 vs Zero-RL +4.4 -3.7 +23.5 +4.2 +7.5 +1.0 +0.7 +1.6

几个值得停下来盯一下的数:

  1. Qwen3-14B 在 AIME 24 上从 42.3 涨到 65.8——23.5 个点。在 14B 这个量级、AIME 这种已经很难刷的榜上,这是一个非常重的数。
  2. TTRL/EMPO 几乎全面在 pass@K 上输给 Zero-RL baseline。Qwen3-14B 上 TTRL 的 AIME 24 pass@K 从 baseline 的 69.1 掉到 56.7,整整掉了 12 个点。这就是 diversity collapse 的"硬证据":avg 涨了,但模型只会用一种解法解题,多采样基本没用。
  3. TEMPO 在 AIME 24 pass@K 上反而涨到 73.3,比 baseline 高 4 个点。avg 涨同时 pass@K 也涨——这个组合说明它不只是把模型往一个 mode 上压,而是真的让模型学会更多有效解法。

多样性的细节

论文专门拎了一个 RQ2 出来谈 diversity,配了 Figure 3:

图3:TEMPO 在 Beyond AIME 上的 pass@16 曲线。蓝色 TTRL 一路下滑,橙色 TEMPO 平稳上升。这张图把 diversity collapse 这个故事讲得最直白。

图3:Beyond AIME 上 pass@16 的训练曲线对比。TTRL 持续掉,TEMPO 持续涨——一句话讲清楚两种方法的"长期健康度"差别。

为什么会这样?论文给的解释我觉得很到位:TTRL 和 EMPO 的奖励来自 consensus 或 entropy,结构上就鼓励模型 collapse 到一个 mode。而 TEMPO 的 critic 给的是连续的 quality score,能区分"两个都对、风格不同"的两个 response,所以高质量的多样性被保留下来。

这个 insight 其实可以反过来用来思考 RLHF:如果你的 reward model 只能给二值打分,你的 policy 大概率会越训越同质化;想保 diversity,reward model 必须有足够细的颗粒度。这一点跟最近 DeepSeek、字节几条工业线观察到的现象是吻合的——很多团队发现 RLHF 跑久了之后模型会越来越"中庸",不敢给反差大的回答,根因之一就是 reward model 自己粒度不够,policy 顺着它去 collapse 到"安全均值"那一片。

我自己更喜欢的一个隐含结论是:self-rewarding 不是不能做,是不能只用模型自己产的离散信号做。只要你的伪标签是"投票/熵/最大概率"这种类离散信号,drift 就是宿命。要做就老老实实训一个连续的 critic。

没饱和

Figure 4 直接告诉你 main table 的数其实还没到顶:

图4:Qwen3-14B 在 AIME 2024 和 AIME 2025 上的训练曲线。224 步那个点就是 main table 报告的数,可以看到曲线还在往上走,没有平台期的迹象。

图4:Qwen3-14B 训练 224 步时报告的数仍未饱和——给更多算力还能继续涨。

这个图我个人觉得有点"宣发"的味道——你既然没跑到饱和就停了,那论文里的提升其实不是上限,但也不是它说的"再投算力就能继续涨"那么直接。曲线上翘和真的不饱和不是一回事,这点我留个保留意见。

跨域:不只是数学

RQ3 是把 TEMPO 拉出数学这个舒适区,看它对 BBH、AGI Eval、ZebraLogic、GPQA-Diamond 这些通用推理 benchmark 是否有效。判官换成 gpt-oss-120b。结果:

方法 BBH (Avg@1) AGI (Avg@1) Zebra (Avg@1) GPQA-D (Avg@8) GPQA-D (Pass@8)
OLMO3-7B Zero-RL 46.8 37.9 22.2 21.9 62.1
↪ TTRL 45.4 38.2 22.2 28.5 67.6
↪ EMPO 52.9 50.2 23.5 27.7 61.6
TEMPO 68.2 62.4 35.1 32.4 69.4
提升 vs Zero-RL +21.4 +24.5 +12.9 +10.5 +7.3
Qwen3-8B Zero-RL 69.9 65.7 25.7 32.2 62.4
↪ TEMPO 74.2 70.1 33.9 37.2 65.3
提升 +4.3 +4.4 +8.2 +5.0 +2.9

OLMO3-7B 的 +21.4 / +24.5 这种涨幅在 BBH 和 AGI Eval 这种综合 benchmark 上是相当夸张的。但要注意 OLMO3 的起点比较低——Qwen3-8B 起点高很多,提升幅度就温和得多。这其实也合理:你能从一个还没充分训练的 base 上挖出更多,但当 base 已经接近极限的时候,TTT 也只能挤一点。

消融:critic 必须被周期性校准

论文的两个消融实验非常关键,分别对应"为什么需要 TTT"和"为什么 critic 必须周期性更新"。

图5:左图。从一个已经在 DAPO-Math-17K 上跑过 192 步 PPO 的 OLMO3 收敛点出发,蓝色继续在同一个 labeled 数据上做 supervised PPO,橙色用 TEMPO 在无标签新题上做 TTT。supervised PPO 立刻饱和,TEMPO 持续涨 15+ 个点。说明:模型已经吃透了训练分布以后,给它喂新的(无标签)题才是真正的增长来源。

图5:supervised PPO(蓝)vs TEMPO(橙)的对比。同一个起点出发,喂"训过的题"涨不动,喂"新题"还能涨 15+。说明真正的增量来自新数据本身。

这张图非常重要——它直接回答了"TTT 到底是工程把戏还是真的有意义"这个问题。TEMPO 的提升不是来自训得更久,而是来自接触到新分布。

图6:右图。橙色是完整 TEMPO,蓝色是冻结 critic(只训一次,之后不更新)的变体。前 100 步两条几乎重合,但之后冻结 critic 那条就开始平台,TEMPO 继续涨。证明 E-step 的周期性校准不是装饰品,是必要条件。

图6:冻结 critic(蓝)vs 完整 TEMPO(橙)。冻结 critic 100 步后就跟不上 evolving policy,必须周期性回到 D_L 重新校准。

这个消融才是 TEMPO 整篇论文最硬核的论据。它说明:

  • 冻结 critic = 在做 incomplete EM——前期能跟上是因为 critic 初始还匹配 policy,但 policy 在演化、critic 不演化,scoring 就会越来越失真。
  • 必须 E-M 交替才能让 ELBO 始终是个 tight bound,否则就退化成 TTRL/EMPO 那一套。

这一组消融把 TEMPO 的核心论证闭环了:critic 必须被周期性校准,因为只有这样才能让 ELBO 不松。


我的判断

亮点

第一,把零散的 TTT 方法装进了一个统一的 EM 框架。这件事的价值不只是"加了个 critic",而是它把 TTRL/EMPO/Intuitor 等等一票方法的失败原因诊断出来——你不是 trick 不够好,你是只做了 M 步。这是论述上的胜利,也是后续工作的方向标。

第二,pass@k 和 avg@k 同步上升。这是我最在意的点。在 RLHF/RLVR 后训练时代,能同时涨 avg 和 pass 的方法不多——大部分都是用 diversity 换 average。TEMPO 用一个 quality-aware 的连续 critic 把这个 trade-off 化解了。

第三,工程上很可落地。需要的就是一个能 RLVR 训出来的 value model,两边交替跑 PPO 流程。如果你已经在做 RLVR,加一层 TEMPO 几乎是 free lunch(除了 GPU 内存翻倍)。

我的几个疑问

第一,\(D_L\) 的依赖性没解决。论文自己也承认了——critic 必须在带标签的数据上重新校准。所谓的"test-time training"其实并不是真正的 zero-supervision,更准确的描述是"训练时用过的小数据集 + 测试时的新题"的混合。如果 \(D_L\) 和 test 分布偏离很大,critic 的 scoring 还能不能用,论文没回答。

第二,"TTT 还在涨"这种说法要谨慎。Figure 4 的曲线确实没平,但这是 224 步的局部观察,不能直接外推。我希望看到的是跑到 1000+ 步的曲线,而不是"曲线还在涨所以再涨更多"的论证。

第三,2 倍显存开销是个不小的代价。actor + critic 都要 14B,对单卡用户基本不友好。论文也只在 8B 和 14B 这个量级验证,更大的 32B/72B 模型上是不是同样有效,是个 open question。

第四,跟 Process Reward Model 的关系没讲清楚。token-level value 估计在思路上其实就是 PRM 的近亲。TEMPO 的 critic 用的 advantage \(A_t = R - V_\phi(x, y_{1:t})\) 在算法上和经典 PPO 差不多——它的"创新"严格来说是把 critic 训练这件事拎到了 E 步、并且周期性回到 \(D_L\)。这个解耦的视角很漂亮,但底层的算子其实不新。这不是黑它,只是想说:这是一篇视角和工程胜过算法的论文,没必要把它当成新算法的突破来读。

工程启发

我能想到几个直接的迁移方向:

  1. Coding Agent 的 TTT:如果你在做代码生成 agent,新仓库其实就是一个测试时的"未标注分布"。TEMPO 的两段式可以直接搬——E 步在已标注的 unit test 上校准 critic,M 步在新仓库的真实任务上 self-play。这种场景下 critic 的设计可以更激进,比如直接用单元测试通过率作为 ground truth signal。
  2. RLHF 的 reward model 防漂移:这其实是 TEMPO 给 RLHF 的间接启示。你的 reward model 一旦训完冻结,policy 越跑就越容易和它脱钩——这就是 reward hacking 的根源之一。如果在 RLHF 里也定期回到一小撮人类偏好数据上重训 reward model,理论上能缓解 hacking。这个套路其实和 anthropic 的 Constitutional AI 里 RLAIF 反复迭代 critic 的思路是同一个味道。
  3. 少样本场景的 self-play:当你只有几百条带标签数据但有几万条无标签数据时,TEMPO 的 1:N 配比(每若干 M 步插一次 E 步)应该是比纯 SFT 更好的 utilization 方式。这块我个人最感兴趣——很多垂直行业(医疗、法律、金融)的高质量标注数据极度稀缺但场景文本很多,TEMPO 这类方法可能是个真实的解。
  4. agentic 任务的长期演化:TEMPO 自己在 conclusion 里也提到要往 agentic 任务延展。Agent 任务里 reward 通常稀疏且滞后,更容易出现 reward drift。引入一个周期性回到"已知好行为示范"上校准的 critic,可能是稳住长程 agent 训练的一个干净方案。

行业判断

往大了讲,我觉得 self-rewarding/test-time training 这条线还会继续热。原因很现实——大模型的训练数据质量越来越接近天花板,但是测试时数据是源源不断的。谁能把"用未标注新数据持续提升"这件事做到稳健,谁就拿到了一个 scaling 法则的延长线。

TEMPO 不是终点,但它把"自我强化的飞轮一定会塌"这个旧故事写到了头——之后的工作必须正面回答 critic drift 这个问题。从这个意义上,它是一篇方向标式的论文。


如果你也在做 reasoning model 的后训练或者 self-improvement 相关方向,这篇值得花一个下午的时间精读。它的代码已经放出来了(github.com/QingyangZhang/TEMPO),最适合的实验是把你手头那个 stuck 在 plateau 的 self-rewarding 方法替换上 TEMPO 的 EM 闭环,看看曲线能不能再爬一截。

跑出来的话,欢迎跟我对一下数。

觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我