从0训练LLM · 现代大模型体系 阅读 + 实验 ≈ 40 分钟 页内实验 ×4
C12 后训练:从续写到听话、推理、做事 第 4 课

PPO 的 value model 和策略一样大,能不能去掉?

GRPO:去掉 value model
同一道题采一组回答,比组内平均好就推高、差就压低——组内均值就是基线,不再需要一个和策略一样大的 critic。GRPO 出自 DeepSeekMath(2024-02),不是 R1;它最初用的还是学出来的奖励模型。三个新失败分别逼出了 DAPO、Dr. GRPO 和 GSPO。
❓

本课一问:DPO 是离线的,学不到数据之外的东西;想让模型自己探索,得回到在线采样。可 PPO 要一个和策略一样大的 value 模型来估「这一步之后还能拿多少分」——Qwen3.8 规模下光它就要 444.5 GB。能不能去掉它?

这一课先不碰:奖励从哪来(第 5 课);这一课先照 DeepSeekMath 原文,奖励由一个打分函数给出,用教学世界里的严格验证器(答对 1、答错 0)演示。

从已有出发

从已有出发 · 后训练流水线 点已学的站看数据、损失与模型数

第 2 课的 PPO 数据流里,value 模型负责给每个 token 估一个基线 Vt,再用 GAE 算优势。它和策略一样大、要一起训,而且只有最后一个 token 有奖励,前面每个位置的「价值」都得靠它猜。

演进图 · 每一代都是被上一代的失败逼出来的本课高亮
  1. 第一代 SFT:用示范教格式 FLAN 2021 · LIMA 2023
  2. 第二代 RLHF:奖励模型 + PPO Christiano 2017 → Ziegler 2019 → InstructGPT 2022
  3. 第三代 · 离线 DPO:不训奖励模型 Rafailov et al. 2023(Stanford)
  4. 第三代 · 在线 GRPO 系:去掉 value model DeepSeekMath 2024-02 → DAPO / Dr. GRPO / GSPO 2025 你在这里
    解决了同一题采一组回答,组内标准化当优势;按 Qwen3.8 规模省掉 444.5 GB 的 value 模型。
    卡在全对或全错的组优势恰为 0:正确率 0.9、每组 8 个时,43.0% 的组白算;错的长回答每个 token 被罚得更轻(第 4 课)。
  5. 奖励来源 RLVR:可验证的奖励 Tülu 3 2024-11 命名 · DeepSeek-R1 2025-01 规模化
  6. 岔路 RL 扩展了能力,还是重排? Yue 2025 vs ProRL 2025
  7. 第四代 思考模型:想更久,也能控 o1 2024-09 · R1 2025-01 · Qwen3 2025-05
  8. 第五代 蒸馏:小模型直接继承 Hinton 2015 → GKD 2023 → Qwen3 2025
  9. 第六代 Agentic RL:在环境里做事 SWE-RL 2025-02 · Kimi K2 · GLM-4.5 slime · DeepSeek-V3.2

先自己设计:保留 critic,看它难在哪

  1. ① 朴素方案
  2. ② 它在哪失败
  3. ③ 改进方案
朴素方案PPO + critic(value 模型 + GAE)

value 模型难在哪,DeepSeekMath 原文说得很直接:它通常和策略一样大,带来显著的显存与计算负担;而在 LLM 里通常只有最后一个 token 拿到奖励模型的分,训练一个在每个 token 上都准确的 value 函数很难 。

改进:GRPO——组内相对优势

GRPO(Group Relative Policy Optimization)出自 DeepSeekMath(Shao et al. 2024-02),不是 DeepSeek-R1——R1 是一年后把它用到了更大的规模。原文把它定位为「PPO 的一个变体,同时优化 PPO 的显存占用」,7B 模型在 MATH 上从 46.8% 提到 51.7% 。把它和第 2 课的 PPO 逐项对照:

GRPO 目标函数 · DeepSeekMath 式 (3)(对照第 2 课 PPO 看)
J = E[
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
用组内均值当基线不会让梯度有偏:基线只要不依赖当前被评估的那个回答,期望梯度就不变,它只降低方差(REINFORCE with baseline 的经典结论)。除以标准差则是一个选择,不是必需的——Dr. GRPO 就把它去掉了。
🎯

试三件事(在上面「改进方案」那一侧的组件里):① 看默认一组:奖励 [1,0,0,1,1,0,0,0],总体标准差下答对的 +1.291、答错的 −0.775;切到「样本标准差」,变成 +1.208 / −0.725——两种口径都有人用,报告或代码必须写明;② 点「全对」:标准差为 0,8 个优势全是 0;③ 连点「从当前策略重采一组」,每次种子 +1(种子 1 采到 D A C F F A D D,种子 2 是 D B A C E D C B),每一组都能复现。

放回真实张量里看,GRPO 一步的损失是这样算出来的:

GRPO 一步的损失(Qwen3.8 词表;可切小规模)
S = min(ρ·Â, clip(ρ)·Â) ⊙ M,ρ = exp(logp − logpold)
输入输出中间结果 渐变 = 分数(连续值)编号槽 = 索引斜线 = 掩码(留白 = 不读)
边长按对数比例缩放,块边上的数字是真实值;同一维度符号的边在全图等长。
维度含义 真实规模 小规模
G 每组回答数(DeepSeekMath 64,R1 与 DAPO 16,本课组件 8) 8 4
T 回答长度,按组内最长补齐(这里取教学世界最长的回答 E:Qwen3.8 切出 18 个 token) 18 5
V 词表大小(Qwen3.8 的 vocab_size,padding 后) 248,320 6
1 广播维:一个回答只有一个优势 1 1
logits 是最占显存的一块:G × T × V 个数。真实训练里序列长到几千、几万 token,所以实现上会分块算 log_softmax,不把整块 logits 同时留在显存里。

新失败 ①:全对或全错的组,白算

GRPO 的优势来自组内差异。如果一组全对或全错,标准差为 0,所有优势都是 0,这一组对梯度没有任何贡献——采样、打分的算力白花了。单次正确率为 p、组大小为 G 时,这种组出现的概率是 pG + (1 − p)G:p = 0.9、G = 8 时是 43.0%;G = 16 时 18.5%;p = 0.5 时只有 0.8% 。模型越强,白算的组越多:

教学世界:6 个候选回答与初始概率是手写的教学数据;token 数来自 Qwen3.8 真 tokenizer;验证器、采样(mulberry32 种子随机数)、优势与训练全部由浏览器现算。

在教学世界里真跑 300 步 GRPO(G = 8、学习率 0.1、种子 11):正确率 0.40 → 0.831(第 50 步)→ 0.945(第 100 步)→ 0.985;每 100 步里零方差组的数量从 25 个涨到 77 个、92 个——前 300 步里 194 组白算。这就是 DAPO 的「动态采样」要解决的:过采样,把全对、全错的题过滤掉,保证每个 batch 都有有效梯度 。勾上组件里的「动态采样」:每一步都能凑出有对有错的组,代价是多采样——300 步采了 27,880 个回答,不重采是 2,408 个;正确率接近 1 时,20 次重采都凑不出来的步数仍有 126 步。

新失败 ②:错的回答越写越长

GRPO 先在每个回答内部按 token 平均(式里的 1/|oi|)。同样的负优势摊到更多 token 上,每个 token 挨的罚就更轻:

教学世界:6 个候选回答与初始概率是手写的教学数据;token 数来自 Qwen3.8 真 tokenizer;验证器、采样(mulberry32 种子随机数)、优势与训练全部由浏览器现算。

错答 C 只有 4 个 token,错答 E 有 18 个;两者优势都是 −0.775,GRPO 下 E 的每个 token 少挨 4.5 倍的罚(18 ÷ 4)。梯度于是偏爱「错的时候写长一点」,回答长度被推着涨,错的回答涨得尤其多——Dr. GRPO 把这称为 GRPO 的优化偏置,去掉 1/|oi| 和除以标准差之后,7B 基座模型在 AIME 2024 上得 43.3%,token 用量更省 。DAPO 的 token 级损失从另一个角度改同一件事:全组 token 一起平均,长回答里的每个 token 和短回答里的一样重。

新失败 ③:逐 token 的比率在 MoE 上不稳

ρi,t 是逐 token 算的。MoE 模型里,同一个 token 在采样时和更新时可能被路由到不同的专家,单个 token 的概率比会剧烈抖动,裁剪也跟着乱。Qwen 团队的 GSPO(2025-07)把重要性比率改成整个序列的似然比(按长度归一),裁剪也在序列级做,称这样明显稳定了 MoE 的 RL 训练 。

⚠

常见误解一:「GRPO 是 DeepSeek-R1 发明的。」 出自 DeepSeekMath(2024-02),早 R1 一年。

常见误解二:「GRPO 就是 RLVR,就是用规则打分。」 DeepSeekMath 原文的 GRPO 用的是学出来的奖励模型,还专门做了「迭代地重训奖励模型」;GRPO 说的是优势怎么算,奖励从哪来是另一件事(第 5 课把这两条轴分开画)。

常见误解三:「GRPO 比 PPO 更强。」 DeepSeek-R1 自己的对照:λ 调到 1.0 的 PPO 接近 GRPO。GRPO 省的是 value 模型、显存和调参,不是上限更高;GLM-5.2 的 SAO 反而回到了 critic(每题只采 1 条、用 critic 估逐 token 优势)。

常见误解四:「clip 的 ε 都是 0.2。」 DAPO 把上下界分开(εlow = 0.2、εhigh = 0.28):ε = 0.2 时,概率 0.01 的「探索」token 一步最多涨到 0.012,概率 0.9 的却能涨到 1.08——上界卡住的主要是小概率 token。DeepSeek-R1 第一阶段 RL 的 clip ratio 取到 10,并说明取小了会截断大量 token 的梯度。

🔍 DeepSeekMath 每次探索只更新一次,clip 起作用吗?

DeepSeekMath 写明「policy model only has a single update following each exploration stage」:采完一批只做一次梯度更新,那一刻 πθ = πold,所有 ρ 都等于 1,clip 根本不会触发,目标退化成带组内基线的普通策略梯度。clip 只在「同一批数据连续更新多次」时才起作用——DAPO 每批做 16 次更新,Tülu 3 的 PPO 有的设置每批重复 4 轮。读配方时,先看每批更新几次,再判断 clip 在不在起作用。

证据三问

问本课的回答
① 它解决什么问题?PPO 的 value 模型和策略一样大,而且在只有终点奖励时很难估准
② 数学上为什么可能有效?组内均值作基线不引入偏差、只降方差 ;除以标准差是一个选择
③ 实验上为什么选了它?DeepSeekMath 7B MATH 46.8% → 51.7%;R1、Qwen3、V4 都用 GRPO 系;但调好的 PPO 可以接近它

一句话

📌

GRPO 用同一题的一组回答互相当基线:比组内平均好就推高,差就压低;全组一样就没有信号。

🚦

先停在这里:记住「组内标准化 = 优势;全对全错没梯度;先按长度平均会偏爱长的错答;GRPO 出自 DeepSeekMath」。
再深一层:展开「clip 起作用吗」的 Dig,再对照张量图想一想:G × T × V 的 logits 在长回答时有多大。

下一个缺口

到这里,「梯度怎么算」已经从 PPO 走到了 GRPO 系;可「奖励从哪来」一直是那个学出来的奖励模型。它会被钻空子:第 2 课训出的 RM 给没被标注过的续写式回答 E 打了最高分。有没有骗不了的奖励? → 第 5 课:RLVR

回扣:agentic RL 里,一组轨迹全失败时同样没有梯度——第 8 课用 Agent 课的真实运行记录再算一次。

你可能会问