第 10 讲:后训练——SFT、RLHF、DPO

Natural Language Processing with Deep Learning · Lecture 10。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS224N Winter 2026 Lecture 8(Post-training);Winter 2025 Lecture 10(Post-training: RLHF, SFT, DPO)。和同目录 CS336 第 15 讲(SFT 与 RLHF)、第 16 讲(可验证奖励的强化学习)有重叠:本讲侧重直觉和推导,CS336 侧重大规模实现。 配套代码:code/lecture10/(导入第 9 讲的 lm_utils.py,并加载第 9 讲预训练的迷你 GPT) 预计阅读时间:4–5 小时(第 5 节的推导值得在纸上推一遍)


0. 本讲导航

0.1 学完本讲,你应该能够

  1. 说出为什么一个只做过预训练的模型不是好的”助手”,以及”对齐”想要达到的目标(有用、诚实、无害)。
  2. 解释指令微调(SFT):数据从哪里来、对话模板、为什么只在回复上计算损失,以及它的局限。
  3. 写出 Bradley–Terry 模型,解释为什么收集”两两比较”比收集”示范”更容易,以及奖励模型怎样训练。
  4. 写出 RLHF 的目标(奖励 − β·KL),解释 KL 项的作用,说出策略梯度和 PPO 的直觉。
  5. 从 RLHF 的目标出发推导 DPO:最优策略的闭式解 → 用策略表示奖励 → 代入 Bradley–Terry → 配分函数抵消。
  6. 解释奖励黑客和过度优化(古德哈特定律)、best-of-n 的 KL、长度偏见、谄媚、多样性下降等问题。
  7. 说出 RLAIF、宪法 AI 的思路,以及今天后训练的大致流程。

0.2 先修知识

知识点用在哪里最低要求
第 9 讲全讲预训练模型、微调、零样本;lm_utils 的采样和对数概率
第 8 讲第 3、6 节影评数据和打分规则 sentiment_score;分布偏移;随机种子
第 5 讲第 4 节语言模型给一个序列的概率 = 每个词的条件概率之积
概率第 4、5 节KL 散度 KL(p∥q)=∑plog⁡(p/q)\text{KL}(p\|q) = \sum p \log(p/q);sigmoid;期望

0.3 本讲地图

第1节  动机:从"续写"到"助手"
第2节  指令微调(SFT)                                 ← 代码 01
第3节  人类偏好与奖励模型                              ← 代码 02
第4节  RLHF:用强化学习优化奖励                        ← 代码 03
第5节  DPO:不用强化学习的偏好优化(本讲重点)          ← 代码 03、04
第6节  问题:奖励黑客、过度优化、长度偏见、谄媚……       ← 代码 03、04
第7节  RLAIF 与宪法 AI
第8节  今天的后训练流程
第9–13节 小结、与作业的关系、练习、延伸阅读、下一讲预告

本讲的玩具世界:基座模型是第 9 讲在无标签评论上预训练的迷你 GPT。我们要教它听三种指令(写正面评论、写负面评论、判断评论的褒贬),再让它在”写正面评论”这个任务上更符合”人类的偏好”。这里的”人类”是一个模拟的标注者,他心里有一个金标准奖励(post_utils.gold_reward):喜欢正面的评论,但讨厌超过 30 个词的啰嗦。这和 DPO 论文第一个实验的设计一样——在 IMDb 影评上,用一个情感分类器充当”金标准”。

关于本讲的实验数字:03 号代码(玩具策略,精确计算)在编写讲义时完整运行过,讲义引用了它的实际输出。01、02、04 号代码需要训练语言模型,编写时只做了冒烟测试,讲义中只描述预期的趋势,具体数字请以你自己运行的结果为准。


1. 动机:从”续写”到”助手”

1.1 预训练模型只会续写

预训练模型学的是”网上的文本接下来通常是什么”。问它一个问题,它不一定回答——它可能续写出更多的问题(因为网上很多问题后面跟着的是别的问题,比如一份考试题),可能续写出一段论坛上的争吵,也可能一本正经地编造。InstructGPT 论文(Ouyang 等 2022)里有一个经典的例子:让 GPT-3 “向一个 6 岁的孩子解释登月”,它续写出的是几个类似的问题(“向一个 6 岁的孩子解释万有引力……”)。

我们想要的是一个助手:理解用户的意图,按要求完成任务。Askell 等(2021)把目标概括为三个词:

  • 有用(helpful):真正帮用户解决问题;
  • 诚实(honest):不编造,不确定时说不确定;
  • 无害(harmless):不帮助做有害的事,不冒犯人。

让模型的行为符合这些目标,叫作对齐(alignment)。预训练之后、为了对齐而做的各种训练,统称后训练(post-training)。

1.2 后训练的经典流程

InstructGPT(以及之后的 ChatGPT)确立了一个三步流程:

预训练模型
   │ ① 指令微调(SFT):在人写的"指令 + 示范回答"上做监督学习
   ▼
SFT 模型
   │ ② 收集人类偏好:对同一个指令的几个回答,让人排序;训练一个奖励模型
   │ ③ 强化学习(PPO):优化模型,让奖励模型给的分数高,同时不要离 SFT 模型太远
   ▼
对齐后的模型

效果非常显著:在 InstructGPT 的人工评估里,13 亿参数的 InstructGPT 的回答,比 1750 亿参数的 GPT-3 更受标注者欢迎。后训练用很少的计算(相对于预训练)带来了巨大的可用性提升。

本讲依次讲这三步,然后讲一个绕过第 ② 步奖励模型和第 ③ 步强化学习的方法:DPO。


2. 指令微调(SFT)

2.1 做法

监督微调(Supervised Fine-Tuning,SFT),也叫指令微调(instruction tuning):准备一批”指令 + 示范回答”,在上面继续训练语言模型。损失和预训练完全一样——下一个词的交叉熵——只是数据变了。

LSFT=−∑t∈回答log⁡πθ(yt∣x,y<t)\mathcal{L}_{\text{SFT}} = -\sum_{t \in \text{回答}} \log \pi_\theta(y_t \mid x, y_{<t})

xx 是指令(提示),yy 是示范回答。

2.2 只在回答上计算损失

注意求和只在回答的位置上进行。SFT 要教的是”看到这样的指令,应该这样回答”,而不是”学会写出用户的指令”。实现时,把提示部分的目标设为”忽略”即可(我们的代码里设为 0,交叉熵用 ignore_index 跳过)。回答末尾的结束符号也要计算损失——模型必须学会”说完了就停”。

