云镜收藏

稍后阅读

清单保存在当前浏览器,方便下次回来继续阅读。

清单还是空的

在笔记卡片或正文页点击“加入稍后阅读”即可收藏。

卷2 · LLM 内功

2.7 对齐技术:RLHF → DPO → GRPO

约 8 分钟阅读
全书目录

展开本章目录与同卷章节1. 什么是对齐,为什么难2. 第一代:RLHF 三部曲(InstructGPT,2022)3. 第二代:DPO(直接偏好优化,2023)4. 第三代:GRPO 与 RLVR(2024–2026 的主引擎)5. 三代对比(背下来)6. 实操路线(TRL)7. 自测题8. 动手作业案例 · 数值:代一次 DPO loss9. 延伸资源同卷章节2.1 语言模型前史:n-gram → RNN → 注意力(20 分钟走完 30 年)2.2 BPE tokenizer 原理与实现2.3 GPT 架构工程版:从 TinyGPT 到 nanoGPT2.4 预训练:数据、Scaling Law 与训练稳定性2.5 SFT 与指令微调实战2.6 参数高效微调:LoRA 与 QLoRA2.7 对齐技术:RLHF → DPO → GRPO2.8 推理优化与 vLLM:把模型变成服务2.9 架构前沿:MoE、长上下文与注意力变体2.10 小模型时代的科研机会:1B–7B 甜点区

本章目标:搞懂”模型变聪明之后,如何变得有用/可靠”的三代技术。这一章是卷5.1(多模态推理 RL,当前最热方向)的理论地基——GRPO 就是你未来科研最可能亲手跑的算法。学完标准:能白板推导 DPO 的 loss,能讲清 GRPO 为什么去掉 critic 还能工作。

1. 什么是对齐,为什么难

SFT 之后的模型会回答了,但还有三层问题:回答质量的天花板(好答案 vs 更好答案,SFT 数据给不出稠密的区分)、幻觉(编造但自信)、目标偏差(讨好而非真实)。对齐(alignment)的本质:把人类模糊的”好坏”判断,变成模型可优化的信号。难点:人类偏好是相对的(比较容易、标定难——8.2 章美学评分同样的道理)且昂贵的。

2. 第一代:RLHF 三部曲(InstructGPT,2022)

  1. SFT:先教会行为格式(2.5);
  2. 训练奖励模型(RM):人类对同一 prompt 的多个回答做成对排序;RM 是个打分头,用 Bradley-Terry 模型拟合——“A 比 B 好”的概率 = σ(rA−rB)\sigma(r_A - r_B),本质是学习序关系而非绝对分( again,与 8.2 的 SRCC 逻辑同源);
  3. PPO 强化学习:模型生成回答 → RM 打分 → 按分更新策略。

KL 惩罚是这个阶段的灵魂设计:奖励里减去与参考模型(SFT 版)的 KL 散度——奖励模型会过优化(reward hacking:模型学会讨好 RM 的漏洞),KL 是”别漂太远”的缰绳:

objective=E[r(x,y)−β KL(πθ∥πref)]\text{objective} = \mathbb{E}\left[r(x, y) - \beta\, \text{KL}\left(\pi_\theta \| \pi_{ref}\right)\right]

PPO 的痛点:同时养四个模型(策略、价值网络、参考、奖励),采样-训练交替,超参敏感、训练不稳——工程上劝退了一票团队。于是第二代诞生。

3. 第二代:DPO(直接偏好优化,2023)

洞察:RLHF 目标有解析解——最优策略下的奖励可由当前模型与参考模型的概率比闭式表达:r(x,y)=βlog⁡πθ(y∣x)πref(y∣x)r(x,y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}。把它代回 Bradley-Terry,奖励模型被整个消掉,得到直接监督学习式的 loss:

LDPO=−E[log⁡σ(βlog⁡πθ(y+∣x)πref(y+∣x)−βlog⁡πθ(y−∣x)πref(y−∣x))]L_{DPO} = -\mathbb{E}\left[\log \sigma\left(\beta \log \frac{\pi_\theta(y^+|x)}{\pi_{ref}(y^+|x)} - \beta \log \frac{\pi_\theta(y^-|x)}{\pi_{ref}(y^-|x)}\right)\right]

读法:让模型相对参考模型,把”好回答”的概率抬得比”坏回答”更高。两个模型(策略+参考,参考只做前向)、无采样、无 RL 训练循环——一次普通的前向反向就完成。

代价与局限:offline——只在给定偏好对上优化,模型不主动探索新回答,上限受数据覆盖限制;隐式奖励在分布外会失真。变体扫盲:IPO(修过拟合)、KTO(不成对,只要”好/坏”标签)、SimPO(去参考模型,用序列长度归一)。

4. 第三代:GRPO 与 RLVR(2024–2026 的主引擎)

动机来自”推理模型”时代:数学/代码题答案可自动验证(对答案、跑测试),不需要人类偏好标注,也不需要 RM——这就是 RLVR(可验证奖励的强化学习)。DeepSeek 用它练出 R1 的推理能力,引擎是 GRPO(Group Relative Policy Optimization)。

GRPO = PPO 去掉 critic 的简化:对每个问题,采样一组 G 个回答(比如 16 个),组内算分:

Ai=ri−mean(r1..rG)std(r1..rG)A_i = \frac{r_i - \text{mean}(r_1..r_G)}{\text{std}(r_1..r_G)}

