Beyond Pass@1
Paper · arXiv 2508.14029 · v4

Beyond Pass@1:让模型给自己出题,把 RLVR 的熵和 Pass@k 一起托住

固定题库上的 RLVR 会把模型逼进少数高分轨迹:Pass@1 继续涨,策略熵持续掉,Pass@k 很快封顶。 SvS 只挑准确率 12.5%–50% 的“半懂题”,用模型自己的正确解法反推出答案不变的新题, 再按变体难度给合成奖励,让同一套 GRPO 持续见到新问题。

Xiao Liang, Zhongzhi Li, Yeyun Gong, Yelong Shen, Ying Nian Wu, Zhijiang Guo, Weizhu Chen · Microsoft / UCLA / UCAS / HKUST arXiv 2508.14029v4 ↗ 代码 MasterVito/SvS ↗
TL;DR · 30 秒抓住核心

标准 RLVR 在固定题库上训练,奖励是可验证的二值信号。模型很快学会反复产出少数能拿分的轨迹:Pass@1 继续涨,策略熵却持续下降,Pass@k 在较大的 k 上不再提升(§2)。

SvS 不改 GRPO 的优化目标,改的是每轮喂什么题:从原题里挑出组准确率 12.5%–50% 的题,拿模型自己答对的解法当上下文,生成 Gv=8 个结构不同、答案不变的新题。

关键在合成奖励:如果“变体有一条解对”就给分,模型会把提示甚至答案塞进题干;SvS 改成变体准确率落在 12.5%–62.5% 才给正分,太易、太难、不可验证的变体都被压下去(Eq. 3–4)。

在 Qwen2.5-32B + DAPO-17k 上,AIME24/25 的 Pass@32 分别从 52.5/42.4 升到 70.8/65.2;代价是开放答案格式的基准会退,补 8k DeepMath 开放题后 9 项平均回到 62.8。以下增益均为绝对百分点差。

+18.3pp
AIME24 Pass@32 绝对提升
52.5 → 70.8(Qwen2.5-32B / DAPO-17k)
+22.8pp
AIME25 Pass@32 绝对提升
42.4 → 65.2(同一设定)
+5.4pp
六项竞赛基准 Pass@1 平均
22.5 → 27.9(同一设定)
01

固定题库把 RLVR 变成“背答案”:Pass@1 在涨,熵在掉,Pass@k 封顶

先建立共同认知:为什么“再多训几百步”不能解决这个问题。

RLVR 的奖励是二值的:答案对为 1,错为 0。GRPO 在一个 prompt 的 G 条回答内做组内标准化;如果一个组全对或全错,优势退化为 0,这条 prompt 就不再提供梯度。 固定题库训练越久,能提供有效梯度的组越少,模型越倾向于重复已知的高分轨迹(§2)。

论文 §2 把这个现象接到两项已有结论上。第一是熵与性能的权衡:

“...gains in test accuracy come at the expense of response diversity.” §2,论文转引 Cui et al. (2025b)

第二是 Pass@k 的边界:RLVR 只在 k 较小时提升 Pass@k,k 到几十或上千时不再有增益(§2,转引 Yue et al. 2025)。 两项合起来说明:固定题库上的 RLVR 是在收窄推理轨迹,而不是拓展推理边界。

Performance = −a · exp(Entropy + b)
§2 引用并称为 “logarithmic relationship”;原文写作 Performance = −a exp(Entropy + b)

论文先用一个对照实验确认“换题”确实有用(Figure 2):基线始终用 MATH-12k;增强组混入 36k 条 MetaMath 复述题,并在第 300 步把复述题换成另一批。 结果是增强组在训练题和测试题上的熵下降都更慢;第 300 步换题后,熵停止下降并开始回升,Pass@32 也随之抬升(Figure 2)。

但复述有两个硬伤:外部 LLM 改写可能引入语义偏差,参考答案不再可靠;复述以原题为上下文,多样性也无法保证(§2)。 所以论文把“理想的数据增强”写成三条:

“...ideal data augmentation for RLVR should be iterative, provide precise reference answers, and be aligned with the policy's capabilities.” §2
起点

Figure 1:AIME 上的 Pass@32 在约 450 步后停住

