TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

强化学习是在筛选吗:用 0.5B 模型重新测量的 GRPO 与 pass@k

状态:草稿(2026-10-31),实测。 所有训练和评估均由笔者在一张 8GB 笔记本电脑 GPU 上直接运行。条件和判定标准在看到结果之前就已经写好,在训练前做出的两次更改(关于任务和评分)及其原因已在第 4 节中说明。论文中的数据是从 arXiv 原文的表格和图表编号中摘录的。 编写规则:以实测数据为基础,无法测量的标注为“未实测”,无法确认的标注为“未确认”。

目录

1. 问题:强化学习是否创造了新能力

自 2025 年初 DeepSeek-R1 问世以来,在“能够通过机器机械化验证答案的问题”(数学、代码)中,通过强化学习构建推理模型的方法已经成为了标准。这被称为 RLVR(使用可验证奖励的强化学习)。模型生成多个答案,对正确的答案提升概率,对错误的答案降低概率。

然而,这个过程究竟是在模型中 创造了原本没有的能力,还是 让本来偶尔就能给出的正确答案出现得更频繁,则是两回事。衡量这种差异的工具就是 pass@k。

如果强化学习只是在“筛选”,那么 pass@1 会上升,但 pass@k(当 k 很大时)几乎会保持不变。因为如果抽样次数足够多,基础模型最终也会给出那个答案。如果要创造新能力,pass@k 也必须上升。

2. 论文们的观点

GRPO:无需价值网络,在同个问题的答案之间进行比较

DeepSeekMath(arXiv 2402.03300)提出的 GRPO 是一种从 PPO 中去掉了价值网络(critic)的方法。针对一个问题抽取 G 个答案,从每个答案的奖励中减去 组平均值并除以标准差,将该值用作该答案所有 Token 的优势。同一问题的不同答案起到了基准线的作用。原论文的设置为学习率 1e-6、KL 系数 0.04、每个问题 64 个。在原论文的图 7 中,已经观察到了“强化学习提升了 Maj@K,但没有提升 Pass@K”这一现象。

Dr. GRPO(arXiv 2503.20783)指出,GRPO 公式中的两次除法会产生偏差。如果除以答案长度,错误的答案越长受到的惩罚就越小,从而导致错误答案变长;如果除以组标准差,权重就会过分集中在太容易或太难的问题上。Dr. GRPO 提出去掉这两者并除以一个常数。本实验遵循 Dr. GRPO。

pass@k 曲线的交点 (2504.13837)

Yue 等人的论文《Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?》在多个模型和任务中将 k 增大到几百甚至上千,并绘制了 pass@k。当 k 较小时,强化学习模型获胜;但当 k 变大时,基础模型会迎头赶上并超越它。强化学习模型解决的问题几乎是基础模型解决的问题的子集。测量设置为温度 0.6,top-p 0.95,每个问题抽取 n 个(n = 曲线中最大的 k),并用无偏估计量 1 − C(n−c, k)/C(n, k) 进行计算,本文也同样采用了这种方法。不过,看同一篇论文的表 4 可以发现,Qwen2.5-7B 的 MATH500 pass@256 在基础模型中为 96.2,GRPO 150 步时为 97.2,300 步时为 96.0,450 步时为 95.4。在训练时间较短时,上限反而略有提升,而训练时间越长反而越下降。这意味着,正如本次实验一样,在较短的训练中上限是有可能上升的。

强化学习改变的 Token 占 1–4% (2605.06241)

2026 年的论文《Rethinking RL for LLM Reasoning: It's Sparse Policy Selection, Not Capability Learning》从 Token 层面看待了同一个问题。对比强化学习前后的模型的贪婪解码,强化学习挑选出不同 Token 的位置占总数的 1–4%,并且在这些位置上,强化学习模型挑选的 Token 几乎总是位于基础模型前 5 个候选之内(表 2,平均排名约为 2)。发生改变的位置集中在基础模型犹豫不决(熵较高)的决策点上。基于这一观察,作者们仅使用 50 个问题和离线 Rollout 就构建了能够修正决策点选择的 ReasonMaxxer,并报告说其取得了与整体强化学习相近的性能(表 3)。阅读原文时需要注意两点。第一,ReasonMaxxer 不是 GRPO,而是用优势加权的离线学习;第二,正文 3.1 节中的句子“没有一个移动的位置”与表 2 中的 0.01–0.12% 不符。在同一篇论文的表 3 中,对 Qwen3-0.6B 应用 GRPO 的结果是,MATH500 从 0.338 小幅上升至 0.372。

