30B 小模型拿 IMO 金牌:SU-01 把"会做题"和"会证明"拆开来打

核心摘要

一个 30B 激活 3B 的 MoE 模型,只用 33.8 万条 8K 以内的 SFT 轨迹加 200 步 RL,就在 IMO 2025 拿到 35 分压线金牌,在 USAMO 2026 拿到 35 分,并列 340 名参赛者中的人类最高分。物理那边 IPhO 2024/2025 也都过了金牌线。这篇 77 页的技术报告把一个已经会做题的推理模型(P1-30B-A3B),按"重塑行为—放大能力—证明级精修—推理时自检"四步流水线,硬生生掰成了奥赛证明者。我觉得最值钱的不是金牌这个结果,而是它把"模型能给出正确答案"和"模型能给出可审计的严密证明"彻底拆成两个独立的训练目标——这件事大部分团队还在混着做。


论文信息

  • 标题:Achieving Gold-Medal-Level Olympiad Reasoning via Simple and Unified Scaling
  • arXiv2605.13301
  • 机构:上海人工智能实验室、清华、北大等多家单位联合(Yu Qiao、Bowen Zhou、Zhouchen Lin、Yu Cheng 等 28 位作者)
  • 基座:P1-30B-A3B(30B 总参数,3B 激活的 MoE)
  • 新模型:SU-01

先说一个让我愣了一下的现象

做过 SFT 的人应该都见过这个尴尬场景:你拿一个已经挺能打的后训练模型,喂它一批高质量长推理数据,结果训完发现——模型在简单题上反而退步了

这篇报告把这个现象量化得很清楚。P1-30B-A3B 这个基座,AnswerBench 上原本 69.2 分。SFT 训完,掉到 59.8。

掉了 9.4 个点。

但你看 ProofBench-Basic:从 33.8 直接跳到 57.6,涨了 23.8 个点。

这事很有意思。它说明 SFT 阶段不是没在学,而是模型的行为重心被换掉了——从"快速给答案"变成"啰嗦地推理、自我检查、找漏洞"。两个能力本来就不是同一个东西,硬要在同一个评测上比较,反而看不清训练到底在干什么。

我之前自己做长 CoT SFT 的时候就吃过这亏:盯着主榜单分数看,越训越焦虑,以为方法不 work,差点把整个 pipeline 推翻重做。其实换个评测维度就明白了,模型只是在换技能树。

这篇论文最有价值的设计哲学就藏在这里:先认清"答题"和"证明"是两件事,再分阶段去喂不同的训练信号。下面我把这个 pipeline 拆开讲。


整体 pipeline:四级火箭

SU-01 训练与推理流水线总览

图 1:SU-01 的四阶段流水线。SFT 装行为,Coarse RL 放大正确率,Refined RL 打磨证明严谨性,TTS 在推理时跑自验证—精修循环。每一阶段的目标都不一样,叠加起来才是金牌选手。

四个阶段分别是:

  1. SFT:逆困惑度课程,把基座的推理风格重塑为"长程、自我检查、可修正"
  2. Coarse RL:用可验证奖励 RLVR 拉升答题正确率
  3. Refined RL:用生成式证明奖励,把训练目标从"答对"切到"证对"
  4. TTS:推理时的解题—验证—精修循环,把单次生成不可能完成的证明搜索拆成多轮

每个阶段我挑最有判断力的点来聊。


SFT:为什么"先难后易"反而 work

SFT 阶段用了 33.8 万条长推理轨迹,控制在 8K token 以内,来源横跨 Evan Chen 的奥赛资料、AoPS、数之美论坛、训练书、DeepMath、NaturalReasoning 等。除了直接解题轨迹,还专门用 DeepSeek-V3.2-Speciale 生成了自验证自精修两类轨迹——这是为后面 RL 和 TTS 阶段埋的伏笔,让模型先见过"检查自己证明"和"根据 bug 报告重写"这种行为。