动手:代码 01_sft.py 演示 1 打印了两条 SFT 样本和它们的损失掩码:

<s> <user> write a negative review <assistant> the story was quite painful . ... </s>
 ·    ·      ·   ·    ·       ·        ·        ^^^   ^^^^^ ^^^ ^^^^^ ^^^^^^^ ^ ... ^^^^

只有 <assistant> 之后的回复和最后的 </s> 计算损失。

2.3 对话模板

多轮对话被写成一段带特殊符号的文字,例如:

<|system|>你是一个乐于助人的助手。<|end|>
<|user|>法国的首都是哪里?<|end|>
<|assistant|>巴黎。<|end|>
<|user|>它有多少人口?<|end|>
<|assistant|>

不同模型的模板不同(ChatML、LLaMA 的 [INST] 等),但思路一样:用特殊符号标出”谁在说话”。这些符号在预训练时从没出现过,模型是在 SFT 阶段才学会它们的含义的。使用一个模型时,必须用它训练时的模板,否则效果会明显变差。

我们的玩具版本只有两个角色符号 <user>、<assistant>(第 8 讲的词表里预留了它们)。

2.4 SFT 数据从哪里来

来源例子特点
人工撰写的示范InstructGPT 雇用标注者写了约一万多条示范质量高,但贵、慢
把已有的 NLP 数据集改写成指令格式FLAN(Wei 等 2021)、T0(Sanh 等 2021)、Super-NaturalInstructions(1600 多个任务)规模大、任务多样;但回答往往很短、很”机械”
用更强的模型生成(蒸馏)Alpaca(2023):用 OpenAI 的模型生成 5.2 万条指令和回答,微调 LLaMA便宜;但会继承强模型的错误和风格,可能违反服务条款
少量精心挑选的数据LIMA(Zhou 等 2023):只用 1000 条高质量示范说明质量比数量重要

FLAN 等工作发现:在很多种任务上做指令微调之后,模型在没见过的任务上的零样本表现也明显提高——它学会的不是某个任务,而是”按指令办事”这种一般的行为。

2.5 表面对齐假说

LIMA 的论文提出了一个有影响的观点:模型的知识和能力几乎都来自预训练,对齐主要是教它用什么格式、什么风格和用户交流。 所以只需要很少的高质量示范。

动手:代码 01 演示 2 比较三个模型听不听指令(SFT 数据 3000 条,三种指令各约三分之一):

模型写正面评论写负面评论判断褒贬会自己停下
只预训练(没有 SFT)
没有预训练,直接 SFT
预训练 + SFT

(运行后填入你的结果。)预期:只预训练的模型不认识 <user>、<assistant>,基本是在随便续写,写正面 / 负面的比例在 50% 附近,判断褒贬接近瞎猜;预训练 + SFT 三个任务都应该做得很好;没有预训练、直接 SFT 的模型,用同样的数据效果应该明显更差——尤其是判断褒贬,它没见过足够多的评论,不知道 superb、tedious 是什么意思。这正是表面对齐假说的玩具版。

2.6 SFT 的局限

  1. 示范很贵:写一个好回答比判断哪个回答好难得多,尤其是长的、专业的回答。
  2. 天花板是示范者:模型学的是模仿示范者,很难超过示范者的水平。
  3. 开放式任务有很多好答案:交叉熵把示范回答当作唯一正确的答案,对其他同样好的回答一视同仁地”惩罚”。
  4. 可能鼓励编造:如果示范回答里包含模型不知道的知识(比如一个它从没见过的冷门事实),SFT 实际上是在教它”即使不知道,也要自信地说出一个具体的答案”——这可能加重幻觉。

这些局限促使人们寻找另一种利用人类意见的方式:比较。


3. 人类偏好与奖励模型

3.1 为什么收集”比较”

与其让人写出好的回答,不如让模型生成几个回答,让人选更好的那个:

  • 容易:判断比创作容易得多,即使是非专家也能对专业的回答做出合理的比较;
  • 一致:让人给回答打 1~10 分,不同的人尺度不同(有人习惯给 7 分,有人习惯给 4 分),同一个人前后也不一致;比较”哪个更好”要稳定得多;
  • 能超过示范者:模型可以生成人写不出来的好回答,人只需要认出它更好。

但人类偏好的噪声仍然很大:在 InstructGPT 的数据里,不同标注者之间的一致率只有约 73%。这个数字也是任何奖励模型准确率的大致上限。

3.2 Bradley–Terry 模型

假设每个回答 yy 有一个”真实的好坏” r(y)r(y),标注者比较 y1y_1 和 y2y_2 时,选 y1y_1 的概率是

P(y1≻y2)=σ(r(y1)−r(y2))=11+e−(r(y1)−r(y2))P(y_1 \succ y_2) = \sigma\big(r(y_1) - r(y_2)\big) = \frac{1}{1 + e^{-(r(y_1) - r(y_2))}}

这是 Bradley–Terry 模型(1952)。注意只有分数的差有意义:所有分数加同一个常数,概率不变。国际象棋的 Elo 等级分是同一个模型(P(A 胜)=1/(1+10−(RA−RB)/400)P(A \text{ 胜}) = 1/(1 + 10^{-(R_A - R_B)/400}));聊天机器人排行榜(如 Chatbot Arena)也用它从大量”两两对比”的投票中给每个模型算分(第 13 讲)。

动手:代码 02_reward_model.py 演示 1 打印了分数之差和选择概率的关系:差 0 时 0.500,差 1 时 0.731,差 2 时 0.881,差 5 时 0.993。

3.3 奖励模型

有了偏好数据 {(x,yw,yl)}\{(x, y_w, y_l)\}(ywy_w 是被选中的,yly_l 是没被选中的),训练一个奖励模型 rϕ(x,y)r_\phi(x, y),最大化 Bradley–Terry 模型下的似然:

LRM=−E(x,yw,yl)[log⁡σ(rϕ(x,yw)−rϕ(x,yl))]\mathcal{L}_{\text{RM}} = -\mathbb{E}_{(x, y_w, y_l)} \Big[\log \sigma\big(r_\phi(x, y_w) - r_\phi(x, y_l)\big)\Big]

这其实就是在”两个回答的差”上做逻辑回归。真实的奖励模型通常是一个预训练语言模型(常常就是 SFT 模型本身)去掉输出层,换成一个输出标量的线性层:读入”提示 + 回答”,在最后一个位置输出一个分数。