组内平均就是 baseline——“比我组内平均好的放大概率,差的缩小”。省掉价值网络(不用再训一个”预测期望得分”的模型),显存和稳定性双赢。配上 KL 到参考模型的约束,训练流程和 PPO 同构但简单得多。

为什么这是你科研的引擎:把”可验证”从数学/代码换到视觉领域——几何题的图、图表问答的数值、GUI agent 的任务完成——就是多模态推理 RL 的研究现场(卷5.1),且 GRPO 在 3B 模型上单卡可跑(TRL 的 GRPOTrainer / verl 框架)。当前这个方向论文的标配组件:Qwen-VL 小模型 + LoRA + GRPO + 自建可验证奖励,你在寒假后完全够格上手。

5. 三代对比(背下来)

RLHF+PPODPOGRPO/RLVR
模型数量4(策略/价值/参考/奖励)2(策略/参考)2–3(策略/参考±奖励规则)
奖励来源训练出的 RM隐式(从偏好对反解)规则/验证器(零标注)
数据成对偏好成对偏好问题+可验证答案
稳定性最难调最稳(纯监督式)中等(组采样设计关键)
典型用途产品对齐轻量偏好微调推理能力训练

6. 实操路线(TRL)

  1. DPO 最短路径:trl.DPOTrainer + 成对数据(prompt/chosen/rejected 三列 json),LoRA 底座,β\beta=0.1 起步,lr 比 SFT 再小一个档;
  2. GRPO:trl.GRPOTrainer,reward_funcs 传一个 Python 函数(比如”最终答案与标准答案一致=1 否则=0”),G=8–16。奖励函数设计本身就是研究——写得太松会 reward hacking;
  3. 数据:数学题用 GSM8K,验证用 str 匹配或小解析器。

7. 自测题

  1. RLHF 为什么要 KL 惩罚?去掉会怎样?(防奖励模型过优化/策略漂移;reward hacking 到崩)
  2. Bradley-Terry 模型把偏好建模成什么?和美学评分(8.2)的联系?(成对比较的 sigmoid 概率;都是”相对判断比绝对打分可靠”)
  3. DPO 的核心推导步骤?(RLHF 目标 → 最优策略下奖励的闭式解 → 代回消掉 RM)
  4. DPO 的 offline 局限是什么?(不探索新回答,上限受数据覆盖限制——对比 GRPO 的在线采样)
  5. GRPO 怎么省掉 critic?(组内采样的均值/方差即 baseline——同一问题的相对比较天然消去题难度)
  6. RLVR 的”可验证”指什么?举一个视觉领域的可能验证器?(规则自动判分;图表数值题比对数字、几何作图比对结论、GUI 任务完成状态)
  7. reward hacking 在 RLVR 里还发生吗?(发生:验证器松了就被钻空子——比如输出格式猜答案;验证器设计是研究活)

8. 动手作业

  1. 白板推导 DPO loss(从 KL 正则的 RL 目标出发,两步闭式代入)——推不动就对照原论文附录;
  2. TRL 跑一次 DPO:拿 2.5 的 SFT 模型当底座,构造 500 对偏好(好答案用强模型改写、坏答案故意注入错误),前后对比 20 个案例;
  3. 用 GRPOTrainer 在 GSM8K 子集上对 Qwen2.5-1.5B 做 RLVR(答案匹配奖励),观察训练中奖励均值曲线与回答长度曲线——R1 论文里”回答变长”现象的亲身体验;
  4. 读 DeepSeek-R1 论文前半部分(训练流程图级别),对照本章写一页总结。

案例 · 数值:代一次 DPO loss

案例:把公式里的符号全换成数字

β=0.1\beta = 0.1。某样本的对数概率——策略模型:ln⁡πθ(y+)=−2.0, ln⁡πθ(y−)=−2.3\ln\pi_\theta(y^+){=}-2.0,\ \ln\pi_\theta(y^-){=}-2.3;参考模型:ln⁡πref(y+)=−2.5, ln⁡πref(y−)=−2.2\ln\pi_{ref}(y^+){=}-2.5,\ \ln\pi_{ref}(y^-){=}-2.2。

隐式奖励 = β ×(策略 − 参考): 好回答:0.1×(−2.0+2.5)=+0.050.1 \times (-2.0 + 2.5) = +0.05;坏回答:0.1×(−2.3+2.2)=−0.010.1 \times (-2.3 + 2.2) = -0.01。

margin =0.05−(−0.01)=0.06= 0.05 - (-0.01) = 0.06 → σ(0.06)=0.515\sigma(0.06) = 0.515 → L=−ln⁡0.515≈0.664L = -\ln 0.515 \approx 0.664。

读出三件事:① 0.664 只比 ln⁡2≈0.693\ln 2 \approx 0.693(纯瞎猜)好一点——这个策略刚起步;② DPO 关心的唯一量是”相对参考模型的提升差”:把好回答的概率抬高、或把坏回答压低,都能拉开 margin;③ πref\pi_{ref} 永远不更新——它是整把尺子的零点,KL 缰绳以”对数概率差”的形式藏在公式里,而不是显式的惩罚项。

9. 延伸资源

  • InstructGPT(RLHF 原始设定)/ DPO 论文——两篇必精读
  • DeepSeek-R1 论文(2025)——GRPO+RLVR 的工业级叙事
  • TRL 文档 DPOTrainer / GRPOTrainer 章节——实操手册