斯坦福 CS336 从零构建大模型 (2025 春) - 第十五讲:对齐(SFT、RLHF 与 DPO)
斯坦福 CS336 从零构建大模型 (2025 春) - 第十五讲:对齐(SFT、RLHF 与 DPO)
文章目录
- 斯坦福 CS336 从零构建大模型 (2025 春) - 第十五讲:对齐(SFT、RLHF 与 DPO)
-
- 一、监督微调(SFT)与数据陷阱
- 二、RLHF 的必要性与数据困境
- 三、对齐底层算法:从 PPO 到 DPO
- 四、完整对齐流程
- 五、课堂 Q&A
-
- Q1:模型学会了「在需要的地方插入引用」难道不是好事吗?可以通过外接工具给它正确的引用,为什么强迫它学引用格式是错的?
- Q2:有没有人尝试过在预训练数据里插入「思考 Token」,让模型自我检查「这是一个事实,我真的知道吗?」?
- Q3:假设预训练数据里没有任何 Emoji,但 SFT 数据在所有回答末尾都加了大量 Emoji,模型最终会学会输出正确的 Emoji 吗?
- Q4:SFT 说不能教「新世界知识」,但 Mid-training 又模糊了这个边界,在 Mid-training 场景下后训练其实也是在灌输新知识对吧?
- Q5:能展开讲讲 On-policy 和 Off-policy 收集反馈数据的区别吗?
- Q6:为什么不直接用有标准答案的 Prompt 来对齐,而要让人类打分?
- Q7:像 Anthropic 那样用《宪法 AI》提供一套价值观,不就能自动化解决开放任务的评估了吗?
- Q8:用 LLM 给其他回答打分,它会不会对自己生成的回答有偏袒?
- Q9:模型自己生成回答又自己给自己反馈(Self-refinement),这种「左脚踩右脚」的迭代,到底能把模型能力提升多少?有上限吗?
- 六、复习题
- 七、参考答案
斯坦福 CS336 第十五讲的主题是大模型的对齐(Alignment)。预训练让模型学会了语言,但它本质上只是一个补全机器。这一讲讨论如何通过 SFT、RLHF、DPO 等技术,把它改造成一个能听懂指令、给出高质量回答的助手,以及这个过程中隐藏的种种陷阱。
一、监督微调(SFT)与数据陷阱
在 SFT 阶段,模型通过模仿专家演示来学习如何回答问题。
输入:「今天天气」
输出:「今天天气很好,适合出去...」
它只会续写,不会对话,也不会回答问题。SFT 的目标是把它改造成一个能听懂指令的助手。
SFT 本质上还是语言模型训练,只是换了训练数据:
预训练数据:大量无标注网络文本,目标是预测下一个 token
SFT 数据:(指令, 回答) 对,目标是给定指令预测正确的回答
[指令] 帮我写一封请假邮件
[回答] 尊敬的领导,我因身体不适...
[指令] 用 Python 写一个快速排序
[回答] def quicksort(arr): ...
重要细节:Loss 只算回答部分。 指令部分是已知条件,不需要预测,如果也算 Loss 会浪费模型容量。
SFT 数据的三大来源
现代 SFT 数据主要有三种范式:
| 来源 | 代表 | 优点 | 缺点 |
|---|---|---|---|
| 传统 NLP 任务聚合 | FLAN | 快速、便宜 | 回答极短,不符合真实聊天习惯 |
| 人类专家手写 | Open Assistant | 质量极高,含真实引用 | 成本极高,难以规模化 |
| AI 生成/知识蒸馏 | Alpaca、Open Hermes | 成本低、聊天感强 | 依赖闭源模型,可能继承偏差 |
目前开源界最主流的是第三种:用 GPT-4 等强模型自动生成指令和长篇回答。
核心痛点:幻觉陷阱(Hallucination Trap)
John Schulman 的警告:如果用包含深度知识和详尽引用的高质量 SFT 数据去微调模型,而这些知识模型在预训练阶段根本没见过,会发生什么?
对模型而言:
「瞎编一个看似权威的引用」带来的 Loss 惩罚
远远小于
「破坏输出结构、根本不写引用」带来的惩罚
→ 模型学到的是捷径:遇到复杂问题就胡编一个引用
→ 而不是真正掌握了知识
结论:单靠 SFT 强行灌输超出模型能力的知识,反而会引发严重的幻觉。
长度与格式偏见(Length Bias)
无论是人类裁判还是 AI 裁判,都表现出极其强烈的两种偏好:
- 偏好更长的输出
- 偏好列表排版(Bullet points)
这导致 SFT 数据和模型输出变得越来越长,但输出变长绝不代表真实推理能力变强了。
安全微调的微妙平衡
模型需要在两个极端之间取得平衡:
过于宽松:接受「帮我写诈骗邮件」这种有害请求
过于严格:拒绝「如何杀掉一个 Python 进程」这种正常技术问题
研究表明,甚至只需 500 条高质量的安全微调数据,就能显著改变模型的安全行为。
现代演进:Mid-training
前沿实验室不再把 SFT 仅留到最后一步。他们现在将海量高质量的指令数据直接混入预训练的后半阶段(学习率衰减/退火阶段),称为 Mid-training。MiniCPM 就是典型案例。
这样做能极大缓解灾难性遗忘,并更有效地激发模型的通用潜力。结果是:今天市面上发布的所谓「Base Model」,绝大多数其实已经隐式地经历过指令微调了。
二、RLHF 的必要性与数据困境
为什么 SFT 不够?
SFT 之后模型能听懂指令了,但还有一个问题:它只学会了「给出一个答案」,但不知道哪个答案更好。
问:如何减肥?
回答A:少吃多运动,保持规律作息,建议每周三次有氧运动...
回答B:不吃东西就行了
两个回答都符合指令,但质量天差地别。
SFT 的 Loss 函数感知不到这种语义层面的好坏。
生成-验证鸿沟(Generator-Validator Gap)
让专家从头写出完美的 SFT 长文回复成本极高。但是,比较两个现有回答的好坏,要比从头写容易得多。研究甚至发现,人类标注者经常认为 AI 生成的总结比自己亲手写的总结还要好。
这就是收集偏好数据(Pair-wise feedback)而非纯人工撰写 SFT 数据的核心动机。
人类标注的现实困境
时间与能力限制:在真实众包环境下(每道题仅给 1 分钟),标注者根本无法有效核查复杂的数学计算或深层事实。他们只能退而求其次,依赖肤浅的捷径——给看起来「更长、排版更规范」的答案投票,即使该答案包含严重的幻觉。
文化与主观偏见:InstructGPT 的标注者主要来自菲律宾和孟加拉国(仅 17% 是美国人),这导致模型的价值观潜移默化地向特定文化宗教信仰偏移。对齐数据的分布直接决定了模型最终的价值观。
AI 反馈(RLAIF)的崛起
由于人类标注又慢又贵还有偏见,业界开始转向使用 GPT-4 等强大模型作为裁判(如 Anthropic 的 Constitutional AI、Zephyr 7B、Tulu 3)。GPT-4 的评分与人类专家的一致性,已经等同于不同人类相互之间的一致性,且成本极低。
但使用 AI 裁判有一个必须警惕的问题:自我偏好偏差(Self-preference Bias)——大多数模型给自己的输出打分时都会偏高,必须在评估管线中专门处理。
三、对齐底层算法:从 PPO 到 DPO
数学基础:Bradley-Terry 模型
RLHF 的底层假设是 Bradley-Terry 模型:每一个输出背后都有一个看不见的标量「奖励(Reward)」,人类在 A 和 B 之间做选择,本质上是根据两者奖励差值进行的 Logistic 概率选择:
P(A 优于 B) = σ(reward(A) - reward(B))
RLHF 的核心目标是:寻找一个策略(Policy),使其最大化奖励,同时通过 KL 散度约束保证它不能偏离原始 SFT 参考模型太远(防止模型为了刷分而崩溃产生乱码)。
PPO(Proximal Policy Optimization):经典的痛
InstructGPT 使用了 PPO 算法。它极其复杂且不稳定,需要你单独训练一个专门的奖励模型(Reward Model),还需要计算优势函数(Advantage)、进行在线重要性采样校正、以及概率截断(Clipping)。工程实现简直是一场噩梦。
完整流程:
第一步:用偏好数据训练 Reward Model
输入 (指令, 回答) → 输出分数
第二步:用 PPO 更新语言模型
语言模型(Actor)生成回答
↓
Reward Model 打分
↓
Value Model 估计期望回报(优势函数)
↓
PPO 算法计算梯度(含概率截断 Clipping),更新语言模型
PPO 同时优化三个目标:
Loss = RL 奖励
- β × KL(当前模型 || SFT模型) ← 防止跑偏太远
+ 其他稳定项
需要同时维护四个模型(Actor、Critic、Reward Model、SFT 参考模型),显存占用极大,训练极不稳定,超参数极难调。
DPO(Direct Preference Optimization):优雅的数学替代
为了摆脱 PPO 的噩梦,DPO 横空出世并统治了目前的开源界。它完全抛弃了单独的奖励模型和复杂的强化学习采样过程。
DPO 的核心数学魔法:作者首先解出了带 KL 散度惩罚的最优策略闭式解。然后进行了反向求解——直接将「奖励(Reward)」等价替换为了「当前模型策略与 SFT 参考模型策略的对数概率之比(Log ratio)」:
最优模型生成 y 的概率 ∝ SFT模型概率 × e^(reward(y)/β)
反向求解得:
reward(y) = β × log[P_θ(y|x) / P_sft(y|x)] + 常数
重要意义:不需要单独训练 Reward Model,Reward 可以直接从语言模型本身算出来。
最后,将这个等价公式代回 Bradley-Terry 偏好模型中,原本极为复杂的强化学习优化问题,被极其精妙地转化为了一个简单的最大似然(监督学习分类)任务:
Loss_DPO = -log σ(
β × log[P_θ(y_w|x) / P_sft(y_w|x)]
- β × log[P_θ(y_l|x) / P_sft(y_l|x)]
)
模型只需要沿着梯度方向,提高被偏好(Chosen)回答的对数概率,同时压低被拒绝(Rejected)回答的对数概率即可。没有奖励模型,没有 RL,只有优雅的梯度下降!
两者对比
| PPO | DPO | |
|---|---|---|
| 需要 Reward Model | 是 | 否 |
| 同时运行的模型数 | 4个 | 2个 |
| 训练稳定性 | 差,超参数多 | 好,稳定 |
| 效果 | 通常更强 | 接近,但更简单 |
| 实际使用 | OpenAI GPT-4 | 大多数开源模型 |
四、完整对齐流程
预训练
↓ 海量文本,学会语言
SFT
↓ (指令, 回答) 对,学会听指令
偏好数据收集
↓ 人类两两比较,判断哪个回答更好
RLHF 或 DPO
↓ 用偏好信号让模型学会「什么是好回答」
最终模型
五、课堂 Q&A
Q1:模型学会了「在需要的地方插入引用」难道不是好事吗?可以通过外接工具给它正确的引用,为什么强迫它学引用格式是错的?
核心问题在于 Token 预测的底层机制。当你强迫模型输出一个它根本不知道的知识的引用时,「瞎编一个引用(幻觉)」带来的 Loss 惩罚,要远远小于「破坏输出格式、根本不写引用」带来的惩罚。因为 SFT 强行要求它必须填满这些结构化的 Token。长此以往,你其实是在鼓励模型走捷径去胡编乱造。如果规模足够大且模型本身确实知道这个事实,它会填入正确的引用。但如果 SFT 数据远超预训练模型自身的能力,这种强行灌输就会诱发严重的幻觉。
Q2:有没有人尝试过在预训练数据里插入「思考 Token」,让模型自我检查「这是一个事实,我真的知道吗?」?
这个想法非常有意思,但在纯粹的预训练阶段做这个是非常困难的。这听起来其实已经非常像强化学习了——比如斯坦福 Noah Goodman 团队做的 Quiet-STaR,就是让模型学习思考过程,对了就强化,错了就丢弃。预训练面对的是极其庞大且静态的数据集。要解决幻觉,模型必须是**反应式(Reactive)**的——必须根据模型当下的知识状态,来动态决定要不要计算这段 Token 的梯度。在静态的预训练阶段,你很难自适应地做到这一点,除非在预训练规模上直接跑 RL。
Q3:假设预训练数据里没有任何 Emoji,但 SFT 数据在所有回答末尾都加了大量 Emoji,模型最终会学会输出正确的 Emoji 吗?
这取决于 Emoji 出现的规律有多复杂。SFT 能够非常可靠地教会模型输出的**「风格(Style)」和「类型签名(Type Signature)」**。所以模型绝对会学会在末尾输出 Emoji。但至于输出的 Emoji 对不对(悲伤语境输出哭脸,开心语境输出笑脸),这取决于映射模式的复杂度和 SFT 数据量。底线是:它肯定会按格式输出 Emoji,但内容正不正确是个更复杂的开放问题。
Q4:SFT 说不能教「新世界知识」,但 Mid-training 又模糊了这个边界,在 Mid-training 场景下后训练其实也是在灌输新知识对吧?
没错。如果指令微调数据规模足够庞大、多样性足够高(就像 Mid-training 那样),它确实能够教会模型新的知识。传统上认为 SFT 不教知识,主要是因为以前的 SFT 数据量太小、分布太窄,不足以可靠地向参数中注入新的事实。现在的 Mid-training 确实正在改变这个游戏规则。
Q5:能展开讲讲 On-policy 和 Off-policy 收集反馈数据的区别吗?
**Off-policy(脱机)**数据是从「并非你当前正在训练的模型」那里收集来的数据(比如网上开源的偏好数据集,或者其他大模型的输出)。它能帮你描绘出一个宏观的反馈地形图。
**On-policy(同机/在线)**数据是让你当前正在训练的这个模型自己生成 A 和 B 两个回答,然后让裁判来打分。On-policy 明确地告诉模型:「就你现在的状态而言,你怎么做才能变得更好」,对于模型的精准修正极其重要。
Q6:为什么不直接用有标准答案的 Prompt 来对齐,而要让人类打分?
对于有绝对标准答案的领域(比如数学或代码),确实可以直接利用它们做验证,这就是下一节课要讲的可验证奖励的强化学习,效果非常好。但对齐要解决的往往是开放式任务(写一封道歉信、总结文章),这类任务有无数种正确的表达方式。当模型生成了一个截然不同但同样优秀的回答时,你很难通过静态数据集自动判断它是对是错,这就是为什么需要活人或大模型裁判介入。
Q7:像 Anthropic 那样用《宪法 AI》提供一套价值观,不就能自动化解决开放任务的评估了吗?
Anthropic 的宪法 AI(Constitutional AI)以及「协商民主式」对齐,确实在尝试用原则来自动化指导模型。给标注者提供参考资料、使用工具等 UI 干预也很有帮助。但这并不是能一刀切解决所有主观开放式评估难题的银弹(Silver bullet),这个问题依然非常棘手。
Q8:用 LLM 给其他回答打分,它会不会对自己生成的回答有偏袒?
是的,会产生非常强烈且极其容易被检测到的自我偏好偏差(Self-preference bias)。大多数模型给自己的输出打分时都会偏高。所以在构建评估管道时,必须极其小心地去纠正和处理这种偏见。
Q9:模型自己生成回答又自己给自己反馈(Self-refinement),这种「左脚踩右脚」的迭代,到底能把模型能力提升多少?有上限吗?
这是一个非常核心的前沿问题。从信息论的上限来看,这个空间极大——因为模型在预训练时吞噬了整个互联网的知识,这些知识以某种方式被压缩在权重里。通过自我博弈和不同的 Prompt 引导,你确实有可能「压榨」出模型原本隐藏的极强能力。但实际上这种自我改进的 Scaling laws 究竟是什么样的,目前仍然是一个非常活跃的经验性研究领域。
六、复习题
一、监督微调(SFT)与数据陷阱
- SFT 的三大数据流派:课程中展示了三种典型的指令微调数据来源(FLAN、Open Assistant、Alpaca),请简述它们各自的构造方式与核心优缺点。
- 幻觉陷阱(Hallucination Trap):根据 John Schulman 的观点,如果在 SFT 阶段强行用包含深度知识和复杂引用的高质量答案去微调模型,但这些事实并未存在于模型的预训练权重中,会导致什么严重的后果?为什么?
- 表面偏好与偏见(Length & Formatting Bias):在评估 SFT 模型的输出时,人类评估者和 AI 裁判通常会表现出哪两种强烈但与模型真实推理能力无关的「格式偏好」?
- Mid-training 的演进:为什么现代前沿大模型不再把 SFT 数据仅仅留到最后一步,而是将其大量混入预训练的最后阶段(退火/衰减期)?
二、强化学习与人类反馈(RLHF)的困境
- 生成-验证鸿沟(Generator-Validator Gap):既然已经有了 SFT,为什么业界还要耗费巨大精力去收集偏好数据并做强化学习?请从成本和人类认知特点的角度解释。
- 众包标注的现实困境:在真实的众包环境下(如每道题仅给 1 分钟),人类标注者在对比两个模型输出时面临的最大困难是什么?这导致他们往往依赖什么捷径来打分?
- 标注者的人口统计学偏差(Demographic Bias):InstructGPT 的早期偏好标注者中只有 17% 来自美国,大部分来自菲律宾和孟加拉国。这种标注者群体构成在模型对齐中引发了什么出人意料的价值观偏移现象?
- 自我偏好偏差(Self-preference Bias):当大模型对自己生成的输出进行打分时,必须极力警惕哪一种强烈的偏差?
三、对齐底层算法(PPO 与 DPO)
- Bradley-Terry 模型:RLHF 将人类对 A 和 B 两个回答的「偏好选择」转化为数学优化的底层假设是什么?它是如何关联隐藏的「奖励值(Reward)」和人类选择概率的?
- DPO 取代 PPO 的数学魔法:相比于 InstructGPT 使用的极其复杂、需要单独训练奖励模型的 PPO 算法,DPO 为何能统治目前的开源界?它是如何巧妙地将复杂的强化学习任务转化为简单的监督学习分类任务的?
七、参考答案
1. SFT 的三大数据流派?
- FLAN(聚合传统 NLP 任务):将各种分类、问答等传统任务强行拼成指令格式。缺点是回答通常极短(如只有一个词),非常不符合真实用户的聊天交互习惯。
- Open Assistant(人类专家手写):由热情的人类志愿者编写,包含详细的回答甚至真实的引用文献。质量极高,但收集成本极其高昂且极难规模化。
- Alpaca(AI 生成/知识蒸馏):利用 GPT-4 等更强大的模型自动生成指令和长篇回答。成本低、可扩展,且具有很强的「聊天感」,是目前开源界的主流范式。
2. 幻觉陷阱(Hallucination Trap)?
这会促使模型学会「胡编乱造(幻觉)」。从底层 Token 预测机制来看,「瞎编一个看似权威的引用」带来的 Loss 惩罚,远远小于「破坏输出结构、根本不写引用」带来的惩罚。SFT 会强迫模型去迎合这种长文本和引用的结构,当模型遇到不知道的复杂问题时,它学会的捷径就是伪造一个引用来完成任务。
3. 表面偏好与偏见(Length & Formatting Bias)?
人类和 AI 都表现出对更长的输出(Longer outputs)以及列表排版结构(Lists/Bullet points)的强烈偏好。这导致 SFT 模型的输出变得越来越长,但并不代表其真正的核心能力变强了。
4. Mid-training 的演进?
这种在预训练后期引入大量高质量指令数据的方法被称为 Mid-training。这样做不仅可以缓解「灾难性遗忘(Catastrophic forgetting)」,而且通过将指令更深地整合到预训练中,能更有效地激发模型的通用潜力。这意味着今天所谓的「基础模型(Base Model)」实际上已经隐式地经历过指令微调了。
5. 生成-验证鸿沟(Generator-Validator Gap)?
这是因为人类(包括模型本身)验证和比较两个现有回答的好坏,要比从头写出一个完美的回答容易(也便宜)得多。研究发现,即使是专家作家,有时也会认为 AI 生成的总结比自己亲手写的总结更好。因此,收集 Pair-wise 偏好反馈比收集纯人类高质量 SFT 数据更具成本效益。
6. 众包标注的现实困境?
在时间压力下,标注者根本无法有效核查深度事实的正确性或复杂的数学计算。这导致他们往往退而求其次,依赖肤浅的捷径——比如直接给看起来「更长、排版更规范」的答案投票,即使该答案包含了严重的幻觉事实。
7. 标注者的人口统计学偏差(Demographic Bias)?
由于对齐数据是由这些特定地区的标注者决定的,InstructGPT 的价值观潜移默化地出现了向东南亚宗教和特定地域文化观点对齐的偏移。这证明了收集反馈者的文化背景会直接决定模型最终输出的社会价值观。
8. 自我偏好偏差(Self-preference Bias)?
必须极力警惕自我偏好偏差(Self-preference bias)。绝大多数模型在给自己生成的输出打分时,都会存在强烈的偏袒心理,给出异常高的评分,这会严重污染评估管线的客观性。
9. Bradley-Terry 模型?
Bradley-Terry 模型的底层假设是:每一个文本输出背后都有一个看不见的标量「奖励值(Reward)」。当人类在 A 和 B 两个回答中做选择时,他们本质上是在做抛硬币的概率选择,而这个概率就是这两个答案隐藏奖励值之间的差值(Logistic 函数):P(A 优于 B) = σ(reward(A) - reward(B))。
10. DPO 取代 PPO 的数学魔法?
PPO 需要单独训练一个奖励模型并使用复杂的在线采样和截断。而 DPO 的数学魔法在于:它直接在闭式最优策略解中将「奖励(Reward)」等价替换为了「当前模型与 SFT 参考模型的对数概率之比(Log ratio)」。将这个替换带回 Bradley-Terry 模型后,原本复杂的强化学习问题,就被优雅地转化为了一个纯监督学习的最大似然任务——模型只需沿着梯度,提高被偏好答案的对数概率,压低被拒绝答案的对数概率,完全抛弃了单独的奖励模型和 RL 循环。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)