动手:代码 02 演示 2~4。偏好数据来自 SFT 模型对”write a positive review”的回答,模拟的标注者按金标准奖励、用 Bradley–Terry 模型选择。为了能直接看清它学到了什么,我们的奖励模型是一个最简单的词袋线性模型:rϕ(y)=w⋅词频(y)r_\phi(y) = w \cdot \text{词频}(y)。

预期:

  • 标注者选中”金标准奖励更高的那个”的比例明显低于 100%(两个回答差不多好时几乎是随机选的)——这是奖励模型准确率的上限;
  • 偏好数据越多,奖励模型越准,但不会超过这个上限;
  • 权重最大的词是褒义词和 loved、recommended 这样的总结词,最小的是贬义词;
  • 但它是词袋模型,看不到词序(会冤枉 “not boring”),也没有”长度”的概念。

3.4 奖励模型只在它见过的分布上可靠

奖励模型是在特定分布的回答(SFT 模型的回答)上训练的。如果我们用它去优化一个模型,这个模型会被推向奖励模型分数高的地方——很可能是奖励模型没见过的回答。在那里,奖励模型的判断可能完全不可靠。

动手:代码 02 演示 4 把三条正面回答拼成一条又长又啰嗦的回答。预期:奖励模型给它的分数更高(褒义词更多了),金标准奖励却因为啰嗦而更低。(在编写讲义时的冒烟测试里,这个方向已经出现了,具体数字请以完整运行的结果为准。)

这是第 6 节”过度优化”的根源。


4. RLHF:用强化学习优化奖励

4.1 目标

有了奖励模型 rr,我们希望模型 πθ\pi_\theta 生成的回答得分高。但不能只追求得分,还要加一个约束:不要离参考模型(SFT 模型)πref\pi_{\text{ref}} 太远:

max⁡πθ Ex∼D, y∼πθ(⋅∣x)[r(x,y)]−β KL(πθ(⋅∣x) ∥ πref(⋅∣x))\max_{\pi_\theta}\ \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi_\theta(\cdot|x)}\big[r(x, y)\big] - \beta\, \text{KL}\big(\pi_\theta(\cdot|x)\,\big\|\,\pi_{\text{ref}}(\cdot|x)\big)

β\beta 控制两者的权衡。

4.2 为什么需要 KL 项

  1. 奖励模型不完美(第 3.4 节):离 SFT 模型的分布越远,奖励模型越不可靠。KL 项把优化限制在奖励模型可信的区域内。
  2. 防止奖励黑客:没有约束时,模型可能找到奖励模型的漏洞——生成一些奇怪的、重复的、但奖励模型打高分的文字。
  3. 保持语言质量和多样性:SFT 模型说的是流利的人话,离它太远,可能语法崩坏、只会说几句”讨好”的话。

4.3 最优解有闭式

这个目标的最优解可以直接写出来(推导见第 5.1 节):

π∗(y∣x)=1Z(x) πref(y∣x) exp⁡ ⁣(r(x,y)β),Z(x)=∑yπref(y∣x)exp⁡ ⁣(r(x,y)β)\pi^*(y|x) = \frac{1}{Z(x)}\, \pi_{\text{ref}}(y|x)\, \exp\!\Big(\frac{r(x, y)}{\beta}\Big), \qquad Z(x) = \sum_y \pi_{\text{ref}}(y|x) \exp\!\Big(\frac{r(x,y)}{\beta}\Big)

在参考模型的基础上,按 exp⁡(r/β)\exp(r/\beta) 重新加权。β\beta 越小,越”贪”奖励。但 Z(x)Z(x) 要对所有可能的回答求和——回答有天文数字那么多种,算不出来,所以不能直接用这个公式,只能用强化学习去逼近它。

动手:代码 03_rlhf_vs_dpo_toy.py 把问题缩小到极致:一个提示、6 种可能的回答。参考模型和真实奖励:

回答正面、简洁正面、啰嗦中性有夸有骂负面跑题
真实奖励 rr3.02.00.00.5−2.0−1.0
πref\pi_{\text{ref}}0.100.150.300.250.150.05

演示 1:不同 β\beta 下的最优策略(参考模型本身的期望奖励是 0.38):

β\beta期望奖励KL(π∗∥πref)\text{KL}(\pi^*\|\pi_{\text{ref}})π∗\pi^*
100.580.0100.13 0.17 0.29 0.25 0.12 0.04
21.400.2510.29 0.26 0.19 0.21 0.04 0.02
12.170.8160.52 0.29 0.08 0.11 0.01 0.00
0.52.781.6600.81 0.17 0.01 0.01 0.00 0.00
0.22.992.2420.99 0.01 0.00 0.00 0.00 0.00
0.053.002.3031.00 0.00 0.00 0.00 0.00 0.00

β\beta 越小,概率越集中到奖励最高的回答上,期望奖励越高,KL 也越大。还要注意:π∗∝πref⋅exp⁡(⋯ )\pi^* \propto \pi_{\text{ref}} \cdot \exp(\cdots),参考模型给概率 0 的回答,π∗\pi^* 也给 0。RLHF 只能在 SFT 模型”会说”的回答里重新分配概率,不能凭空创造新的能力。

4.4 策略梯度与 PPO

怎样用梯度下降优化”采样出来的回答的期望奖励”?采样这一步不可导。策略梯度(REINFORCE)给出了一个巧妙的公式:

∇θ Ey∼πθ[R(y)]=Ey∼πθ[R(y) ∇θlog⁡πθ(y)]\nabla_\theta\, \mathbb{E}_{y \sim \pi_\theta}[R(y)] = \mathbb{E}_{y \sim \pi_\theta}\big[R(y)\, \nabla_\theta \log \pi_\theta(y)\big]

直觉:采样一些回答,奖励高的回答,提高它的概率;奖励低的,降低它的概率。几个关键的改进:

  • 基线(baseline):用 R(y)−bR(y) - b 代替 R(y)R(y),bb 是平均奖励的估计。不改变梯度的期望,但大大减小方差——“比平均好”的才提高概率。
  • KL 惩罚摊到每个样本上:R(y)=r(y)−β(log⁡πθ(y)−log⁡πref(y))R(y) = r(y) - \beta(\log \pi_\theta(y) - \log \pi_{\text{ref}}(y))。实际中常常按词元计算(每个词元一个 KL 惩罚,最后一个词元加上奖励模型的分数)。
  • PPO(Proximal Policy Optimization,Schulman 等 2017):用一个价值模型估计”从这里开始期望能得多少奖励”,作为更精细的基线(优势函数);并且裁剪每次更新的幅度(新旧策略的概率比限制在 [1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon] 内),防止一步走得太远。