论文报告,标准 RLVR 在竞赛级 AIME 基准上的 Pass@32 与 Pass@1 大约 450 步后进入平台;SvS 则继续上升(Figure 1、§4.2)。 这不是“再训久一点”能解的:题库和信息量没有变化,模型只能把已知轨迹压得更熟。推断(依据:Figure 1 的平台与 §2 的固定题库机制)

02

已有两条路:固定数据训练、外部模型复述;前者塌熵,后者不保答案

论文要的是第三种:题目在线更新、答案可继承、难度贴合当前策略。

路线 A

固定数据上的 RLVR

每个迭代都从同一个训练集 D 采样,G 条 rollout 做组内归一化。

强项:实现简单、奖励可靠;在 Pass@1 上稳定涨。

盲区:熵持续下降;Pass@k 只在较小 k 上有增益。策略被压向少数高分轨迹,推理路径越训越窄(§2)。

路线 B

外部模型复述题

Figure 2 的做法:MATH-12k 混入 36k 条 MetaMath 复述题,第 300 步换成另一批。

强项:熵下降变慢;换题时熵回升;Pass@32 随之改善(Figure 2)。

盲区:外部 LLM 可能改错语义,参考答案不可靠;以原题为上下文,复述的多样性也有限(§2)。

Figure 2 证明“题目多样性”这个方向对,但复述不满足后两条。SvS 的出发点是:模型自己的正确解法里已经包含原题的完整信息,从它反推新题,答案天然可继承;再用当前模型的组准确率筛难度,就同时满足三条。

SvS 怎么对上三条

在线、可继承答案、贴合当前能力

  • iterative:每个训练步重新采样、重新合成,buffer 用完即清(§3.2 / Algorithm 1)。
  • precise reference answers:变体必须沿用原题答案 a,Eq. 1–2 都用 a 判分。
  • aligned with the policy:只用组准确率在 [12.5%, 50%] 的原题做种子;变体再按 [12.5%, 62.5%] 给奖励(Appendix D.1)。
03

SvS 的四步:先算组准确率,再从正确解反推出题,最后按两个难度带给信号

核心不是“生成新题”,而是“只生成当前模型半懂、且答案可继承的题”。

第一步:每题采 8 条解,先算组准确率

对每个训练题 (x, a),策略采 G=8 条回答;每条回答按抽取出的最终答案判对错。 组准确率 Acc(x) 就是这 8 条里答对的比例。全对(Acc=1)和全错(Acc=0)的组在 GRPO 里优势为 0,直接丢弃(§3.2)。

Rc(yi, a) = 1[ Extract(yi) = a ]   (Eq. 1)
Acc(x) = (1/G) Σi=1G Rc(yi, a),   G = 8
Eq. 1 与组准确率的定义;Extract(·) 从推理轨迹里抽最终答案

第二步:只从“半懂题”里取正确解

论文把 Acc(x) 落在 [12.5%, 50.0%] 的题称为 underperforming problems——既不太易、也没到完全不会。 只有这些题的正确解会被拿来当合成种子;0 正确或接近全对的题不参与(§3.2、Appendix D.1)。

第三步:正确解 → 8 个变体,答案不变

一条正确回答里包含原题的完整信息(题干、条件、求解过程),所以论文直接把它当上下文,让策略生成 Gv=8 个变体。 变体可以换结构、换叙述,但必须继续用原答案 a;这样不需要任何新标注。

“Because the variational problems are derived from correct responses to the original problems, they are expected to share the same reference answers.” §3.2

第四步:变体再解一遍,按难度给合成奖励

每个变体再采 G=8 条解,仍然用原答案 a 判分。论文先试过“只要有一条解对就给正奖励”,发现模型会把提示甚至答案直接塞进题干,把变体做成送分题(§3.2、Figure 4)。 于是改成“变体准确率落在 [12.5%, 62.5%] 才给正奖励”。

naive:Rv(x̂) = 1[ Acc(x̂, a) > 0 ]   (Eq. 3)
shaped:Rv(x̂ij) = 1[ acĉl ≤ Acc(x̂ij, a) ≤ acĉh ]   (Eq. 4)
Eq. 4 的 acĉ_l / acĉ_h 在 Appendix D.1 取 12.5% / 62.5%;Eq. 3 是论文先试过、会被“塞提示/塞答案”利用的版本
Figure 4 的三个变体

