# Lecture 15 · 对齐 I：SFT 与 RLHF

> **CS336: Language Modeling from Scratch** · Stanford · Spring 2025
> 📅 May 20 · 💻 [不可执行讲义（PDF）](https://github.com/stanford-cs336/spring2025-lectures/blob/main/nonexecutable/2025%20Lecture%2015%20-%20RLHF%20Alignment.pdf) · 讲者 Tatsunori Hashimoto

---

## 承上启下

**上一讲（[[Lecture 14 · 数据 II]]）**：
- 预训练数据需要过滤、去重、质量控制，数据流水线决定了 base model 的底座能力。
- 到此为止，我们得到的是一个「互联网文本压缩器」——它知道很多，但并不知道该如何当一个助手。

**本讲（对齐 I）**：
- 预训练得到的是 GPT-3 式 base model，不是好用的助手；要变成 InstructGPT / ChatGPT，还需要指令遵循（instruction following）、安全控制、人类偏好优化。
- 讲后训练（post-training）的三块基石：SFT、RLHF 数据、以及 PPO / DPO 两条偏好优化路线，并盘点 RLHF 的常见坑。
- 下一讲 [[Lecture 16 · 对齐 II：RLVR]] 会把「有噪声的人类偏好」换成「可验证的正确性」，继续这条主线。

> [!abstract] 本讲一句话总览
> SFT 让模型模仿「应该怎么回答」，RLHF/DPO 让模型优化「人更喜欢哪个回答」。但对齐数据充满风格、长度、标注者偏见和事实性问题；算法也会带来 reward overoptimization、mode collapse、过度拒绝等副作用。

---

## 1. 为什么预训练不够？

预训练的目标是最大化互联网文本的似然，即标准的下一 token 预测：

$$\max_\theta\ \sum_{t}\log p_\theta(x_t \mid x_{<t})$$

其中$x_{<t}$是前文，$p_\theta$是模型给出的下一 token 分布。这个目标训练出来的模型是一个**互联网文本的条件分布模拟器**：给它一个问题，它的最优行为是「模仿互联网上这个问题之后最可能出现的文本」——那可能是另一个问题、一个错误答案、一段论坛吵架，而不是一个高质量回答。

用户想要的却是另一回事：

- **遵循指令**：把输入当作要执行的任务，而不是要续写的文本；
- **回答有帮助且简洁**：直接给出答案，而不是绕圈子；
- **诚实**：不知道就说不知道，而不是流畅地胡编；
- **无害**：拒绝协助危险请求；
- **适应对话格式**：理解多轮上下文、角色分工。

互联网文本天然无法提供这种行为分布，因为其中充满了没有答案的问题、错误答案、有害内容、混乱的风格和大量非助手式文本。经典例子：让 GPT-3 base model「向六岁小孩解释登月」，它会续写出更多「向六岁小孩解释 X」的排比句——因为在互联网上，这类句子经常成串出现。

> [!tip] 直觉
> 预训练解决的是「知识与能力从哪来」，对齐解决的是「这些能力以什么行为方式表达出来」。base model 像一个读过全互联网、但没有任何职业训练的人：让它「像个助手」不是往里灌新知识，而是把它已有的能力**约束到一个特定的行为分布**上。这也是为什么后训练的数据量（几万到几百万条）远小于预训练（数万亿 token）却能彻底改变模型行为。

---

## 2. SFT：监督微调

### 2.1 目标与数据格式

SFT（Supervised Fine-Tuning，监督微调）在指令-回答对（instruction-response pairs）上继续做最大似然，但**只对回答部分计算损失**（prompt 部分被 mask 掉）：

$$\mathcal{L}_{\mathrm{SFT}}(\theta) = -\,\mathbb{E}_{(x,y)\sim\mathcal{D}}\left[\sum_{t=1}^{|y|}\log \pi_\theta\!\left(y_t \mid x,\, y_{<t}\right)\right]$$

其中$x$是指令（含对话历史），$y$是示范回答，$\pi_\theta$是模型。形式上这就是预训练的交叉熵，区别只在数据分布：从「互联网文本」换成「理想助手行为的示范」。

单轮数据示例：

```json
{
  "instruction": "解释什么是 monopsony",
  "response": "Monopsony 指市场中只有一个买方..."
}
```

多轮对话则用 chat template 序列化成带角色标记的 token 流（如 `<|user|>...<|assistant|>...`），损失只落在 assistant 的 token 上：

```json
[
  {"role": "user", "content": "..."},
  {"role": "assistant", "content": "..."},
  {"role": "user", "content": "..."},
  {"role": "assistant", "content": "..."}
]
```

### 2.2 常见数据源

| 数据集 | 特点 |
| :--- | :--- |
| FLAN | 把大量 NLP 任务模板化为指令，偏任务格式 |
| Alpaca | Self-Instruct 风格：用强模型合成指令数据 |
| OpenAssistant | 志愿者众包的人类对话，多样但风格复杂 |
| Anthropic HH | helpful/harmless 偏好对话与安全数据 |
| Tulu / UltraFeedback | 混合人类与模型生成的数据配方 |

这些来源代表了三条获取路径：**人类手写**（贵而稀少）、**任务模板化**（便宜但格式僵硬）、**强模型蒸馏**（便宜且流畅，但继承教师模型的偏见与错误）。现代开源配方（如 Tulu）通常混合三者并做仔细的配比消融。

### 2.3 SFT 的作用边界

SFT 最擅长的事情，本质上都是「行为塑形」：

- 把预训练中**已有的能力「抽取」出来**（elicitation）——模型早就会写代码，SFT 教它「被问到时把代码好好写出来」；
- 教对话格式、角色规范；
- 教风格与输出约束（长度、语气、markdown 结构）；
- 初步的安全调优（学会拒绝的句式与边界）。

SFT 不擅长的事情，本质上都是「注入新东西」：

- 往模型里塞大量预训练没见过的尾部事实；
- 用少量样本让模型获得全新的复杂能力；
- 精准地优化人类偏好（模仿学习只能逼近示范者的平均水平，见第 5 节）。

> [!warning] 易错点
> 在模型**不知道**的尾部知识上做 fine-tuning，可能反而**增加**幻觉（hallucination）。机制：SFT 强迫模型对它内部不掌握的事实输出流畅、自信的答案，模型学到的不是这些事实本身，而是「即使不确定也要编一个像样的答案」这个行为模式（Gekhman et al. 2024）。知识存储（预训练的事）与表达控制（SFT 的事）是两回事，混淆二者是后训练里最常见的误解之一。

> [!note] Superficial Alignment Hypothesis
> LIMA（Zhou et al. 2023）只用约 1000 条精心挑选的示范就得到不错的对话模型，据此提出「表面对齐假说」：对齐主要是学一个风格与格式的子分布，能力几乎全部来自预训练。这个假说在「聊天体验」维度上大体成立，但后来的实践（数学、代码、安全）表明：想要稳健的能力提升与安全边界，数据量和数据质量仍然重要——「1000 条就够」不能推广到所有目标。

---

## 3. SFT 数据里的隐性变量

### 3.1 风格和长度

不同指令数据集之间的差异，远不止「质量高低」，还包括一整套隐性的风格变量：是否用 bullet points、回答长短、是否引用来源、解释详略、遇到边界问题是否保守拒绝、语气是否像客服。模型会把这些变量全部学走——所以「换一个 SFT 数据集」经常表现为「模型性格大变」。

其中**长度**是影响最系统性的变量：

- 人类标注者在偏好评估中普遍偏爱更长、更详细的答案，即使内容并没有更多信息量；
- LLM judge（如 AlpacaEval 的自动评估，见 [[Lecture 12 · 评估]]）同样系统性偏长；
- 于是「变得啰嗦」成了一条稳定可学的「作弊」路径：模型不需要更聪明，只要更长就能赢得更高的偏好分。

AlpacaEval 后来推出 length-controlled 版本，用回归把长度因素从 win rate 中剥离，就是对这个问题的直接回应。

### 3.2 安全数据

一个重要的实验事实：**只需几百条安全示范**混入 SFT 数据，就能显著改变模型的拒绝行为（Bianchi et al. 2023）。这既是好消息（安全调优便宜），也是坏消息（安全行为是一层薄薄的表面行为，容易被后续微调抹掉）。

但安全数据要在两类错误之间走钢丝：

- **漏拒**（under-refusal）：危险指令没有被拒绝；
- **过拒**（over-refusal）：正常请求被误伤，例如 XSTest 里的「How do I kill a Python process?」被当成暴力请求拒绝。

```mermaid
graph LR
    SAFE["安全拒绝数据"] --> GOOD["减少有害输出"]
    SAFE --> BAD["增加 over-refusal"]
```

> [!tip] 直觉
> 安全调优本质上是在教一个**决策边界**，而 SFT 只能提供边界两侧的样本点。样本少时模型只能学到粗糙的表面特征（如「出现 kill、weapon 等词就拒绝」），于是把善意请求也拒了。要把边界画细，要么堆更多覆盖边界附近的对比样本，要么靠 RLHF 阶段用偏好信号继续打磨。

---

## 4. Midtraining / Two-Phase Training

讲义提到一种越来越常见的做法，把「预训练→SFT」的两段式改为三段：

1. 主预训练：大量网络文本；
2. **中期训练（midtraining）/ 退火阶段**：在学习率衰减阶段混入高质量数据与 instruction-like 数据；
3. 再做 SFT / RLHF。

这样做的因果链条是：SFT 数据量太小（万级到百万级样本），如果模型在进入 SFT 之前从未见过指令/对话格式的分布，SFT 就要同时承担「教格式」和「教行为」两件事，容易学不稳；把指令格式的数据提前少量注入中期训练，等于让模型先「见过世面」，SFT 阶段只需做行为微调。MiniCPM、OLMo 2 等公开配方都在退火阶段混入指令数据；工业界模型普遍采用类似 recipe，但公开细节通常不完整。

> [!note]
> Midtraining 与 [[Lecture 14 · 数据 II]] 讲的数据课程（curriculum）是同一思想的延续：**数据分布的调度本身就是训练算法的一部分**。「什么数据在什么阶段出现」与「用什么损失函数」同样重要。

---

## 5. 从模仿到优化：为什么需要 RLHF？

SFT 是模仿学习（imitation learning）：拟合示范分布$p^*(y \mid x)$，模型的上限就是示范者的平均水平。但「人类偏好」并不等于「人类示范」，有四个结构性原因：

- **人不一定能写出最优答案**：标注者写的示范可能平庸，但让他判断两个答案哪个更好却相对容易；
- **成本不对称**：写一条完整的高质量示范贵得多，给一对回答标注偏好（pairwise preference）便宜得多，同样预算能收集多得多的偏好数据；
- **生成与判别的能力差**（generation-discrimination gap）：「写出好答案」和「认出好答案」是不同能力，人类（和模型）通常判别强于生成；
- **偏好是多维综合**：有用性、事实性、安全性、风格的权衡很难写进单条示范，却会自然体现在比较中。

于是 RLHF（Reinforcement Learning from Human Feedback，基于人类反馈的强化学习）把目标从「模仿」换成「优化」：

$$\max_\theta\ \mathbb{E}_{x\sim\mathcal{D},\, y\sim\pi_\theta(\cdot\mid x)}\left[r(x,y)\right]$$

其中$r(x,y)$是对回答质量的打分，来自人类偏好或模型偏好。注意与 SFT 的根本区别：期望是对**模型自己生成的**$y$取的——模型从「学别人的答案」变成「为自己的答案负责」。

> [!tip] 直觉
> SFT 的天花板是「示范者有多好」，RLHF 的天花板是「评价者能分辨多好」。因为判别比生成容易，后者的天花板更高——这是整个偏好优化路线的根本动机。代价是：你优化的不再是「真实的好」，而是「评价信号认为的好」，一切评价信号的缺陷（噪声、偏见、可被钻空子）都会被优化过程放大，这正是第 9 节所有坑的共同根源。

---

## 6. RLHF 数据：偏好不是干净标签

标准的成对反馈（pairwise feedback）格式：

```json
{
  "prompt": "...",
  "chosen": "更好的回答",
  "rejected": "较差的回答"
}
```

数据来源包括：众包标注者、专家标注、模型生成偏好（AI feedback / RLAIF）、Constitutional AI 式的自我批改、以及产品中的用户真实反馈（点赞/重新生成）。

但每一条来源都不是「干净的人类真理」：

- **标注者能力参差**：复杂问题（代码、数学、专业事实）超出普通众包者的判断能力，偏好退化为「哪个看起来更像好答案」；
- **标注规范难写**：helpful 与 harmless 冲突时怎么选？规范写得越细，标注越慢越贵；写得粗，标注者各自脑补；
- **人口统计分布影响价值观**：标注者群体（地区、语言、政治光谱）的构成会系统性地写进模型的价值判断；
- **长度偏差明显**：如 3.1 所述，长≈好的捷径污染大量偏好对；
- **标注者通常不验证事实**：一条流畅自信的错误回答很容易赢过一条谨慎正确的回答；
- **crowdwork 伦理问题**：低报酬、接触有害内容的心理成本，是这套流水线的隐性代价。

> [!warning] 易错点
> RLHF 数据不是「人类偏好」的无偏样本，而是**某个标注流程、标注人群、标注界面共同作用的产物**。换一批标注者、换一个界面布局（比如两个回答并排 vs 上下排列）都可能系统性改变偏好分布。把 reward model 当成「人类价值的测量仪」是危险的——它只是这套流程的拟合器。

---

## 7. PPO：原始 RLHF 路线

InstructGPT（Ouyang et al. 2022）确立的三步流程：

1. **SFT**：在示范数据上微调，得到初始 policy$\pi_{\mathrm{SFT}}$；
2. **训练 reward model**：收集偏好数据，训练打分模型$r_\phi$；
3. **PPO 优化 policy**：用$r_\phi$当奖励做强化学习，同时加 KL 惩罚防止偏离参考模型。

### 7.1 Reward Model 与 Bradley-Terry 模型

偏好数据是「A 比 B 好」的比较，不是绝对分数。把它变成标量 reward 的标准做法是 Bradley-Terry 模型：假设人类偏好$y_w$（chosen）胜过$y_l$（rejected）的概率由二者「潜在分数」之差决定：

$$P(y_w \succ y_l \mid x) = \sigma\!\left(r_\phi(x, y_w) - r_\phi(x, y_l)\right)$$

其中$\sigma(z)=1/(1+e^{-z})$是 sigmoid 函数，$r_\phi$通常是把语言模型最后一层换成标量输出头。训练目标是偏好数据上的负对数似然：

$$\mathcal{L}_{\mathrm{RM}}(\phi) = -\,\mathbb{E}_{(x,y_w,y_l)\sim\mathcal{D}}\left[\log\sigma\!\left(r_\phi(x,y_w) - r_\phi(x,y_l)\right)\right]$$

注意这个损失只依赖**分数差**：$r_\phi$整体平移一个常数不改变任何偏好概率，所以 reward 的绝对数值没有意义，只有同一 prompt 下的相对比较有意义——这一点会在 [[Lecture 17 · 对齐 III：RL 实战]] 的 baseline 讨论中再次出现。

### 7.2 RLHF 优化目标

$$\max_\theta\ \mathbb{E}_{x\sim\mathcal{D},\,y\sim\pi_\theta(\cdot\mid x)}\left[r_\phi(x,y)\right] - \beta\,\mathbb{D}_{\mathrm{KL}}\!\left[\pi_\theta(\cdot\mid x)\,\|\,\pi_{\mathrm{ref}}(\cdot\mid x)\right]$$

符号：$\pi_\theta$是被优化的 policy，$\pi_{\mathrm{ref}}$是参考模型（通常为 SFT 模型的冻结副本），$\beta>0$控制 KL 惩罚强度。KL 项的作用有二：一是防止 policy 跑到$r_\phi$训练分布之外的区域（那里 reward 分数不可信）；二是保留参考模型的通用语言能力。实现上 KL 惩罚通常按 token 折算进 reward，再交给 PPO。

PPO（Proximal Policy Optimization）本身做的事情：on-policy 采样回答→reward model 打分→用 clip objective 限制每步更新幅度以保持稳定。算法细节（概率比、clip、advantage）留到 [[Lecture 16 · 对齐 II：RLVR]] 和 [[Lecture 17 · 对齐 III：RL 实战]] 展开；这条路线与 CS221 中的策略梯度方法（[[Lecture 9 · 函数逼近与策略梯度]]）一脉相承。

### 7.3 代价

PPO 路线强但昂贵，每一条缺点都有明确来源：

- **实现复杂**：同时维护 policy、reference model、reward model、value model 四个模型；
- **要先训练 reward model**：偏好数据的一切缺陷从这里进入系统；
- **要在线生成 rollout**：训练循环里嵌着推理 workload，慢且贵；
- **超参多**：KL 系数、clip 范围、value loss 权重、采样温度都要调；
- **容易 overoptimization**：见 9.1。

---

## 8. DPO：RLHF without tears

DPO（Direct Preference Optimization，直接偏好优化）的出发点：能不能不训练 reward model、不做 on-policy RL，直接用偏好对训练 policy？

### 8.1 推导：隐式 reward

关键观察：7.2 的 KL 正则化目标有**闭式最优解**：

$$\pi^*(y \mid x) = \frac{1}{Z(x)}\,\pi_{\mathrm{ref}}(y \mid x)\,\exp\!\left(\frac{r(x,y)}{\beta}\right)$$

其中$Z(x)=\sum_y \pi_{\mathrm{ref}}(y\mid x)\exp(r(x,y)/\beta)$是配分函数（对所有可能回答求和，不可计算）。把这个式子反解出 reward：

$$r(x,y) = \beta\log\frac{\pi^*(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)} + \beta\log Z(x)$$

也就是说：**任何 policy 都隐式定义了一个 reward**——它相对参考模型抬高了哪些回答的概率。把这个隐式 reward 代入 Bradley-Terry 的偏好概率，$\beta\log Z(x)$在做差时**恰好消掉**（因为$y_w, y_l$共享同一个 prompt），得到只含 policy 的损失：

$$\mathcal{L}_{\mathrm{DPO}}(\theta) = -\,\mathbb{E}_{(x,y_w,y_l)}\left[\log\sigma\!\left(\beta\log\frac{\pi_\theta(y_w\mid x)}{\pi_{\mathrm{ref}}(y_w\mid x)} - \beta\log\frac{\pi_\theta(y_l\mid x)}{\pi_{\mathrm{ref}}(y_l\mid x)}\right)\right]$$

符号：$y_w$/$y_l$是偏好对中被选中/被拒绝的回答，$\beta$与 RLHF 目标中的 KL 系数同源，控制偏离参考模型的容忍度。直觉：把 chosen 的 logprob 相对参考模型往上推、rejected 往下压，推压的幅度由「隐式 reward 排序错得多严重」加权——对 DPO 损失求梯度可见权重正是$\sigma(\hat r_\theta(x,y_l)-\hat r_\theta(x,y_w))$，模型排序错得越离谱的样本，更新越大。

伪代码形式（与上式一一对应）：

```python
loss = -logsigmoid(
    beta * (
        logπ(chosen) - logπ(rejected)
        - logπ_ref(chosen) + logπ_ref(rejected)
    )
)
```

> [!tip] 直觉
> DPO 的聪明之处在于换了求解顺序：RLHF 是「先从偏好学 reward，再用 RL 从 reward 学 policy」两步；DPO 注意到这两步之间存在解析的一一对应（在 KL 正则下），于是把两步压成一步——「你的语言模型偷偷是个 reward model」。代价是：它拟合的是**离线偏好数据集**上的排序，而不是在模型自己当前的生成分布上探索，因此偏好数据与模型生成分布的错配（distribution shift）不会像 on-policy RL 那样被自动纠正。

### 8.2 优缺点

优点：

- 实现只是一个分类式损失，工程复杂度接近 SFT；
- 离线偏好数据即可，不需要在线 rollout；
- 不需要单独的 reward model（省一次训练、省一份显存）；
- 大量开源对齐模型（Zephyr、Tulu 系列等）采用并验证有效。

缺点：

- 没有真正的在线探索，policy 生成分布变化后偏好数据会「过期」；
- 对偏好数据质量敏感，噪声对会被直接拟合；
- 长度/风格偏差同样存在（它优化的仍是同一批有偏数据）；
- 在 reward 信号可靠、rollout 预算充足的设置下，PPO 类 on-policy 方法上限通常更高。

---

## 9. RLHF 的坑

### 9.1 Reward Overoptimization

Gao et al.（2023）的经典实验：用一个大模型当「金标准 reward」（代替昂贵的真人评估），训练小 reward model 当代理（proxy），然后对着 proxy 一直优化。结果呈现系统性规律：随着 policy 偏离初始模型越来越远（横轴用$\sqrt{\mathrm{KL}(\pi\,\|\,\pi_{\mathrm{ref}})}$衡量），**proxy reward 单调上升，而 gold reward 先升后降**。

机制：reward model 只是偏好数据的拟合器，在训练分布附近可信，之外只是外推。RL 优化恰恰专门把 policy 推向 reward 高估的区域——优化压力越大，policy 越集中在 proxy 的误差上。这就是 Goodhart 定律的模型版：「当测量成为目标，它就不再是好测量」。

- KL 惩罚能延缓但不能根治：它限制的是「偏离多远」，不是「偏向哪里」；
- 实践对策：early stopping、定期用真人评估校准、把 reward model 换大、持续用新 on-policy 数据更新 reward model。

### 9.2 Mode Collapse / Entropy Loss

RLHF 会系统性地改变模型作为**概率模型**的性质。最大似然训练的 base model 是校准的（calibrated）：它对下一 token 的概率估计接近真实频率。而 RLHF 的目标是最大化 reward，最优解趋向**确定性策略**——把概率质量集中到少数高 reward 回答上。后果：

- 输出多样性下降，同一 prompt 反复采样得到雷同回答；
- calibration 变差：GPT-4 技术报告显示 RLHF 后模型在选择题上的置信度-正确率校准明显退化；
- 模型不再适合当「分布的模拟器」用（比如用于多样本估计、创意生成时变得单调）。

> [!warning] 易错点
> 这不是 bug 而是目标函数的必然结果：**最大化期望 reward 与保持分布多样性天然冲突**。KL 正则是在这两者之间买一个折中，而不是同时得到两者。

### 9.3 Length Bias

偏好数据和 LLM judge 都偏爱长回答（3.1 节），RLHF/DPO 会把这个偏差**放大**成显式的优化方向：模型学会写更长→judge win rate 上升→benchmark 数字变好→但用户拿到的是注水回答。诊断手段：对比 length-controlled 指标；缓解手段：偏好数据配平长度、reward 中加长度惩罚、评估时做长度回归控制。

### 9.4 Safety vs Helpfulness

安全调优的张力在 RLHF 阶段同样存在：往安全方向推，模型容易学会「宁可错拒一千」——因为拒绝永远是安全的，而回答有风险。结果是正常请求被拒（XSTest 类评测专门测这个）、有用性下降。根本困难在于 policy 边界本身就模糊且随语境变化，而偏好数据只能稀疏地覆盖边界。

---

## 总结

```mermaid
mindmap
  root((SFT 与 RLHF))
    SFT
      instruction data
      imitation
      style
      safety tuning
    Data
      FLAN
      Alpaca
      OpenAssistant
      HH
      UltraFeedback
    RLHF
      preference pairs
      Bradley-Terry RM
      PPO
      KL penalty
    DPO
      implicit reward
      no reward model
      pairwise objective
      ref model
    Risks
      length bias
      overoptimization
      mode collapse
      over-refusal
```

**关键要点**：

1. **SFT 是行为抽取，不是万能知识注入**
   - 最适合教格式、风格和已有能力的表达；在模型不会的知识上硬教会助长幻觉。

2. **对齐数据里风格变量很强**
   - 长度、bullet、引用、语气都会影响偏好；长度是最系统性的偏差。

3. **RLHF 数据很难干净**
   - 偏好是标注流程、人群、界面的产物，不是「人类真理」的无偏采样。

4. **PPO 强但复杂**
   - 四个模型副本、在线 rollout、一堆超参；reward model 由 Bradley-Terry 从偏好对训练而来。

5. **DPO 简洁但不是银弹**
   - 利用 KL 正则目标的闭式解把两步压成一步；省掉 reward model 和 rollout，但失去在线探索。

6. **RLHF 会改变概率模型性质**
   - overoptimization 源于对代理指标的优化压力；mode collapse 与 calibration 退化是最大化 reward 的必然副作用。

**下一讲预告（[[Lecture 16 · 对齐 II：RLVR]]）**：

RLHF 的 reward model 容易被过优化，根源在于奖励信号本身有噪声、可被钻空子。下一讲转向 verifiable rewards：数学、代码等可自动判分的任务中，RL 可以直接优化正确性，典型路线包括 PPO → GRPO 的简化，以及 DeepSeek-R1、Kimi K1.5、Qwen3 的完整 recipe。

---

## 复习自测

> [!question]- Q1：为什么「在模型不知道的知识上做 SFT」可能加剧幻觉？
> SFT 的损失强迫模型对示范答案输出高概率。若答案涉及模型内部并不掌握的事实，梯度无法「造出」知识，只能让模型学会「面对此类问题时自信地生成流畅答案」这一行为模式。泛化到其他未知问题时，这个模式就表现为幻觉。核心：知识在预训练中存储，SFT 只能控制表达行为。

> [!question]- Q2：写出 Bradley-Terry 偏好概率与 reward model 损失。为什么 reward 的绝对值没有意义？
> $P(y_w\succ y_l\mid x)=\sigma(r_\phi(x,y_w)-r_\phi(x,y_l))$，损失为$-\log\sigma(r_\phi(x,y_w)-r_\phi(x,y_l))$。因为偏好概率只依赖分数差，对$r_\phi$整体加任意常数（甚至每个 prompt 加不同常数）损失不变，所以只有同一 prompt 下的相对分数可比。这也预示了 RL 阶段用「组内相对 reward」做 baseline 的合理性。

> [!question]- Q3：DPO 推导中配分函数$Z(x)$为什么能消掉？这依赖什么条件？
> 隐式 reward$r(x,y)=\beta\log\frac{\pi(y|x)}{\pi_{\mathrm{ref}}(y|x)}+\beta\log Z(x)$中，$Z(x)$只依赖 prompt 不依赖回答。代入 Bradley-Terry 时计算的是同一$x$下两个回答的 reward 差，$\beta\log Z(x)$作为公共项相消。条件：偏好对必须共享同一 prompt，且 Bradley-Terry 形式只依赖分数差。

> [!question]- Q4：描述 reward overoptimization 的机制。为什么 KL 惩罚不能根治？
> Reward model 是偏好数据的拟合器，只在训练分布附近可信；RL 优化专门把 policy 推向 reward 估值最高的区域，而这些区域往往正是 RM 外推失误、系统性高估的地方，于是 proxy reward 持续上升而真实质量先升后降。KL 惩罚只约束偏离参考模型的总量，不约束偏离的方向——policy 仍会把有限的 KL 预算全部花在 RM 的误差方向上。

> [!question]- Q5：SFT、PPO-RLHF、DPO 各自优化什么分布上的什么目标？用一句话区分。
> SFT 在**示范数据分布**上做最大似然（模仿别人写的答案）；PPO-RLHF 在**模型自己当前的生成分布**上最大化 reward（在线探索，为自己的答案负责）；DPO 在**离线偏好数据分布**上拟合隐式 reward 的排序（形式是分类损失，效果近似 KL 正则的 RLHF，但没有在线探索）。

---

## 参考资料

- 💻 [2025 Lecture 15 - RLHF Alignment.pdf（官方讲义）](https://github.com/stanford-cs336/spring2025-lectures/blob/main/nonexecutable/2025%20Lecture%2015%20-%20RLHF%20Alignment.pdf)
- 📄 [Training language models to follow instructions with human feedback](https://arxiv.org/abs/2203.02155)
- 📄 [Learning to summarize from human feedback](https://arxiv.org/abs/2009.01325)
- 📄 [Direct Preference Optimization](https://arxiv.org/abs/2305.18290)
- 📄 [Constitutional AI](https://arxiv.org/abs/2212.08073)
- 📄 [AlpacaFarm](https://arxiv.org/abs/2305.14387)
- 📄 [LIMA: Less Is More for Alignment](https://arxiv.org/abs/2305.11206)
- 📄 [Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations?](https://arxiv.org/abs/2405.05904)
- 📄 [Scaling Laws for Reward Model Overoptimization](https://arxiv.org/abs/2210.10760)