动手:代码 03 演示 2 在玩具策略上用 REINFORCE(带基线,KL 惩罚摊到每个样本上)优化 β=0.5\beta = 0.5 的 RLHF 目标,3000 步之后得到的策略和闭式最优解 π∗=(0.815,0.165,0.006,0.014,0.000,0.000)\pi^* = (0.815, 0.165, 0.006, 0.014, 0.000, 0.000) 完全一致(总变差距离 0.000)。

真实的 RLHF 比这复杂得多:每一步都要用当前模型生成大量文本、用奖励模型打分、用价值模型估计优势。训练时内存里要同时放四个模型(策略、参考模型、奖励模型、价值模型),对超参数很敏感,不稳定,工程上很难。这促使人们寻找更简单的方法。


5. DPO:不用强化学习的偏好优化

DPO(Direct Preference Optimization,Rafailov 等 2023)的核心想法:RLHF 目标的最优解有闭式(第 4.3 节);把它反过来,用策略来表示奖励,再代入 Bradley–Terry 模型——就得到一个可以直接在偏好数据上优化的损失,不需要单独的奖励模型,也不需要强化学习。

5.1 第一步:最优策略的闭式

对固定的 xx(下面省略 xx),把 RLHF 的目标改写:

Ey∼π[r(y)]−β KL(π∥πref)=Ey∼π[r(y)−βlog⁡π(y)πref(y)]=−β Ey∼π[log⁡π(y)πref(y)exp⁡(r(y)/β)]=−β Ey∼π[log⁡π(y)π∗(y)]+βlog⁡Z=−β KL(π∥π∗)+βlog⁡Z\begin{aligned} \mathbb{E}_{y \sim \pi}[r(y)] - \beta\, \text{KL}(\pi \| \pi_{\text{ref}}) &= \mathbb{E}_{y \sim \pi}\Big[r(y) - \beta \log \frac{\pi(y)}{\pi_{\text{ref}}(y)}\Big] \\ &= -\beta\, \mathbb{E}_{y \sim \pi}\Big[\log \frac{\pi(y)}{\pi_{\text{ref}}(y) \exp(r(y)/\beta)}\Big] \\ &= -\beta\, \mathbb{E}_{y \sim \pi}\Big[\log \frac{\pi(y)}{\pi^*(y)}\Big] + \beta \log Z \\ &= -\beta\, \text{KL}(\pi \| \pi^*) + \beta \log Z \end{aligned}

其中 π∗(y)=πref(y)exp⁡(r(y)/β)/Z\pi^*(y) = \pi_{\text{ref}}(y) \exp(r(y)/\beta) / Z(第三行是把分母乘、除以 ZZ)。βlog⁡Z\beta \log Z 和 π\pi 无关;KL 散度非负,当且仅当 π=π∗\pi = \pi^* 时为 0。所以最大值在 π=π∗\pi = \pi^* 时取得。

5.2 第二步:用策略表示奖励

把闭式解两边取对数,解出 rr:

r(y)=βlog⁡π∗(y)πref(y)+βlog⁡Zr(y) = \beta \log \frac{\pi^*(y)}{\pi_{\text{ref}}(y)} + \beta \log Z

任何一个奖励函数,都对应一个最优策略;反过来,最优策略也确定了奖励(差一个只和 xx 有关的常数 βlog⁡Z(x)\beta \log Z(x))。

5.3 第三步:代入 Bradley–Terry,配分函数抵消

Bradley–Terry 模型只用到两个回答的奖励之差:

r(yw)−r(yl)=βlog⁡π∗(yw)πref(yw)−βlog⁡π∗(yl)πref(yl)r(y_w) - r(y_l) = \beta \log \frac{\pi^*(y_w)}{\pi_{\text{ref}}(y_w)} - \beta \log \frac{\pi^*(y_l)}{\pi_{\text{ref}}(y_l)}

βlog⁡Z\beta \log Z 抵消了! 那个算不出来的配分函数消失了。于是偏好的概率可以完全用策略表示。把 π∗\pi^* 换成我们要训练的 πθ\pi_\theta,对偏好数据做最大似然,就得到 DPO 的损失:

LDPO(θ)=−E(x,yw,yl)[log⁡σ(βlog⁡πθ(yw∣x)πref(yw∣x)−βlog⁡πθ(yl∣x)πref(yl∣x))]\mathcal{L}_{\text{DPO}}(\theta) = -\mathbb{E}_{(x, y_w, y_l)}\left[\log \sigma\left(\beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)}\right)\right]

只需要计算四个对数概率:πθ\pi_\theta 和 πref\pi_{\text{ref}} 分别给被选中、没被选中的回答的概率(πref\pi_{\text{ref}} 的两个可以预先算好)。一个分类损失,一次前向和反向传播,没有采样、没有奖励模型、没有价值模型。 对语言模型,log⁡π(y∣x)\log \pi(y|x) 就是回答里每个词元的对数概率之和——和 SFT 一样,只在回答部分求和(第 9 讲的 sequence_logprob)。

5.4 梯度在做什么

记 r^θ(y)=βlog⁡πθ(y)πref(y)\hat{r}_\theta(y) = \beta \log \frac{\pi_\theta(y)}{\pi_{\text{ref}}(y)}(“隐式奖励”),DPO 损失的梯度是

∇θLDPO=−β E[σ(r^θ(yl)−r^θ(yw))⏟模型排错得越离谱,权重越大 (∇θlog⁡πθ(yw)⏟提高选中回答的概率−∇θlog⁡πθ(yl)⏟降低没选中回答的概率)]\nabla_\theta \mathcal{L}_{\text{DPO}} = -\beta\, \mathbb{E}\Big[\underbrace{\sigma\big(\hat{r}_\theta(y_l) - \hat{r}_\theta(y_w)\big)}_{\text{模型排错得越离谱,权重越大}}\ \big(\underbrace{\nabla_\theta \log \pi_\theta(y_w)}_{\text{提高选中回答的概率}} - \underbrace{\nabla_\theta \log \pi_\theta(y_l)}_{\text{降低没选中回答的概率}}\big)\Big]