数据准备这块没啥意外,真正反直觉的是数据排序

作者管这个叫 reverse-perplexity curriculum:用初始策略 \(\pi_0\) 对每条样本算一遍长度归一化的困惑度:

\[\mathrm{PPL}(x_i, y_i) = \exp\left(-\frac{1}{T_i} \sum_{t=1}^{T_i} \log \pi_0(y_{i,t} \mid x_i, y_{i,\lt t})\right)\]

然后降序排列——每个 epoch 都从模型最不熟悉的样本开始,逐步过渡到最熟悉的样本。

直观感觉:先教难的、不像的,再让模型在熟悉的样本上"巩固"。

我第一反应是有点怀疑。传统课程学习不都是先易后难吗?这个反过来真能 work?

看消融数据:

SFT 数据排序对验证集的影响

图 2:不同 SFT 数据排序对 AnswerBench 和 AMO-Bench 的恢复程度。降序 PPL(先难后易)显著优于随机和升序,截断率也最低。

排序策略 AnswerBench AMO-Bench 截断率
基座 P1-30B 69.3 41.3 极低
随机 39.5 31.0 7.3 / 8.0
升序 PPL(先易后难) 24.3 15.0
降序 PPL(先难后易) 55.8 40.0 0.3 / 0.0

差距相当夸张。升序课程是最差的,AnswerBench 直接砍到 24.3,几乎把基座废了。降序课程则稳稳地恢复到 55.8,几乎不截断。

为什么会这样?我自己揣摩了一下:后训练模型不是空白板,它本来就有一套"答题策略"。如果你先喂它熟悉的样本,它会用旧策略硬拟合,新行为根本进不去;等你后面塞难样本,模型已经稳定在旧模式上,调不动了。反过来,先用高 PPL 的不熟悉样本去强制行为切换,再用低 PPL 样本去巩固和恢复原有能力,这套节奏才对得上。

截断率这个指标也挺巧妙的,它实际上是 SFT 是否充分的代理信号:如果模型还没适应新的严谨推理风格,输出经常陷在浅层启发式循环里、不停重复中间结论、没法收尾——这种输出最容易撞到 max length 截断。作者把"截断率低于 5%"当作 SFT 收敛的硬指标,这在工程上比单纯看 loss 更靠谱。


Coarse RL:先把答题能力拉回来

SFT 完模型在答题榜上掉了 9.4 个点,这没法直接上线。Coarse RL 阶段的任务就是把这个分捞回来,顺带放大 SFT 引入的严谨推理行为。

技术栈是 GSPO(Group Sequence Policy Optimization),不是 token 级别的 GRPO。区别是 GSPO 把策略 clip 和优势计算都搬到完整响应级别:

\[s_i(\theta) = \exp\left\{\frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \log \frac{\pi_\theta(o_{i,t} \mid q, o_{i,\lt t})}{\pi_{\theta_\mathrm{old}}(o_{i,t} \mid q, o_{i,\lt t})}\right\}\]

为什么要做这个切换?说实话,token 级 GRPO 在长序列上一直有个尴尬:一个 100K token 的证明,奖励只有最后一位(答对 / 答错),但你的 ratio 在 token 维度上累乘,方差炸到没法看。GSPO 把整个序列当成一个动作单元,匹配二值奖励的粒度,方差稳很多。这是 DeepSeek 那边后来也认了的工程经验。

奖励系统是分层设计的:

  1. 先做规范化文本匹配(canonicalized text matching)
  2. 不行就交给 Math-Verify 做符号比对
  3. 还不行才请 gpt-oss-120b 出场做生成式判断

这个顺序设计很务实——便宜的规则匹配能扛掉大部分情况,只有真的难判的才花钱调大模型。我之前做类似系统的时候,习惯上来就用 LLM judge,看了这个设计才意识到自己有点偷懒:很多 case 其实规则就能搞定,judge 噪声还会污染奖励信号。