哪怕只有一个示例 (2504.20571)

1-shot RLVR 报告称,通过复制 Qwen2.5-Math-1.5B 的 单个问题来进行 RLVR,MATH500 的准确率从 36.0 提升到了 73.6,这与包含该问题的 1.2k 个问题进行训练的结果相同。挑选的标准是训练期间正确率方差较大的问题,而基础模型一次也解不出来的问题或标签错误的问题则没有效果。作者们与仅提供格式奖励的基准线进行了对比,单独剥离出了“修正格式所占的份额”,而小模型实验中这一份额较大,这与本次实验的核心教训息息相关。

在小模型上可能会有所不同 (2607.16097)

通过国际象棋全面梳理了从 5M 到 1B 模型预训练到强化学习过程的论文《Understanding Reasoning from Pretraining to Post-Training》认为,强化学习并非均匀且锐利地提升,而是答案放大、发现稀有答案以及错误放大交织在一起的重新分配。并且在 20M 模型中,在强化学习初期 pass@16 也快速上升了(图 2)。这给我们的警示是,在使用小模型进行复现时,不应盲目期待一定会出现交点。

3. 实验设计

将其缩减到了单张 8GB 笔记本电脑 GPU 即可运行的规模。

损失函数的核心只有几行。

rs = np.array([score(t, p) for t, _ in outs])     # 그룹 8개의 보상(0 또는 1)
adv = rs - rs.mean()                              # Dr. GRPO: 표준편차로 나누지 않는다
...
logp, mask = completion_logprobs(model, tok, prompts, completions)   # 응답 토큰의 log π
loss = -(A * logp * mask).sum() / (16 * 8 * 384)  # 응답 길이로 나누지 않는다(상수)
loss.backward()

三种条件与基准线

条件 训练问题 每步 在 150 步期间
大量问题 混合 4,000 个并各过一遍 16 个不同的问题 将 2,400 个问题各过一遍
16 个问题 在基础模型通过率介于 0 和 1 之间的的问题中,p(1−p) 较大的 16 个 相同的 16 个问题 每个问题 150 次
1 个问题 将其中的第一个复制 16 份(1-shot RLVR 方式) 相同的 1 个问题 2,400 次
无强化学习 直接对基础模型抽样 32 次计算 pass@k

16 个问题和 1 个问题是通过让基础模型对训练问题的前 128 个各解答 16 次(温度 1.0)从而挑选出通过率参差不齐的问题。在 128 个问题中有 31 个介于 0 和 1 之间。这与 2605.06241 中的“能力边缘(edge of competence)”、1-shot RLVR 中的“偶尔能给出正确答案的问题”是相同的思路。

学习率:在使用 LoRA 进行 GRPO 时,论文中并没有关于学习率的依据,因此通过“大量问题”条件下的 30 步简短测试了 {1e-5, 5e-5, 2e-4},并将最后 10 步平均奖励最高的值同样应用到了三个条件中。结果为:1e-5: 0.38, 5e-5: 0.60,2e-4: 0.00。在 2e-4 下,策略崩溃了,所有答案直到 384 个 Token 结束都在重复相同的话。

评估:在每个测试集的 128 个问题上抽取 32 个(温度 0.6,top-p 0.95),使用无偏估计量计算 pass@1–32。基础模型以及各条件在 75 步和 150 步时的结果。判定采用以问题为单位的自助法(2,000 次),得出(强化学习 − 基础模型)差值的 95% 区间。预先确定的标准是:“pass@1 上升 = 区间下限 > 0”,“上限保持不变 = pass@32 差值区间包含 0 或差值小于 pass@1 差值的 1/3”。

4. 训练前做出的两个改变