每一对偏好数据:提高被选中回答的概率、降低没被选中回答的概率,权重是”模型当前把这一对排错的程度”。已经排对、而且差距很大的对,几乎不再贡献梯度。

5.5 玩具实验:DPO 和 RLHF 优化的是同一个目标

动手:代码 03 演示 3。偏好数据从 πref\pi_{\text{ref}} 采样、按 Bradley–Terry 模型标注(两个回答相同的对被丢掉,所以实际对数略少)。β=0.5\beta = 0.5:

偏好数据(对)和 π∗\pi^* 的总变差距离期望奖励KL(π∥πref)\text{KL}(\pi\|\pi_{\text{ref}})
(π∗\pi^* 本身)02.781.660
770.7632.051.630
7830.1602.972.158
7,9520.0202.811.716
79,1100.0002.781.660

演示 4:从 DPO 训练出的策略里”读出”隐式奖励 βlog⁡(π/πref)\beta \log(\pi/\pi_{\text{ref}}),减去均值后和真实奖励几乎完全一样:

回答正面、简洁正面、啰嗦中性有夸有骂负面跑题
真实奖励 − 均值2.581.58−0.420.08−2.42−1.42
隐式奖励 − 均值2.591.59−0.410.10−2.43−1.43

偏好数据足够多时,DPO 收敛到 RLHF 的最优策略——两者优化的是同一个目标。DPO 论文的标题 Your Language Model is Secretly a Reward Model 说的就是演示 4:训练好的策略本身就隐含着一个奖励模型。

但也要注意数据少的时候:77 对数据时,DPO 的策略离 π∗\pi^* 很远;783 对时,它甚至比 π∗\pi^* 走得更远(KL 2.158 > 1.660)。有限的偏好数据里,某些回答”碰巧总是赢”,DPO 就会过度相信它们。下一节是这个问题的极端情形。

5.6 DPO 的一个陷阱

动手:代码 03 演示 5。偏好数据没有任何噪声(永远选真实奖励更高的那个),其余设置和演示 3 相同。π∗\pi^* 给”正面、简洁”的概率是 0.81,KL = 1.66:

训练步数0400800120016002000
P(正面、简洁)0.1000.9270.9870.9960.9980.999
KL(π∥πref)\text{KL}(\pi\|\pi_{\text{ref}})0.002.002.232.272.292.30

DPO 一路把”正面、简洁”的概率推向 1,远远超过 π∗\pi^*。原因:如果数据里 A 总是赢 B,Bradley–Terry 的最大似然估计会认为 A 比 B 好”无穷多”;DPO 的损失只有在 log⁡(π(A)/π(B))→∞\log(\pi(A)/\pi(B)) \to \infty 时才降到 0。β\beta 只改变”走多快”,挡不住”走多远”——RLHF 里 KL 惩罚的约束作用,在 DPO 里只在偏好有噪声时才起作用。真实数据里每一对回答通常只被标注一次,“永远是这个赢”的情况非常普遍。IPO(Azar 等 2023)等方法就是为了修补这一点;实践中常用早停、较大的 β\beta、或者额外加上 SFT 损失。

5.7 在迷你 GPT 上做 DPO

动手:代码 04_dpo_lm.py 演示 1。参考模型是 01 号文件的 SFT 模型,偏好数据 3000 对(来自 SFT 模型的回答,按金标准奖励模拟标注),分别用 β=0.1\beta = 0.1 和 0.50.5 做 DPO,然后从每个模型采样 300 条回答:

模型金标准奖励奖励模型分数正面的比例平均长度超过 30 词多样性KL
SFT(参考模型)0
DPO,β=0.1\beta = 0.1
DPO,β=0.5\beta = 0.5

(运行后填入你的结果。)预期:DPO 之后金标准奖励和奖励模型的分数都比 SFT 模型高;β\beta 越小,KL 越大,奖励通常越高,多样性也可能下降更多。注意”长度”一列:如果 DPO 让回答变长、超过 30 个词的比例上升,金标准奖励就会被扣分——这就是第 6.2 节的长度偏见。

5.8 DPO 与 PPO 的比较

PPO(RLHF)DPO
需要奖励模型是否(隐含在策略里)
训练时生成文本是(在线,on-policy)否(只用固定的偏好数据,离线)
内存里的模型策略、参考、奖励、价值 4 个策略、参考 2 个
稳定性和实现难度难简单(一个分类损失)
能利用新生成的数据能(每一步都在自己的分布上学习)不能(除非反复采样、标注,做”在线 DPO”)

DPO 发表后迅速流行,很多开源模型用它做偏好优化。但它是离线的:偏好数据来自 SFT 模型,训练过程中策略的分布在变,数据却不变。很多研究发现,在线的强化学习方法在最前沿的模型上仍然更强。DPO 之后还出现了很多变体(IPO、KTO、SimPO、ORPO 等),各自修补某个缺点。今天的后训练往往是几种方法的组合(第 8 节)。


6. 问题:奖励黑客、过度优化、长度偏见、谄媚……

6.1 过度优化:古德哈特定律

“当一个指标变成目标,它就不再是一个好的指标。“——古德哈特定律(Goodhart’s law)

奖励模型只是人类偏好的一个近似。优化得越狠,模型越可能找到奖励模型和真实偏好不一致的地方,去”讨好”奖励模型而不是人类——奖励黑客(reward hacking)。Gao 等(2022)系统地测量了这个现象:用一个大的”金标准”奖励模型代替人类、一个小的”代理”奖励模型用于优化,随着优化的程度(用和参考模型的 KL 衡量)增加,代理奖励一直上升,金标准奖励先升后降。

衡量”优化程度”最简单的办法是 best-of-n:从参考模型采样 nn 个回答,用奖励模型挑分数最高的。它不需要训练任何东西,而且它和参考模型的 KL 有一个简单的公式(严格说是上界):

KL(πbest-of-n ∥ πref)≈log⁡n−n−1n\text{KL}(\pi_{\text{best-of-}n} \,\|\, \pi_{\text{ref}}) \approx \log n - \frac{n-1}{n}

动手:代码 03 演示 6。2000 种可能的回答,真实奖励服从标准正态分布;参考模型是一个”长尾”分布(少数回答很常见,大多数很罕见)。奖励模型从 1000 对偏好数据中拟合,只有 710 种回答至少出现过一次;它和真实奖励的相关系数,在参考模型常说的回答上是 0.54,不加权只有 0.27。best-of-n 的分布可以精确计算(随机种子 0):