Coarse RL 跑下来效果很硬核:AnswerBench 从 SFT 后的 59.8 直接拉到 77.2,ProofBench-Basic 也跟着涨到 76.7。模型答题能力不仅追回来了,还把 SFT 装的严谨推理放大了。


Refined RL:从"答对"切到"证对"

这是整篇报告我觉得最有判断力的一步。

Coarse RL 完了,答题分已经很能打了,但作者明确说奥赛要的不是答案对,是证明对。一个证明可能结论对、但中间跳了步、漏了 case、有未证明的引理——这种东西在 IMO 上是直接零分的。

所以 Refined RL 把奖励信号从"答案对不对"换成"证明完不完整、严不严密"。具体三件事:

生成式证明奖励

用 DeepSeekMath-V2 当 reward model,让它读完整道题加完整解答,然后输出二值分数 \(r_\mathrm{proof}(q, o) \in \{0, 1\}\)。判断标准不是答案匹配,而是推理链是否数学有效、足够严谨、case 完整。

这里有个工程细节我觉得很重要:作者特意做了 anti-hack 预处理——如果生成的 response 里出现 chat template 标记泄漏、thinking delimiter 不匹配、严重重复,直接替换成 safe fallback。这是因为生成式奖励特别容易被 format 漏洞利用,模型会学着"用奇怪的格式骗 reward model 给高分"而不是真把证明写好。

自精修(self-refinement)

每轮 rollout 后,按 query 分组。如果某个 query 组平均奖励低于 \(\tau_\mathrm{ref} = 0.5\),把组里的失败 response 转成 refinement prompt——把原题、上一版错误证明、批改指令一起塞回去。这些 prompt 进 buffer,按比例 \(\eta_\mathrm{ref} = 0.2\) 混进后续 batch。

这件事的本质是把 TTS 阶段的核心行为提前到训练里来:模型在训练时就反复学习"看到自己写错的证明—批评—修复",等到推理时跑 TTS 循环,行为分布就匹配上了。

这里有个细节我觉得挺关键:作者不会递归地把失败的 refinement 再塞回 buffer。理由很直接:如果某道题反复修都修不好,说明已经在当前策略可学范围之外了,硬塞进去只是浪费算力。

经验回放

这块借鉴 ExGRPO 但做了简化。逻辑很朴素:难题上偶尔会撞出一条正确轨迹,立刻丢掉就太亏了。所以维护一个 replay buffer,按 query 索引,准入条件是 \(0 \lt n_+(q) \lt 2\)——也就是"难但偶尔能解"。

回放比例 \(\rho = 0.25\),存的是同一 query 里熵最低(最稳定)的成功轨迹。一旦当前策略在 \(n_+(q) \geq 4\) 次都能解出来,就把这条轨迹退役——它不再是稀缺信号了。

整个 refined RL 目标长这样:

\[\mathcal{J}_\mathrm{refined}(\theta) = (1-\rho)\,\mathbb{E}_{\mathcal{B}_\mathrm{fresh}}[\mathcal{J}_\mathrm{GSPO}] + \rho\,\mathbb{E}_{\mathcal{B}_\mathrm{exp}}[\mathcal{J}_\mathrm{GSPO}]\]

读这段我有个判断:这套设计的颗粒度比大部分公开方案细很多。每个机制都有明确的"在什么时候触发、用什么样本、保留多久、什么时候退出"——不是堆 trick,是把各机制的边界划得很清楚。

还有一个工程细节我想多说一句:MoE 路由冻结。Refined RL 阶段,作者明确说要冻住 MoE router,让 replay 轨迹在固定的 expert routing 下被评估。这个动作看起来不起眼,但实际很关键——MoE 模型在 RL 阶段最难搞的就是 router 跟着策略一起漂移,导致 replay buffer 里存的轨迹"过期"得特别快,因为同样的 input 现在可能被路由到完全不同的 expert 组合,重要性比 \(s_i(\theta)\) 算出来全是异常值。冻 router 是 GSPO 原论文就提的一个动作,他们这里直接拿来用,省了一堆麻烦。