在查看结果前,我们在训练前两次修改了既定条件。两次修改都在开始执行 RL 之前,并且修改的时间和原因都已记录在预注册文档中。

1. 任务:倒计时 → 算术。 最初的计划是倒计时(组合三个数字通过四则运算得出目标数字)。测量基础通过率时发现,0.5B 模型在 32 道题目 × 16 个样本下几乎没有答对过(pass@16 为 0–3%)。如果 8 个组的全为 0,则优势(Advantage)为 0,因此 GRPO 将没有可学习的信号(如 2609.25463 总结的 p^G + (1−p)^G)。所以我们将其改为了算术。

2. 将评分分为两类,并提高算术难度。 在两位数 × 两位数 − 三位数算术中,基础模型的 pass@1 为 0.10;但如果忽略答案格式,仅根据“回答中的最后一个整数”评分,则为 0.62,pass@32 为 1.0。模型其实已经会计算了,做不到的是 <answer> 标签格式(格式遵守率为 25%)。通过这个任务无法探讨“RL 是否提升了能力上限”(已经达到了 1.0)。因此我们做了两项更改。

任务候选(32道题目 × 32个样本) 严格 pass@1 严格 pass@32 宽松 pass@1 宽松 pass@32 格式遵守率
两位数 × 两位数 − 三位数 0.097 0.875 0.623 1.000 24.5%
三位数 × 两位数 − 三位数 0.010 0.281 0.179 0.812 16.3%
四个两位数:a×b − c×d 0.021 0.438 0.436 0.969 11.6%
三位数 × 三位数 − 四位数 0.004 0.094 0.098 0.594 11.6%

此外,在模型文件中发现 generation_config.json 带有 1.1 的重复惩罚并干扰了采样,我们在训练前将其找到并固定为 1.0。由于 RL 的梯度公式建立在样本即策略本身的假设之上,隐藏的采样设置会悄悄改变结果。尽管曾因内存限制导致 Pod 崩溃过两次,但这与条件无关。

5. 结果

训练曲线

학습 중 보상(정답 비율, 5스텝 이동 평균) 스텝마다 문제 16개 × 응답 8개, 온도 1.0, 실측 0 0.2 0.4 0.6 0.8 1 1 25 50 75 100 125 150 GRPO 스텝 평균 보상 16문제 1문제 많은 문제
图:训练中的奖励
条件 前 10 步平均奖励 最后 10 步 回答长度(开始 → 结束) 每步耗时
多题 0.17 0.68 131 → 173 Token 8.4秒
16题 0.63 1.00 118 → 384(最大) 10.7秒
1题 0.80 1.00 76 → 62 3.5秒

16题和1题在 50 步内就答对了所有训练题目。此后 8 个组全部为 1,因此优势为 0,即再无学习信号。

pass@k:采用两种评分

pass@k, 느슨한 채점(마지막 정수) 0.5B 지시 모델, 테스트 128문제 × 32개, 온도 0.6, 따로 적지 않으면 150걸음, 실측 0 0.2 0.4 0.6 0.8 1 1 2 4 8 16 32 k(뽑는 개수, 로그 눈금) pass@k 베이스 많은 문제 75걸음 많은 문제 1문제 16문제
图:pass@k 宽松评分
pass@k, 엄격 채점(태그 안의 답) 0.5B 지시 모델, 테스트 128문제 × 32개, 온도 0.6, 따로 적지 않으면 150걸음, 실측 0 0.2 0.4 0.6 0.8 1 1 2 4 8 16 32 k(뽑는 개수, 로그 눈금) pass@k 많은 문제 75걸음 많은 문제 1문제 베이스 16문제
图:pass@k 严格评分
模型 评分 pass@1 pass@4 pass@32 格式遵守率
基础 严格 0.019 0.066 0.258 16.2%
基础 宽松 0.248 0.466 0.836
多题 75步 两者相同 0.660 0.741 0.805 100%
多题 150步 两者相同 0.610 0.642 0.680 100%
16题 150步 两者相同 0.141 0.166 0.195 100%
1题 150步 两者相同 0.182 0.231 0.297 99.9%