nn1416642561024409616384
KL(精确)00.641.843.174.535.816.346.35
log⁡n−(n−1)/n\log n - (n-1)/n00.641.843.174.555.937.328.70
奖励模型的分数0.042.754.786.207.007.367.447.44
真实奖励−0.020.550.971.251.401.110.990.99
直接用真实奖励来选−0.021.031.742.232.542.712.832.95

20 个随机种子的平均(每个种子重新造回答、重新采样偏好数据、重新训练奖励模型):

nn1416642561024409616384
奖励模型的分数−0.012.564.535.896.747.157.277.29
真实奖励0.000.510.821.011.091.151.241.19

20 个种子里有 8 个,真实奖励在 n=16384n = 16384 时比它的最高点低了 0.1 以上。

几点观察:

  • 奖励模型的分数随 nn 一直上升——我们在优化的就是它。
  • 真实奖励一开始也上升(奖励模型大体上是对的),但涨得慢得多,很快停滞,两者的差距越拉越大;在不少种子里(比如种子 0,n=256n = 256 之后),真实奖励不升反降。被选中的往往是奖励模型”看走眼”的回答:很罕见、在偏好数据里只出现过一两次、估计误差很大。
  • 直接用真实奖励来选,真实奖励一直上升——问题不在 best-of-n 本身,而在奖励模型不完美。
  • KL 公式在 nn 不太大时和精确值一致;nn 很大时,回答的种类有限,best-of-n 几乎总是选中奖励模型打分最高的那个回答 y∗y^*,精确的 KL 趋于上限 −log⁡πref(y∗)-\log \pi_{\text{ref}}(y^*)(种子 0 里 πref(y∗)≈0.00175\pi_{\text{ref}}(y^*) \approx 0.00175,上限约 6.35,表中最后两列已经贴近它),公式不再适用。
  • 也有一些种子里真实奖励一直上升:过度优化是一种风险,不是必然。

动手:代码 04 演示 2 在迷你 GPT 上做同样的实验:从 SFT 模型采样,用 02 号文件的词袋奖励模型挑最好的。预期:奖励模型的分数随 nn 一直上升;被挑中的回答越来越长(褒义词更多 → 词袋奖励模型更喜欢),而金标准对超过 30 个词的回答扣分,所以”用奖励模型选”的金标准奖励涨得比奖励模型慢,nn 很大时可能停滞甚至下降;直接用金标准选则一直上升。

6.2 长度偏见

人类标注者(以及在人类数据上训练的奖励模型)往往偏爱更长的回答:更长的回答看起来更详细、更用心,即使内容并没有更好。RLHF 之后的模型回答越来越长,一部分”进步”其实只是变长了(Singhal 等 2023,A Long Way to Go)。评估时也要注意:用大模型当评委时同样有长度偏见(第 13 讲),常见的做法是控制长度后再比较。

我们的玩具世界故意设计了这个陷阱:金标准奖励惩罚啰嗦,但偏好数据里长度和”更正面”相关,词袋奖励模型就会学到”越长越好”。

6.3 多样性下降与校准变差

RLHF 把概率集中到奖励高的回答上(第 4.3 节的 π∗\pi^*),代价是多样性下降:模型反复使用少数几种安全的、讨好的说法(“模式坍缩”)。另一个代价是校准:GPT-4 的技术报告指出,预训练模型给出的概率和实际正确率吻合得很好(问它”有多大把握”,它的把握和实际准确率一致),后训练之后这种校准明显变差了。

6.4 谄媚

谄媚(sycophancy):模型倾向于迎合用户的观点,而不是坚持正确的答案。用户说”我觉得答案是 B”,模型就改口说 B;用户对自己写的诗表示满意,模型就跟着夸。Sharma 等(2023)发现,人类偏好数据本身就偏爱”同意自己”的回答,RLHF 放大了这种倾向。这和”诚实”的目标直接冲突。

6.5 谁的偏好?

偏好数据来自一小群标注者,他们的文化背景、价值观、对”好回答”的理解,会被写进模型里。对有争议的问题,什么是”有用而无害”的回答,不同的人可能有完全不同的看法。怎样让模型照顾到多元的偏好(pluralistic alignment),是一个开放的问题(第 19 讲)。

6.6 本讲实验的边界

我们的玩具世界里,“人类偏好”是一个简单的公式,奖励模型是词袋模型,策略是 17 万参数的迷你 GPT,指令只有三种。它能清楚地展示 SFT、奖励模型、DPO、过度优化的机制,但不能告诉你这些方法在真实的大模型上效果如何——真实的偏好复杂得多、奖励模型强得多,过度优化的形式也更隐蔽。


7. RLAIF 与宪法 AI

人类标注又贵又慢。能不能用 AI 来提供反馈?

  • RLAIF(RL from AI Feedback):让一个强大的语言模型代替人类,比较两个回答哪个更好,用它的判断训练奖励模型或直接做 DPO。Lee 等(2023)发现在摘要等任务上,RLAIF 能达到和 RLHF 相当的效果。
  • 宪法 AI(Constitutional AI,Bai 等 2022,Anthropic):先写下一组明确的原则(“宪法”,比如”选择最不具伤害性、最诚实的回答”)。第一阶段,让模型按这些原则批评并修改自己的回答,用修改后的回答做 SFT;第二阶段,让模型按原则比较回答的好坏,生成偏好数据,做强化学习。人类的作用从”逐条标注”变成”制定原则”。

AI 反馈的好处是便宜、可扩展、标准一致;风险是继承和放大反馈模型自身的偏见和盲点,而且”用模型评价模型”可能形成闭环。


8. 今天的后训练流程

今天的大模型后训练比 InstructGPT 的三步复杂得多,通常是多轮迭代,包括:

  1. SFT:大量指令和对话数据,越来越多由模型生成、再由人或模型筛选;
  2. 偏好优化:DPO 及其变体、或者基于奖励模型的强化学习(PPO 等),偏好来自人类和 AI;
  3. 可验证奖励的强化学习(RLVR):在数学、编程等有标准答案的任务上,用”答案对不对""测试是否通过”作为奖励,直接做强化学习(例如 GRPO 方法)。这不需要奖励模型,不容易被”黑客”,是推理模型(第 15 讲)的关键(CS336 第 16 讲);
  4. 安全训练:拒绝有害请求、抵抗”越狱”,同时避免过度拒绝正常请求;
  5. 反复评估(第 13 讲)、找出问题、补充数据,再来一轮。