效果上,Refined RL 让 ProofBench-Advanced 从 25.2 提升到 38.1,涨了 12.9 个点;AnswerBench 几乎没动。这个数据非常符合预期:refined 阶段就是冲着"证明级别"去的,难证明上的进步明显,简单答题上没必要再涨。


TTS:让模型在推理时把"会做"变成"做对"

训练完了,模型已经会做证明了,为什么还要 TTS?

答案是:一道 IMO 题的完整证明可能需要 10 万 token 以上的搜索、检验、重写。一次性生成一条 100K token 的完美证明,对任何模型都不现实。

TTS 把推理拆成四个动作:

  1. Initial solution:在严格证明导向的 prompt 下生成初始解
  2. Refinement:审视初稿,修补薄弱步骤
  3. Verification:用验证 prompt 输出结构化 bug 报告(critical errors / unjustified claims / missing cases)
  4. Verdict:根据 bug 报告决定 accept / reject / 再修一轮

循环直到通过验证或预算耗尽。多次独立运行可以串行可以并行,最终被接受的解必须连续多次通过验证。

我觉得最值得看的是各动作的长度分布:

TTS 各动作的生成长度分布

图 3:USAMO 2026 上 TTS 各动作的 token 长度分布(log 尺度)。Initial 中位数 106K,Refinement 中位数 83K,Verification 28.7K,Verdict 只有 404。模型能在 100K+ 的上下文里保持连贯推理。

四个数字摆在一起:

  • Initial solution:中位 106K token(广搜证明路径)
  • Refinement:中位 83K token(在已有解和 bug 报告基础上重写)
  • Verification:中位 28.7K token(审计完整证明)
  • Verdict:中位 404 token(轻量决策)

让我停一下消化这个数字。

10 万 token 的初解、8 万 token 的精修——这个意思是模型能在已经填满 10 万 token 的上下文之上,再跑 8 万 token 的连贯重写。这件事不是简单堆 max length 就能做到的,前面整个训练 pipeline 都在为这种"长程条件式推理"做铺垫:SFT 装入"先解—再查—再修"行为,refined RL 直接训这个行为,TTS 在推理时把它放大。

这也解释了为什么作者在 SFT 数据里就专门塞了 self-verify / self-refine 轨迹,在 refined RL 里又专门做 self-refinement——训练时让模型见过这种"长上下文 + 条件式生成"的样本,推理时它才接得住。


结果:金牌到底是真的金牌吗?

先看证明级评测 ProofBench:

IMO-ProofBench 上的横向对比

图 4:IMO-ProofBench Overall 分数排序。SU-01 直接生成 57.6 分超过同量级所有模型,开 TTS 后升到 70.2 分,逼近 Gemini 3.1 Pro Thinking 的 72.6。蓝色高亮是 SU-01 各阶段。

这张图非常说明问题。同量级里:

  • P1-30B-A3B(基座):20.0
  • Qwen3.6-35B-A3B:23.1
  • Gemma-4-31B:31.4
  • GLM-4.7-Flash:33.8
  • Nemotron-Cascade-2:52.9
  • SU-01 直接生成:57.6
  • SU-01 + TTS:70.2

同量级最强基线 Nemotron-Cascade-2 是 52.9,SU-01 直接拉到 57.6,开 TTS 之后 70.2,已经追上闭源大模型 Gemini 2.5-DeepThink。

再看分阶段提升:

训练各阶段在 AnswerBench 和 ProofBench 上的进展

图 5:从 P1-30B 到 SFT 到 Coarse RL 到 SU-01 再到 TTS,三个评测维度的演进。注意 AnswerBench(浅蓝)在 SFT 后掉了 9 个点又被 RL 拉回,ProofBench-Basic(深蓝)和 ProofBench-Advanced(深蓝三角)则一路涨。