0/8:判为 failed synthesis;5/8:保留;7/8 且题干带提示:判为 “With hints, oversimple”。 Eq. 4 把后两者区分开;Eq. 3 会把 7/8 也当成正样本,模型于是学会把答案泄漏进题干。

自己动手:8 次采样下,哪些题能进合成、哪些变体能拿奖励

G=8 时组准确率只能是 k/8,共 9 个离散档。拖动两个滑块,看同一套阈值如何筛原题和变体。 默认按正文的闭区间;切到 Algorithm 1 的严格不等式,边界档会变。

原题:8 条 rollout 的对错
合成变体:8 条 rollout 的对错
判定结果
拖动滑块查看判定。
手算两组:阈值如何落在 8 条解上k 与 k̂ 的完整判定过程

常量(Appendix D.1):G=Gv=8;原题难度带 [12.5%, 50.0%];变体奖励带 [12.5%, 62.5%]。因为正确性奖励是二值,Acc = k/8。

组 A:k=3,k̂=5。Acc(x) = 3/8 = 37.5%。12.5 ≤ 37.5 ≤ 50,落在难度带(严格口径也成立),所以原题解保留,且用正确解生成 8 个变体。 变体 Acc = 5/8 = 62.5%;12.5 ≤ 62.5 ≤ 62.5,Rv=+1(正好压在带上界)。

组 B:k=4,k̂=1。Acc(x) = 4/8 = 50.0%。按正文闭区间,它是难度带的上界,仍可作为合成种子; 按 Algorithm 1 第 11 行的严格不等式 12.5 < 50 < 50 不成立,边界档被排除。 变体 Acc = 1/8 = 12.5%;Eq. 4 用 ≤,12.5 ≤ 12.5 ≤ 62.5,Rv=+1(正好压在下界)。

口径说明:本模拟只做“离散档位 + 区间判定”,不计算标准差,也不模拟 rollout 的随机采样;所有百分比都是 k/8×100。

这个模拟覆盖了什么、没覆盖什么与 §3.2 / Algorithm 1 的分支对照

覆盖:Eq. 1 的二值正确性 → Acc=k/G;§3.2 的 [acc_l, acc_h] 原题筛选;Eq. 4 的 [acĉ_l, acĉ_h] 变体奖励;G=8 的离散档位。

未覆盖:真实 rollout 的采样随机性;从正确解生成变体的语言模型过程;Eq. 6 的 GRPO 更新;变体被保留进 buffer 后对策略的影响。页面只模拟“筛题/给奖励”这两个判定,不声称还原训练动态。

原文内部的三处差异: ① §3.2 正文把难度带写成闭区间 [acc_l, acc_h];Algorithm 1 第 11 行写 acc_l < Acc < acc_h(严格)。G=8 时只影响 k=1 与 k=4 两个边界档,模拟器可切换两种口径。 ② §3.2 正文说超出奖励带的变体 “receives a negative reward”;Algorithm 1 第 21–27 行的奖励赋值在检索到的 HTML 里显示为 1.0 / 0.0。页面读数并列写出这两种说法。 ③ 正文说只保留“正负奖励混合”的合成题对;Algorithm 1 的伪代码按检索结果把全部 (yi, x̂) 加入 buffer。这一条只影响训练 buffer,页面未模拟。

04

训练配方很朴素:GRPO + Clip-Higher,三路 tuple 混进同一个 buffer

SvS 没有新优化器;它改的是每一批数据的来源与配比。

训练设定

Appendix D.1 的全部超参数

  • 算法:GRPO + Clip-Higher(ε=0.28)、Token-Level Loss、Dynamic Sampling。
  • 学习率 1e-6 常数;采样温度 1.0。
  • 每轮采样 256 道题、更新 256 道;G = Gv = 8。
  • 原题难度带 12.5%–50.0%;变体奖励带 12.5%–62.5%。
  • MATH-12k 训 300 步;32B 在 DAPO-17k 训 600 步。
  • 硬件:32 张 H100(§5.5)。

策略更新仍用 GRPO 的组内优势和 PPO 式裁剪,没有为“出题”单独加一项损失:

Ai,t = ( ri − mean{r1,…,rG} ) / std{r1,…,rG}   (Eq. 5)
Eq. 6 是标准 GRPO 目标:ratio clip(ε=0.28)+ KL 约束;SvS 把三路奖励都送进同一个组归一化(Appendix A)
三路数据

