对齐与强化学习
从“会模仿”到“知好坏”
M4 让模型会回答,但它只是模仿示范。这一节让它按人类偏好优化。
SFT 有个根本局限:它只能让模型模仿示范里的回答,但示范总是有限的,而且没有负向信号——它只见过“好答案”,从没被告知“这个答案不好”。结果是模型会回答,但不知道两个回答里哪个更好。
对齐(alignment)用强化学习补上这一课:给模型的回答一个“好坏”的信号,让它朝“人类更喜欢”的方向优化。
上游: M4 的 SFT 模型(会回答,但不知好坏)。
本节: 用人类偏好训练,让模型的输出更符合人想要的。主线是 PPO → DPO → GRPO → RLVR 的演进。
下游: M6 讲训练好的模型怎么高效地跑起来(推理与现代架构)。
怎么把“人类偏好”变成训练信号?
关键一步:不是让人打分,而是让人做“二选一”。
直接让人给回答打分(打几分)很不靠谱——每个人的尺度不一样。更可靠的是让人做成对比较:给两个回答,只问“哪个更好”。
这个洞察不是 LLM 时代发明的。早在 2017 年,OpenAI 就在 Atari 游戏和机器人行走上验证了:人对成对轨迹做偏好判断,就足以定义复杂目标,而且只需要对不到 1% 的交互给反馈。chosen / rejected 这个数据形态,从那时就定下来了。
所以对齐的原料是一堆 (问题, 更好的回答, 更差的回答) 三元组。剩下的问题是:拿到这些偏好数据,怎么用它去更新模型?——不同的答法,就是 PPO、DPO、GRPO、RLVR 这条演进线。
一条“砍模型”的演进线
理解这条线,就理解了整个现代对齐。核心问题是:要在显存里同时养几个大模型。
最早的做法 **RLHF(InstructGPT 用的 PPO 路线)分三段:① SFT;② 用偏好数据训一个奖励模型(Reward Model)**给回答打分;③ 用 PPO 这个强化学习算法,让模型朝高分方向优化,同时用 KL 惩罚防止它跑偏到奖励模型没见过的地方。
问题是这套很贵——PPO 训练时要在显存里同时塞 4 个大模型。后面的演进,就是一步步把这 4 个砍到 2 个。下面的可视化直接展示这条砍法。
那 4 个模型各自在公式里的位置,拆开 PPO 的目标函数就看清了——上面每个方框,都对应下面的一项:
公式里最抽象的是 clip 那一项——把它画出来、亲手拖一遍就清楚了:
三件事:① 把 ρ 从 1 往右拖过 1+ε,看曲线变平、梯度归零——好回答提得够多了,刹车;② 切到 Â=−1 往左拖过 1−ε——压差回答同样有刹车;③ 注意反方向没有刹车(虚线继续陡降):min 的”悲观取小”只防占便宜、不防吃亏。
三个中文圈高频记错的事实,顺便纠正:
① GRPO 出自 DeepSeekMath(2024-02),不是 DeepSeek-R1——很多转载记错了。
② DPO 出自 Stanford(Rafailov、Manning、Finn 等),不是 Anthropic。
③ PPO 原文(2017)里没有 LLM、没有奖励模型、没有 KL——那是给 Atari/机器人设计的通用算法,复杂度是被 InstructGPT 搬过来的。理解这点,才懂后面为什么要拼命简化。
岔路一:DPO —— 干脆连奖励模型都不训
在 PPO 主线之外,还有一条更激进的岔路:DPO 发现——既然奖励模型和最优策略之间有数学上的对应关系,那根本不用先训奖励模型再做 RL,可以直接用偏好数据、一个类似分类的损失函数,一步到位地优化模型。它把整个 RLHF 塌缩成了一个简单的监督式损失:
DPO 因为简单稳定,成了开源社区偏好对齐的默认选择。
岔路二回到主线:GRPO 砍掉 value model
PPO 的 4 个模型里,Value model(估计基线、用来算“优势”)最容易省。GRPO 的做法是:对同一个问题采样一组回答,直接用组内的相对好坏当优势——比组内平均好就是正优势,差就是负优势。这样就不需要单独养一个 Value model 来估“这题该得多少分”。下面的计算器让你亲手感受这个机制。
把它写进目标函数,和 PPO 逐项对比——你会发现整个公式只换了一件事:
主线终点:RLVR 砍掉奖励模型
最后一跳最漂亮。GRPO 还留着一个学出来的奖励模型,而学出来的奖励模型有个致命问题:会被“钻空子”(reward hacking)——模型学会说服评估者而不是真的答对,所以 RLHF 只能跑几百步就得停。
RLVR 的洞察是:数学、代码这些领域有标准答案,直接用规则验证器判对错(二元反馈),根本不需要学出来的奖励模型。而且规则验证器不会被 hack,所以能一直训下去。DeepSeek-R1 就是靠 RLVR + GRPO,让推理能力(自反思、自验证)自发涌现出来。
🔍 Bradley-Terry 是什么
把“A 比 B 好”变成一个概率模型:每个回答有个隐含的“实力分”,A 打赢 B 的概率是两者实力的 sigmoid。这和国际象棋的 Elo 是同一套数学。奖励模型训练、以及 DPO 的损失函数,本质都是在拟合这个 Bradley-Terry 概率——DPO 正是把它反解出了闭式最优策略。
它值得比一句话更多的篇幅:奖励模型和 DPO 共用的就是这一个公式。下面把它整个拖一遍——尤其是那个「整体 +2」按钮,它一次性解释了两件事:为什么奖励模型给出的绝对分数没有意义,以及为什么 DPO 的损失里只出现对数比的差。
DPO 说:隐式奖励 r = β·log πθ/πref。所以上面那个 Δ 换个读法——它是模型相对参考模型的对数比之差,要先乘 β 才是实力差,再进同一个 sigmoid。β 于是成了曲线的陡峭度旋钮:
试三件事:① 把两个实力分拖到差 6 分以上——胜率冲进 99% 的饱和区,曲线贴平、梯度几乎消失,这就是「已经分得很开的偏好对学不到东西」;② 点**「整体 +2」,两个分一起右移而胜率一位小数都不动**——只有差值进 sigmoid,所以奖励模型的绝对分数(和棋手的 Elo 绝对值一样)本身毫无意义;③ 调 β:调大 → 曲线变陡 → 模型只要偏离参考模型一点点损失就到底、梯度归零 = 强锚定;调小 → 曲线变平 → 必须把对数比拉开很多才算达标 = 允许大幅偏离。
两个可视化,串起整条主线
砍模型看成本,组内优势看机制。
- RL 流水线:在 PPO / GRPO / RLVR 之间切换,数一数每种要在显存里养几个大模型(4 → 3 → 2),看每步砍掉了谁、为什么能砍。
- GRPO 组内优势:拖动每个回答的奖励,看优势 Â =(r−mean)/std 怎么变。体会“只要组内相对排名,就不需要 value model”。
RL Explainer 把 REINFORCE / PPO / RLHF / DPO / GRPO / DAPO 等 11 个算法的真实公式逐项做成可点击——点公式里任何一项看它是什么、为什么在那。最有用的是公式 diff 视图:直接高亮 PPO 和 GRPO 的数学差异,正好回答”GRPO 相对 PPO 到底改了哪一项”。中英双语一键切换。
看什么: ① 切到 diff 视图对比 PPO vs GRPO——你会看到 value model 那一项被组内均值替换,正是上面第二个实验算的东西;② 训练 pipeline 可视化对照上面的”砍模型”图。(社区项目非官方,公式细节以本地论文库原文为准。)
给我们的模型做一次偏好对齐
小模型上,DPO 是性价比最高的起点。
本模块的项目任务单
| 步骤 | 你的决策 / 动作 | 说明 |
|---|---|---|
| 1. 准备偏好数据 | 收集 (prompt, chosen, rejected) 三元组 | 成对比较比打分可靠 |
| 2. 选方法 | 小模型/资源少 → DPO(不用训 RM、稳) | 想上推理能力再看 GRPO/RLVR |
| 3. 让 AI 写训练 | 用 TRL 的 DPOTrainer | 偏好数据格式 prompt/chosen/rejected 查 TRL 文档 |
| 4.(进阶)RLVR | 若做数学/代码任务,用规则验证器 + GRPO | 有标准答案的领域才适用 |
| 5. 验收 | 对比对齐前后:同一问题,回答是否更符合你的偏好 | 更有用/更简洁/更少胡说就成功 |
reward hacking 是这一节的暗礁: 只要奖励是“学出来的”,模型就可能学会钻空子——挑拣证据、编造支撑来“说服”奖励模型,而不是真的变好。即使代理奖励和真实目标正相关,钻空子照样会发生。这就是为什么有标准答案的 RLVR 是一个重要方向:规则不会被说服。
常见的坑 + 该带走的
| 坑 | 症状 | 怎么办 |
|---|---|---|
| 让人直接打分 | 尺度不一致,信号噪声大 | 用成对比较 chosen/rejected |
| 没有 KL 惩罚 | 策略跑偏到奖励模型没见过的分布 | 加 KL,锚回参考模型 |
| 盲信奖励模型 | reward hacking,越训越会狡辩 | 有标准答案就用 RLVR;否则限制训练步数 |
| 以为 GRPO 是 R1 发明的 | 记错源头 | GRPO 出自 DeepSeekMath 2024-02 |
| 以为 DPO 是 Anthropic | 记错源头 | DPO 出自 Stanford 2023 |
| 以为 PPO 天生为 LLM 设计 | 不理解为什么要简化 | PPO 2017 是通用 RL,复杂度是搬过来的 |
这一模块你应该带走的
- SFT 只会模仿、没有负向信号——对齐补的就是”知好坏”;
- 偏好数据 = 成对比较(chosen/rejected),不是打分——2017 年就在 Atari 上验证过;
- 整条主线是一条”砍模型”线:PPO 4 个 → GRPO 砍 value(组内相对优势替代)→ RLVR 砍 reward(规则验证器替代);
- Â=(r−mean)/std 就是 GRPO 的全部秘密——你亲手拖过;
- DPO 是另一条岔路:重参数化 → 闭式解 → RLHF 塌缩成分类损失;
- 学出来的奖励会被 hack,规则不会——这是 RLVR 能一直训、推理能力能涌现的根本;
- 三个纠错带走:GRPO 出自 DeepSeekMath、DPO 出自 Stanford、PPO 原文没有 LLM/RM/KL。
概念索引(本模块登场): RLHF · 奖励模型 RM · PPO · KL 惩罚 · 参考模型 · 成对偏好 chosen/rejected · Bradley-Terry · DPO · 闭式解 · GRPO · 组内相对优势 · value model · RLVR · 可验证奖励 · reward hacking · 涌现推理
有不明白的? 随时在对话里问我,我会记到 05-问答记录/M5-对齐与RL-问答.md。
想往下钻,按你愿意花的时间选
本模块概念最密集。两个关键推导(DPO 跳过 RM、GRPO 去掉 value)需要交叉来源。
🎮 想更直观 10–30 分钟
🔬 想吃透原理 1–3 小时
📄 想读原文 按需
我替你排除了什么: CSDN/知乎大量“DPO vs PPO vs GRPO 完全指南”(同质化转载、标题党、只贴公式不讲动机)· 多数 R1 解读(复述型,且常把 GRPO 误记为 R1 发明)· “通俗讲解神奇算法”速通向 · 纯 API 的 Unsloth GRPO 教程 · 各类内容农场 SEO 站。
另注:李沐的 GRPO/R1 精读大概率不存在(多次检索未找到);中文 GRPO 深度缺口,用 RL Explainer 中文模式 + Raschka 英文组合填补。