这张图很清楚地展示了我开头说的那个分裂:答题分和证明分根本就不是同一条曲线。SFT 让答题分掉、证明分涨;Coarse RL 让两者一起涨;Refined RL 只显著拉证明分;TTS 进一步只拉证明分。每一阶段的"功能定位"在数据上看得清清楚楚。

最劲爆的还是奥赛实际题目:

题号 IMO 2025 直接 IMO 2025 + TTS USAMO 2026 直接 USAMO 2026 + TTS
P1 1 7 7 7
P2 7 7 0 0
P3 1 7 0 7
P4 6 7 7 7
P5 6 7 0 7
P6 0 0 1 7
Total 21 35 15 35

IMO 2025 金牌线 35 分,SU-01 + TTS 压线达到。USAMO 2026 金牌线 25 分,SU-01 + TTS 拿到 35 分,超出 10 分——这个分数匹配该届人类最高分。340 名参赛者,中位数才 6 分,前 12 名分数线 26 分,最高 35。

物理那边:

模型 IPhO 2024 IPhO 2025
Gemini 3.1 Pro 25.9 25.1
GPT-5.5-High 25.8 23.2
Qwen3.6-35B 24.3 19.9
SU-01 直接 23.5 20.3
SU-01 + TTS 25.3 21.7
金牌线 20.8 19.7

直接生成就过金牌线,TTS 后超出同量级所有模型,逼近 Gemini 3.1 Pro。

附录里作者还附了几道题的完整证明和专家评审意见。我翻了几个 case,最有意思的是 USAMO 2026 P3——这题标准解法是合成几何,加辅助线、角度追踪那一套。模型完全走了另一条路:把单位圆、等边三角形旋转、弦关系、切线条件全部塞进复数里,统一用一个代数框架处理。专家给的评语是 ingenious analytic reformulation。这种行为不是死记硬背能装出来的,是真的在题目结构上做了选择。

另一个反向的例子是 IMO 2025 P6,TTS 跑完还是没解出来。失败模式是列置换归约无效——模型识别到这题需要保某种组合结构,但选了一种破坏不变量的归约方式。这类失败说明模型在"识别问题应该用哪个工具"上还有盲点,特别是问题核心在于精细地保持某个全局不变量时。


跨域泛化:训数学物理,化学能跟着涨

这个发现我觉得挺有意思。RL 阶段只用了数学和物理的奖励信号,但 FrontierScience-Olympiad 上:

  • 化学:69.4%(同量级第二,仅次于 Qwen3.6 的 74.4%)
  • 生物:25.0%
  • 整体:61.5%

FrontierScience-Research(更难的研究级问题)上 SU-01 拿到同量级最佳的 11.7%,物理、化学都领先,生物排第二。

作者把这个现象称为 specializable-generalist:用窄域信号特化训练,但能力没有崩塌成"只会奥赛题",反而能往未见过的科学推理任务迁移。

我对这个解释半信半疑。一方面,自验证 / 自精修这类元行为本来就跨域通用,训练时往里灌确实可能跨域受益。另一方面,化学和生物题目里到底有多少其实是"伪装成化学的数学题",论文没拆得很细。这点保留意见。

还有一个潜在解释:基座 P1-30B-A3B 本来就是一个广覆盖的科学推理模型,SFT 阶段虽然以数学为主,但作者特意混入了 NaturalReasoning 的科学题目、Nemotron 的指令跟随、Eurus / OpenCodeReasoning-2 的代码数据。这套混合配方很可能就是为了避免在数学上特化时把其他领域能力打爆。所谓 specializable-generalist,更像是"在多样化数据上做了 SFT 行为重塑、再用窄域 RL 信号细调"的产物,而不是"窄域 RL 自动泛化"。这个区分对复刻很重要——如果你只盯着 RL 信号去复刻,跨域泛化大概率出不来。


成本对比:SU-01 真的"简单"吗