每个 step 的 buffer 由三类 tuple 混成

  • (x, yi, Rc(yi, a)) —— 原题求解;只保留 0 < Acc(x) < 1 的组。
  • (yi, x̂ij, Rv(x̂ij)) —— 正确解 → 变体;只从半懂题的正确解出发。
  • (x̂ij, ŷk, Rc(ŷk, a)) —— 解变体;用原答案 a 判分,只保留 0 < Acc < 1 的变体。

§3.2 “Full Training Data”;buffer 在每次更新后清空(Algorithm 1)。

§5.5 的算力账:32 张 H100。MATH-12k 上 Qwen-32B 的初始准确率约 80%,落在难度带的题少,合成量有限,训练时间与标准 RLVR 接近; DAPO-17k 早期大量题落在带内,合成量高,随着准确率越过上界迅速下降(Figure 9)。 论文没有报告 GPU 小时数;Figure 9 给出的是每步时间与合成题/回答数量,本页未转录曲线上的具体读数。

05

一轮训练的数据流:原题 → 半懂题 → 变体 → 三路混装 → GRPO

SvS 的全部改动都在这条流水线上;优化器本身没有动。

① 原题求解 采样 (x, a) ~ D G = 8 条解 Acc(x) = Σ R_c / G ② 筛出半懂题 0 < Acc < 1 入 buffer Acc ∈ [12.5%, 50%] 只取正确解 y_i 作种子 ③ 变分合成 正确解 y_i 作上下文 G_v = 8 个变体 参考答案仍为 a ④ 变体求解 每个变体 G = 8 条解 用原答案 a 判分 保留 0 < Acc < 1 ⑤ 合成奖励 R_v = +1 当 12.5% ≤ Acc ≤ 62.5% 否则非正 ⑥ 三路 buffer (x, y, R_c) (y, x̂, R_v) (x̂, ŷ, R_c) ⑦ GRPO 更新 Eq. 5 组内优势 Eq. 6 clip + KL buffer 清空 原题 tuple 直接进 buffer t+1:buffer 清空,重新采样
图:SvS 一轮训练的数据流,按 §3.2 与 Figure 3 重绘。实线是主路径,虚线是原题 tuple 直接进 buffer 的第二条路;方框⑤的判定见 Eq. 4。
展开逐段说明 ▸
  • ① 原题求解:从训练集采样 (x, a),每题采 G=8 条解,按 Eq. 1 算对错。
  • ② 筛出半懂题:0 < Acc(x) < 1 的组才进 buffer;其中 Acc(x) 落在 [12.5%, 50%] 的题才拿来合成。
  • ③ 变分合成:取这些题的正确解 y_i 当上下文,生成 Gv=8 个变体,参考答案沿用 a。
  • ④ 变体求解:每个变体再采 G=8 条解,仍按 a 判分;全对或全错的变体不保留。
  • ⑤ 合成奖励:变体准确率落在 [12.5%, 62.5%] 给正奖励;太易(模型把答案写进题干)和太难都被压下去。
  • ⑥ 三路 buffer:原题求解、合成题对、变体求解三类 tuple 混在一起,送入同一次 GRPO 更新。
  • ⑦ GRPO 更新:用 Eq. 5 的组内优势和 Eq. 6 的 clip + KL 目标更新;更新后清空 buffer,进入下一轮。
06

效果:Pass@32 涨得比 Pass@1 多,但难题子集和开放答案会退

先看主表,再看三个反直觉的地方:难题不涨、开放答案掉、平均分可以降。

主结果:竞赛基准上的 Pass@1 与 Pass@32

Table 1(节选):Qwen2.5-32B-Instruct;Pass@1 按每题 32 次评测平均;六项平均 = AIME24、AIME25、BAIME、Math24o、OlymE、OlymH 的均值
训练数据 / 方法 AIME24 P@1 AIME25 P@1 六项 P@1 平均 AIME24 P@32 AIME25 P@32 OlymE P@32 OlymH P@32 六项 P@32 平均
MATH-12k → RLVR22.215.816.647.436.436.216.438.6
MATH-12k → SvS30.321.722.063.655.163.624.854.6
DAPO-17k → RLVR28.830.022.552.542.447.118.344.6
DAPO-17k → SvS39.340.527.970.865.243.416.753.1

消融:不是“多训”,也不是“多采样”