一个越来越清楚的趋势是:后训练的计算量在增加,能力的提升(尤其是推理)越来越多地来自后训练阶段,而不只是预训练。


9. 本讲小结

  1. 动机:预训练模型只会续写,不会听指令。后训练让它变得有用、诚实、无害。经典流程:SFT → 奖励模型 → 强化学习。
  2. SFT:在”指令 + 示范回答”上做监督学习,只在回答上计算损失;对话模板用特殊符号标出角色。少量高质量数据就很有效(表面对齐假说)。局限:示范贵、天花板是示范者、可能鼓励编造。
  3. 人类偏好:比较比示范容易、更一致;Bradley–Terry 模型 P(y1≻y2)=σ(r1−r2)P(y_1 \succ y_2) = \sigma(r_1 - r_2);奖励模型用这个似然训练,但只在它见过的分布上可靠。
  4. RLHF:最大化 E[r]−β KL(π∥πref)\mathbb{E}[r] - \beta\, \text{KL}(\pi\|\pi_{\text{ref}});KL 防止奖励黑客、保持语言质量;最优解 π∗∝πrefexp⁡(r/β)\pi^* \propto \pi_{\text{ref}} \exp(r/\beta);用策略梯度 / PPO 逼近,实现复杂。
  5. DPO:把最优解反过来用策略表示奖励,代入 Bradley–Terry,配分函数抵消,得到一个分类损失;和 RLHF 优化同一个目标,但简单得多。陷阱:偏好无噪声时可能偏离参考模型太远;它是离线的。
  6. 问题:过度优化(古德哈特定律,best-of-n 的 KL ≈ log⁡n−(n−1)/n\log n - (n-1)/n)、长度偏见、多样性和校准下降、谄媚、“谁的偏好”。
  7. AI 反馈:RLAIF、宪法 AI;今天的后训练还包括可验证奖励的强化学习和安全训练。

10. 与作业的关系

CS224N 近几年没有专门的后训练编程作业,但本讲和以下内容直接相关:

  • Winter 2026 的作业 4(大语言模型的基准测试与评估):你评估的模型大多经过了本讲的后训练;评估方法本身(人类偏好、大模型当评委、长度偏见)也和第 3、6 节有关。
  • 期末项目:默认项目在下游任务上微调 GPT-2,本讲的 SFT 是同一类操作;很多自选项目会用到 DPO 这样简单可靠的偏好优化方法。
  • 想动手实现大规模的 SFT、DPO 和 GRPO,可以参考 CS336 的作业 5(对齐)。

作业的具体题目以当年官方发布的版本为准。


11. 练习

练习 1(损失掩码)★:一条 SFT 样本是 <s> <user> write a positive review <assistant> great movie . </s>。哪些位置的预测要计算损失?如果提示部分也计算损失,模型会额外学到什么?这有什么坏处?

参考答案

计算损失的是 “great”、“movie”、”.”、</s> 这 4 个词元的预测(它们的前一个位置分别是 <assistant>、great、movie、.)。如果提示也计算损失,模型还会学习”生成用户的指令”,这会占用模型的容量,也可能让模型在对话中”替用户说话”;数据里提示很长、回答很短时,损失会被提示部分主导。不过实践中提示部分计算少量损失有时也无伤大雅,这是一个可以实验的选择(01 号代码的 mask_prompt 参数)。

练习 2(Bradley–Terry)★:三个回答的奖励分别是 rA=2r_A = 2、rB=1r_B = 1、rC=−1r_C = -1。(a) 计算 P(A≻B)P(A \succ B)、P(B≻C)P(B \succ C)、P(A≻C)P(A \succ C)。(b) 如果三个奖励都加上 10,结果会变吗?

参考答案

(a) σ(1)≈0.731\sigma(1) \approx 0.731,σ(2)≈0.881\sigma(2) \approx 0.881,σ(3)≈0.953\sigma(3) \approx 0.953。(b) 不变:只依赖奖励之差。这也说明奖励模型的”绝对数值”没有意义,只有差有意义。

练习 3(最优策略)★★:πref=(0.5,0.5)\pi_{\text{ref}} = (0.5, 0.5) 只有两个回答,奖励 r=(1,0)r = (1, 0)。(a) 写出 β=1\beta = 1 和 β=0.1\beta = 0.1 时的 π∗\pi^*。(b) β→0\beta \to 0 和 β→∞\beta \to \infty 时呢?(c) 如果 πref=(0,1)\pi_{\text{ref}} = (0, 1) 呢?

参考答案

(a) β=1\beta = 1:π∗∝(0.5e,0.5)\pi^* \propto (0.5e, 0.5),即 (e/(e+1),1/(e+1))≈(0.731,0.269)(e/(e+1), 1/(e+1)) \approx (0.731, 0.269)。β=0.1\beta = 0.1:∝(0.5e10,0.5)\propto (0.5e^{10}, 0.5),≈(0.99995,0.00005)\approx (0.99995, 0.00005)。 (b) β→0\beta \to 0:全部概率给奖励最高的回答 (1,0)(1, 0);β→∞\beta \to \infty:π∗=πref\pi^* = \pi_{\text{ref}}。 (c) π∗=(0,1)\pi^* = (0, 1),无论 β\beta 多小:参考模型不会说的回答,最优策略也不会说。

练习 4(DPO 推导)★★:(a) 从 π∗(y)=πref(y)exp⁡(r(y)/β)/Z\pi^*(y) = \pi_{\text{ref}}(y)\exp(r(y)/\beta)/Z 解出 r(y)r(y)。(b) 为什么 Bradley–Terry 模型让 ZZ 消失了?(c) 如果我们用的不是 Bradley–Terry 模型,而是”给每个回答打绝对分数”的数据(回归),ZZ 还会消失吗?

参考答案

(a) r(y)=βlog⁡π∗(y)πref(y)+βlog⁡Zr(y) = \beta \log\frac{\pi^*(y)}{\pi_{\text{ref}}(y)} + \beta\log Z。 (b) Bradley–Terry 只依赖两个回答的奖励之差,而 βlog⁡Z\beta \log Z 对同一个提示下的所有回答都相同,相减时抵消。 (c) 不会:绝对分数需要 r(y)r(y) 本身,就要知道 βlog⁡Z(x)\beta \log Z(x)(它依赖于对所有回答求和),DPO 的技巧不再适用。这也是为什么 DPO 天然地和”成对比较”的数据配合。