RL 之后的模型几乎 100% 遵守了格式,使得严格评分和宽松评分趋于一致。只有基础模型存在差异。

预定判定(按题目进行自助采样,95% 区间)

模型 评分 Δpass@1 Δpass@32 判定
多题 75 宽松 +0.412 [+0.341, +0.484] −0.031 [−0.109, +0.047] pass@1 上升, 上限保持不变
多题 150 宽松 +0.361 [+0.269, +0.447] −0.156 [−0.250, −0.055] pass@1 上升, 上限下降
16题 150 宽松 −0.107 [−0.154, −0.060] −0.641 [−0.727, −0.547] pass@1 下降
1题 150 宽松 −0.067 [−0.116, −0.019] −0.539 [−0.625, −0.453] pass@1 下降
多题 75 严格 +0.641 [+0.567, +0.709] +0.547 [+0.445, +0.641] 两者皆升
16题 150 严格 +0.122 [+0.072, +0.175] −0.062 [−0.133, +0.016] pass@1 上升
1题 150 严格 +0.163 [+0.110, +0.223] +0.039 [−0.031, +0.109] pass@1 上升

在宽松评分中,“32个中至少答对一个的题目”数量(覆盖率)从基础模型的 107 个下降到了:多题 75 步的 103 个(仅在 RL 中解出的有 12 个,仅在基础模型中解出的有 16 个)、150 步的 87 个(12 / 32)。16 题为 25 个,1 题为 38 个。

如何解同一道题

针对测试的第一道题 413 * 41 - 882(正确答案 16051)的回答(150 步,温度 0.6,32 个中的第一个,换行符用 / 表示)。

6. 解读

1. 采用多题的 GRPO “进行了筛选”。 从计算能力来看,pass@1 从 0.25 大幅上升至 0.66,但抽样 32 次时至少答对一个的概率(pass@32)从 0.84 统计性地等同于 0.81。随着 k 增大,基础模型迎头赶上,75 步模型在 k=16 与 32 之间、150 步模型在 k=8 与 16 之间被基础模型超越(见图)。Yue 等人的交叉现象在 0.5B 模型和算术任务中同样出现了。当训练延长到 150 步时,pass@32 显著下降至 0.68,覆盖率也从 107 题减少到 87 题。这与同篇论文表 4 中“训练越长,pass@256 反而下降”的方向一致。从回答中也能看出筛选出了什么。这是一种将乘法拆解为 (40 + 1) 的解法,原本就存在于基础模型的分布中。这与 2605.06241 所说的“在基础模型的上层候选之中改变决策点的选择”这一图景相符(未对 Token 级进行实测)。

2. 如果只看严格评分,结论就会截然不同。 在严格评分下,三种条件下的 pass@1 都有所上升,多题条件的 pass@32 更是大幅上升至 0.26 → 0.81。这些数字很容易被解读为“RL 提高了上限”。然而,其中大部分归功于学会了使用 <answer> 标签。基础模型的格式遵守率为 16%,而 RL 之后达到了 100%。这就是 1-shot RLVR 设立单独的“格式奖励基线”、Dr. GRPO 指出模板问题的原因。模型越小,格式所占的比重就越大。

3. 采用少题的 GRPO 在此设置下失败了。 16 题和 1 题虽然学会了格式(严格 pass@1 增加 +0.12 和 +0.16),但计算能力反而下降了(宽松 pass@1 减少 −0.11 和 −0.07),多样性遭到破坏,pass@32 下降到了 0.20 和 0.30。在训练题目于 50 步内全部答对后,奖励全部为 1 且没有信号,在此期间模型陷入了“单行乘法”的短解法或“在答案后重复标签”的坏习惯中。这并没有反驳 2605.06241 的“几十个问题就足够了”以及 1-shot RLVR 的结果。因为条件不同。

归根结底,这个小型实验所展示的是:“如果想用少量题目进行 RL,似乎需要一种机制将策略约束在不远离基础模型的状态。”这是下一个实验的假设,目前尚未实测。

7. 局限性

原始数据与参考资料

登录后即可点赞

评论

还没有评论。

登录后即可发表评论