Table 3:Qwen2.5-32B-Instruct / DAPO-17k;checkpoint 按 AIME24+25 平均分选
策略做法Pass@1 平均Pass@32 平均
RLVR固定 DAPO-17k22.544.6
Ext延长训练到见到与 SvS 同样多的题解对24.646.3
Eup对弱题再加一轮 rollout21.750.9
SvS-Asp增强更简单的题(37.5%–75.0%)22.842.8
Full SvS半懂题 + 正确解反推 + 难度带奖励27.953.1

反直觉:9 项平均可以降,开放答案基准退得更多

Table 2(节选):Pass@1;“平均”为表中 9 项主流基准的均值;M12k / D17k / D25k = MATH-12k / DAPO-17k / DAPO-17k + 8k DeepMath 开放题
模型 / 数据 GSM8K MATH-500 GaoKao23 AIME24 AIME25 9 项平均
3B RLVR / M12k86.467.457.76.73.437.9
3B SvS / M12k88.970.861.610.57.840.8
8B RLVR / M12k90.257.447.88.11.234.2
8B SvS / M12k90.362.254.88.51.835.9
32B RLVR / M12k95.886.474.526.723.354.8
32B SvS / M12k96.187.278.730.026.757.3
32B RLVR / D17k95.687.078.733.336.758.6
32B SvS / D17k95.975.662.953.343.357.9
32B SvS / D25k95.288.679.250.040.062.8

泛化:通用任务没有明显塌

Table 4(Appendix E.3):Qwen2.5-32B-Instruct / DAPO-17k,9 个通用任务的平均值
初始化RLVRSvS
9 任务平均72.9973.77

Table 4 的 9 项平均:初始化 73.35、RLVR 72.99、SvS 73.77;SvS 比 RLVR 高 0.78。具体到单项,SvS 在 MMLU-Pro、ARC-C、HellaSwag、PIQA、AGIEval 上高于两个基线,HumanEval 与初始化持平(Appendix E.3)。

07

什么时候别用:开放答案会退、难题子集不保、种子只能来自已解出的题

论文自己的表里就能读出四条边界,外加一条算力账上的空白。

边界一

开放答案格式是最大受害者

32B / DAPO-17k 的 SvS 在 MATH-500 掉 11.4 点、GaoKao23 掉 15.8 点(Table 2)。 论文的解释是增强过程让模型过拟合到 DAPO-17k 的整数答案格式;补 8k DeepMath 开放题后平均回到 62.8。 如果你的训练集全是整数答案、评测却是开放答案,这个退步会先出现。

边界二

难题子集不保证涨

DAPO-17k 上 OlymE Pass@32 −3.7、OlymH −1.6;MATH-12k 上 OlymH Pass@1 −0.8(Table 1)。 平均分上升不代表每个难度档都上升;最难的子集仍可能被牺牲。

边界三

合成题没有真标签,奖励是难度代理

Eq. 4 奖励的是“变体准确率落在带内”,不是“变体逻辑正确”。Appendix E.5 用 Qwen3-235B-A22B-Instruct-2507 与 OpenAI O3 评了 6,000 道合成题(600 步 × 每步 10 道),报告 more than 80% 被至少一个评委判为正确,并说人工复查被两个评委标为 invalid 的题,没有发现真正错误的。 这仍是评委口径的有效性,不是数学上的真值证明。

边界四

零正确率的题无法提供种子

合成只从“正确解”出发;Acc(x)=0 的题既不进 buffer,也没有正确解可当上下文,因此不能直接为它造变体。 方法能围绕当前能力边界扩张,但不能凭空跨到模型从未解出的题。推断(依据:§3.2 只取正确解作种子,Algorithm 1 第 11–12 行只选 R_c=1 的解)

边界五

算力账只给了曲线,没给总账

论文报告 32 张 H100,并用 Figure 9 给出每步时间与合成题/回答数量;但没有报告 GPU 小时数或相对 RLVR 的总训练时间增幅。 要估算预算,只能自己按 Figure 9 的曲线重算;本页未转录曲线上的具体读数(§5.5)。

一句话总结:SvS 解决的是“固定题库把策略压窄”这件事,不是“所有基准都变好”。 它最适合答案可验证、且愿意为在线合成付额外 rollout 的数学/代码场景;开放答案、超难题和严格算力预算下,要先验证再采用。