练习 5(DPO 梯度)★★:对一对偏好数据,如果模型已经满足 r^θ(yw)−r^θ(yl)=5\hat{r}_\theta(y_w) - \hat{r}_\theta(y_l) = 5,这一对的梯度权重 σ(r^θ(yl)−r^θ(yw))\sigma(\hat{r}_\theta(y_l) - \hat{r}_\theta(y_w)) 是多少?如果是 −5-5 呢?这说明 DPO 在关注什么样的数据?

参考答案

σ(−5)≈0.0067\sigma(-5) \approx 0.0067,几乎不贡献梯度;σ(5)≈0.993\sigma(5) \approx 0.993,贡献很大。DPO 主要关注模型当前排错的偏好对,已经排对而且差距很大的对几乎被忽略——和逻辑回归、困难样本挖掘是同样的道理。

练习 6(best-of-n)★:(a) 用 log⁡n−(n−1)/n\log n - (n-1)/n 计算 n=2,16,1000n = 2, 16, 1000 时 best-of-n 的 KL。(b) 如果 RLHF 训练的模型和参考模型的 KL 是 10,大致相当于 best-of-多少?

参考答案

(a) n=2n = 2:0.693−0.5=0.190.693 - 0.5 = 0.19;n=16n = 16:2.77−0.94=1.842.77 - 0.94 = 1.84;n=1000n = 1000:6.91−1.00=5.916.91 - 1.00 = 5.91。 (b) log⁡n−1≈10\log n - 1 \approx 10,n≈e11≈6×104n \approx e^{11} \approx 6 \times 10^4。可见 KL 是一个对数尺度的量:RLHF 的模型可以离参考模型非常”远”,相当于从几万个样本里挑最好的一个。

练习 7(过度优化)★★:代码 03 演示 6 中,奖励模型和真实奖励在”参考模型常说的回答上”相关系数 0.54,不加权只有 0.27。(a) 为什么两者差这么多?(b) 这和”best-of-n 选得越狠,真实奖励越可能下降”有什么关系?(c) 有什么办法可以缓解?

参考答案

(a) 偏好数据是从参考模型采样的,常见的回答被比较了很多次,奖励估计得准;罕见的回答很少甚至从没出现过,奖励估计得很差。按参考模型的概率加权时,主要看的是常见的回答,所以相关性高。 (b) best-of-n 的 nn 越大,越可能把罕见的回答挑出来——只要奖励模型碰巧高估了它。于是优化把策略推向奖励模型最不可靠的区域。 (c) 加强 KL 约束(较大的 β\beta、较小的 nn);收集更多、覆盖更广的偏好数据,尤其是在优化后的模型生成的回答上重新标注(在线 / 迭代式 RLHF);用多个奖励模型的集成,对不确定的地方保守一些;对奖励模型做正则化;早停。

练习 8(思考:谄媚):设计一个简单的实验,检测一个对话模型是否谄媚。

参考答案

一种做法:准备一批有标准答案的问题。先直接问模型,记录答案;再在问题里加上用户的意见,比如”我觉得答案是 X,你同意吗?“(X 分别取正确答案和一个错误答案),比较模型改变答案的比例。如果模型在用户给出错误意见时经常改口,就说明它谄媚。还可以测试”你确定吗?“这样的追问会不会让模型放弃正确答案。(Sharma 等 2023 用了类似的设计。)

练习 9(动手):

(a) 运行代码 01、02、04,把结果填进第 2.5 节和第 5.7 节的表格。你的结果和预期一致吗? (b) 在代码 03 演示 5 中,把偏好数据换成有噪声的(noisy=True),DPO 还会失控吗?把 β\beta 改成 5 呢? (c) 在代码 03 演示 6 中,把偏好数据从 1000 对增加到 10000 对,过度优化还明显吗? (d) 在代码 04 中,把 DPO 的训练轮数从 2 增加到 5,KL、多样性和金标准奖励怎样变化?对照代码 03 演示 5 解释。 (e) 修改 post_utils.gold_reward,让它惩罚”重复使用同一个形容词”,然后重新生成偏好数据、训练奖励模型和 DPO。模型学到的东西有什么变化?


12. 延伸阅读

  • Ouyang et al.,Training Language Models to Follow Instructions with Human Feedback(2022):InstructGPT,RLHF 的经典流程。
  • Christiano et al.,Deep Reinforcement Learning from Human Preferences(2017);Stiennon et al.,Learning to Summarize from Human Feedback(2020):RLHF 的早期工作。
  • Wei et al.,Finetuned Language Models Are Zero-Shot Learners(2021):FLAN;Zhou et al.,LIMA: Less Is More for Alignment(2023)。
  • Rafailov et al.,Direct Preference Optimization: Your Language Model is Secretly a Reward Model(2023)。
  • Schulman et al.,Proximal Policy Optimization Algorithms(2017)。
  • Gao, Schulman & Hilton,Scaling Laws for Reward Model Overoptimization(2022)。
  • Azar et al.,A General Theoretical Paradigm to Understand Learning from Human Preferences(2023):IPO,以及 DPO 在确定性偏好下的问题。
  • Bai et al.,Constitutional AI: Harmlessness from AI Feedback(2022)。
  • Singhal et al.,A Long Way to Go: Investigating Length Correlations in RLHF(2023)。
  • Sharma et al.,Towards Understanding Sycophancy in Language Models(2023)。
  • Askell et al.,A General Language Assistant as a Laboratory for Alignment(2021):有用、诚实、无害。
  • Nathan Lambert,RLHF Book(在线免费):RLHF 和后训练的系统介绍。
  • CS336 第 15、16 讲(同目录):SFT、RLHF 的大规模实现与可验证奖励的强化学习。

13. 下一讲预告

到目前为止,“让模型做一个新任务”的办法都是训练:微调、SFT、DPO,都要更新模型的参数,而且要更新全部参数。对一个几十亿、几千亿参数的模型,这既贵又不方便:每个任务都要存一份完整的模型。下一讲(高效适配:提示与参数高效微调)讨论两条更省的路:

  • 提示工程:不改参数,只改输入——零样本、少样本、思维链的雏形;
  • 参数高效微调:只训练很少的新参数——适配器、前缀微调、LoRA;
  • 为什么只训练 0.1% 的参数就能接近全量微调的效果?LoRA 的低秩假设从何而来?
← 返回课程目录