作者特意花了一节聊训练成本。直接搬数据:

  • SU-01:338K SFT 轨迹(< 8K token)+ 4 epoch + 25K RL prompt + 200 步 RL
  • DeepSeek-V3.2:1000 步 indexer 预热(2.1B token)+ 15000 步稀疏训练(943.7B token)+ 数千步 continued RL
  • Nemotron-Cascade-2(同量级 30B-A3B):约 2660 万 SFT 样本,256K token 打包序列训 33K 步,后面还有 IF-RL / 多域 RL / 蒸馏 / RLHF / 长上下文 RL / CodeRL / SWE RL 一连串

数量级差距是真的。SU-01 的 SFT 样本数比 Nemotron 少了80 倍,RL 步数少了一两个数量级。

但说"简单"我还是有点保留——逆 PPL 课程、两阶段 RL、生成式奖励 + anti-hack、self-refinement buffer、experience replay、MoE 路由冻结、TTS 四动作循环……这套东西每一个组件单看都不复杂,叠起来工程复杂度其实不低。"简单"是相对的,是相对"堆几万亿 token 继续预训练"的那种简单。

如果你打算复刻,真正难的不是写代码,而是把每一阶段的指标、阈值、退出条件调对。比如 truncation rate < 5% 才算 SFT 收敛、\(0 \lt n_+ \lt 2\) 才进 replay buffer、\(\tau_\mathrm{ref} = 0.5\) 才触发自精修——这些都是踩出来的经验数。


我的判断:这篇论文真正值钱的地方

我看完最大的收获不是 35 分金牌(35 分谁拿都行,只要够卷),而是这套思路展示了一种模型能力分层训练的工程范式:

  1. 承认"答题"和"证明"是不同能力,分别用不同评测追踪、不同信号训练
  2. 承认后训练模型不是白板,SFT 要做的是行为重塑而非能力灌输,所以课程必须先冲击再巩固
  3. 承认奖励信号有不同粒度,结果奖励适合放大答题能力,过程奖励适合打磨证明严谨性,两者顺序不能反
  4. 承认有些任务训练时搞不定,推理时通过自验证—精修循环把单次生成搞不定的事情拆成多次

这个分层视角在我看来比 35 分金牌本身有价值得多。

要说问题,我能挑出几个:

  • 奖励 model 的依赖:refined RL 重度依赖 DeepSeekMath-V2 当 judge。一旦这个 judge 在某类题目上有系统偏差,整个 refined 阶段就偏了。论文里没怎么聊 judge 的失败模式。
  • TTS 的算力账:median 106K + 83K + 28.7K,再算并行多个 candidate,单道题的推理算力相当可观。论文没给具体的"每道题平均花多少 token / 多少 GPU 时",工程落地时这是必须考虑的成本。
  • 结果可复现性:USAMO P2 没解出来,IMO P6 也没解出来。问题不可重复怎么定位?是种子?是 verifier?是 reward model 偶发偏差?case study 描述了具体失败模式,但没说明这些失败是稳定的还是随机的。

不过这些都不影响核心方法论的价值。

如果你也在做推理模型的后训练,有几个点我觉得可以马上拿来用:

  • 数据排序:用初始策略的 PPL 排,先难后易。这个改动几乎零成本,效果在他们的实验里非常显著。
  • 截断率作为 SFT 收敛信号:比纯看 loss 靠谱很多。
  • 分层奖励系统:规则匹配 → 符号验证 → 大模型 judge,三层兜底。别一上来就用 LLM judge。
  • 行为提前训练:希望模型推理时做什么(自验证、自精修),训练数据里就要有对应轨迹。

最后一个判断:这类"compact 模型 + 精细 pipeline"的工作我估计今年还会出一批。frontier 模型的容量上限固然重要,但中等容量模型在精细工程下能逼近 frontier这件事更有商业价值。下一个能复刻这套方法但成本压得更低的团队,会拿到很多关注。


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