第十二章 使用 GRPO 微调大语言模型
复刻 DeepSeek-R1 的精神:让模型写出思维链。同一道题生成一组回答,用规则打分,组内标准化,不必奖励模型也不必 Critic。书上实际用的是 DAPO——GRPO 的变种。
- 一同一提示采 G 条回答,比谁的奖励高。
- 二A = (r − μ) / σ,这条上的每个 token 先分到同一个 A。
- 三DAPO:token 级损失;去掉 KL,省掉参考模型显存。
- 四奖励 = 格式 0.1 + 答案 1.0。满分 1.1。
书 §12.1–12.3 · p.181–217
12.1 GRPO:第八章搬到 LLM
目标函数式 (12.1) 和式 (8.1) 是同一张:一组轨迹、clip、可选 KL。环境从倒立摆换成语言模型:动作是 token,轨迹是一整段补全。
DeepSeek-Math / R1 用这条路提升数学推理。关键不是又堆一个 RM,而是可检验的奖励:答案对不对、格式在不在。
书 §12.1 · 式 (12.1) · p.181
接下节。书上不直接上原始 GRPO,而用 DAPO 的两点改动。
12.2 DAPO 的两点改动
是什么。字节提出的 DAPO。对 GRPO 的改动,书里写了两条(p.182):
- token 级策略梯度:每个 token 权重相同。该 token 的优势 = 它所在那条回答的组相对优势。
- 去掉 KL:不再需要 πref,省显存。策略梯度里不再减 β DKL。
伪代码:抽 N 道题 → 每题采 G 条 → 算该题的 μ、σ → Ai,j[t] ← (ri,j−μ)/σ → 用 ∇log π · A 更新。式 (12.2)–(12.4)。为简单,每次迭代只更新一次,梯度退化成普通策略梯度估计。
书 §12.2.1 · 式 (12.2)–(12.4) · p.182–183
GRPO vs DAPO
点一侧看差别。
两条路都还在「一组回答里比相对」。改的是损失怎么摊到 token、要不要参考模型。
接下节。r 从哪来?格式标签 + 答案是否恰好等于目标。
12.2.2 奖励:格式 0.1,答案 1.0
任务例:用 37、81、10 凑出 34,每个数字用一次。必须在 <think> 里写过程,在 <answer> 里只放算式。正确是 (81 − 37) − 10。
- 格式对(有 think / answer 标签):+0.1,否则 0。
- 答案恰好用了给定数字、只一次、求值等于目标:+1,否则 0。
answer 里多写了「= 34」只得 0.1:格式过了,答案字符串不干净。满分 1.1。p.184。
§12.3 还点了医疗思维链、Text-to-SQL:同一套「可检验奖励 + 组内相对」,换任务即可。
书 §12.2.2 · p.184;应用 §12.3 · p.209–215
开关格式和答案
看奖励如何从 0 拼到 1.1。下面四条示意回答的组内优势会跟着变。
这条回答的 r
组里另外三条先固定成 0、0.1、0.1。你改的是第四条。μ、σ、A 会重算。
合上第三部分。DPO 吃偏好对,PPO 吃 RM + 逐步 KL,GRPO/DAPO 吃规则奖励。下一章起看图、对图文、生图。
合上这一章
- 一组回答。组内标准化优势。
- DAPO。token 级、去掉 KL。
- 规则奖励。格式 0.1 + 答案 1.0。
章末自测
讲完了。下面几题核对本讲刚说过的概念。点选立刻看对错;做错也不会锁下一章。