L08: Post-training

Week 4 · Thu Jan 29 2026 08:00:00 GMT+0800 (中国标准时间)

进度: 0/22 (0%)
下载 PDF
/ 0
100%
正在加载 PDF...

L08: Post-training

Slides

中英交替版(推荐)

L08 双语 (PDF)

英文原版

L08 EN (PDF)

中文翻译版

L08 ZH (PDF)

核心知识点

1. 语言建模 != 辅助用户

Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9
  • 预训练 LM 只会续写文本(completion),不会遵循指令
  • GPT-3 示例:对 “Explain X” 的回复是生成更多类似 prompt,而非实际回答
  • 核心问题:语言模型与用户意图未对齐(not aligned)

📐 预训练 LM 与助手模型的目标差异

预训练语言模型的目标:在给定任意前缀的情况下,预测最可能的下一个 token:

PLM(xt+1xt;θ)P_{LM}(x_{t+1} \mid x_{\leq t}; \theta)

这个目标对输入内容完全无偏——给定 “The sky is” 和给定 “How do I make a bomb? Answer:” 都一视同仁,只预测下一个最可能的 token。

助手模型的目标:给定用户请求 xx 和系统角色描述 rr,生成有帮助的回复:

Passistant(yx,r;θ)其中 y 最大化用户满意度P_{assistant}(y \mid x, r; \theta) \quad \text{其中 } y \text{ 最大化用户满意度}

两者的根本差异:LM 目标是描述性的(世界上的文本是什么样的),助手目标是规范性的(回复应该是什么样的)。这个差距——对齐问题(Alignment Problem)——是后训练(post-training)存在的根本原因。

📚 已收录至 拓展阅读知识库

💡 为什么这样做?

把预训练 LM 想象成一个读了大量书的人,他能流利地”续写”任何文章风格。但”续写文章”和”回答你的问题”是完全不同的事。如果你在一本书里问”今天天气怎么样?“,接下来的文字很可能是”晴朗的春日让人心情愉悦……”,而不是真正回答天气预报。预训练模型的行为正是如此——它在模仿训练数据的分布,而不是在帮你解决问题。

⚠️ 常见误区

  1. 误区:RLHF/SFT 的目的是让模型变得”更聪明”、获得更多知识 → 正确:模型的能力(推理、知识、代码)主要在预训练阶段获得,后训练的核心目的是行为对齐——让模型更有用(Helpful)、更无害(Harmless)、更诚实(Honest),即 Anthropic 的 HHH 框架。后训练可以激发预训练中隐含的能力,但无法凭空创造新能力。

  2. 误区:只要模型够大,预训练后就能自动成为好助手 → 正确:GPT-3(175B)在没有对齐的情况下,会在”Explain the moon landing” 之后生成更多关于月球登陆的讨论(而非解释),因为这是语料中最可能的续写。规模不能替代对齐。

2. Instruction Fine-tuning(指令微调)

Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22
  • 收集 (instruction, output) 对,跨多任务微调 LM
  • Super-NaturalInstructions:1.6K+ 任务,3M+ 样本
  • Flan-T5(Chung et al., 2022):T5 在 1.8K 任务上指令微调
    • 更大模型 = 更大的指令微调增益(T5-XXL: +26.6)
    • 模型可在未见任务上泛化
  • 数据 + 模型规模是关键
  • 新基准:MMLU(57 个知识密集型任务)、BIG-Bench(200+ 任务)

📐 SFT 目标函数

监督微调(Supervised Fine-Tuning) 与标准语言模型训练的区别仅在于损失计算的范围

JSFT(θ)=(xi,yi)DSFTt=1yilogPθ ⁣(yi(t)yi(<t),xi)J_{SFT}(\theta) = -\sum_{(x_i, y_i) \in D_{SFT}} \sum_{t=1}^{|y_i|} \log P_\theta\!\left(y_i^{(t)} \mid y_i^{(<t)}, x_i\right)

  • (xi,yi)(x_i, y_i):(指令 / 用户请求,示范回复)对
  • 只在回复 yiy_i 上计算损失,指令 xix_i 的 token 损失被 mask 掉(不参与梯度更新)
  • 这与标准 CLM 预训练的区别:SFT 的模型需要学的是”给定指令,生成好的回复”,而不是”给定任意前缀,续写任意文本”

数学上,SFT 等价于在条件分布 P(yx)P(y \mid x) 上做最大似然估计(MLE),以人类示范回复作为正样本。

📚 已收录至 拓展阅读知识库

🔢 InstructGPT 数据集规模对比

数据类型规模用途
SFT 示范数据~13K 指令训练 SFT 模型
RM 偏好数据~33K 偏好对训练奖励模型
PPO 提示~31K 提示PPO 在线优化
GPT-3 预训练数据~300B tokens预训练(对比)

关键洞察:SFT 数据量(13K)比预训练数据(3000 亿 token)小约 2300 万倍,但效果变化天翻地覆。这说明对齐是一个数据效率极高的过程——模型的能力已在预训练中存在,SFT 只是”解锁”正确的行为模式。

LIMA 论文(Zhou et al., 2023)进一步证明:1000 个高质量 SFT 样本与 52K 个 Alpaca 样本效果相当甚至更好,彻底颠覆了”SFT 需要大量数据”的认知。

⚠️ 常见误区

  1. 误区:SFT 数据越多越好 → 正确:数据质量远比数量重要。低质量示范(如 GPT-3 自动生成的标注)可能引入坏的行为模式。人工精心标注的少量数据(LIMA 的 1000 条)往往优于自动生成的大量数据(Alpaca 的 52K 条)。

  2. 误区:在指令上也计算损失能帮助模型更好地理解指令 → 正确:在指令上计算损失会让模型同时学”如何生成指令”,这不是目标,且会稀释回复生成的训练信号。正确做法是对指令部分的 token 用 loss mask 屏蔽。

3. RLHF(从人类反馈中强化学习)

Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37
  • 三阶段流水线:SFT -> Reward Model 训练 -> PPO 优化
  • PPO 的复杂性:需要 Policy Model + Value Model + Reward Model + Reference Model
  • KL 散度约束防止偏离预训练分布太远
  • 超参数敏感、在线采样慢、训练不稳定

📐 RLHF 完整流程的数学推导

Step 1:训练奖励模型(Reward Model)

收集人类偏好数据:对同一输入 xx,标注者标记哪个回复更好,形成偏好对 (yw,yl)(y_w, y_l)(winner, loser)。

基于 Bradley-Terry 偏好模型(人类选择 ywy_w 优于 yly_l 的概率):

P(ywylx)=σ(r(x,yw)r(x,yl))P(y_w \succ y_l \mid x) = \sigma(r(x, y_w) - r(x, y_l))

训练 RM 最大化偏好数据的对数似然(最小化负对数似然):

JRM=E(x,yw,yl)Dpref[logσ ⁣(rϕ(x,yw)rϕ(x,yl))]J_{RM} = -\mathbb{E}_{(x, y_w, y_l) \sim D_{pref}} \left[\log \sigma\!\left(r_\phi(x, y_w) - r_\phi(x, y_l)\right)\right]

Step 2:PPO 微调策略

最大化奖励,同时通过 KL 惩罚约束策略不偏离参考模型过远:

JPPO(θ)=ExD,yπθ(x) ⁣[rϕ(x,y)βlogπθ(yx)πref(yx)]J_{PPO}(\theta) = \mathbb{E}_{x \sim D,\, y \sim \pi_\theta(\cdot|x)}\!\left[r_\phi(x, y) - \beta \cdot \log\frac{\pi_\theta(y \mid x)}{\pi_{ref}(y \mid x)}\right]

其中 β[0.01,0.1]\beta \in [0.01, 0.1] 是 KL 惩罚系数,πref\pi_{ref} 是 SFT 模型(固定不更新)。

完整训练所需的模型数量:Policy(更新) + Reference(固定) + Reward(固定) + Value(更新)= 4 个模型同时在显存中,这是 PPO 内存开销大的根本原因。

📚 已收录至 拓展阅读知识库

🔢 Reward Hacking 与 KL 约束的数值示例

场景:奖励模型过度偏好”长且流畅的回复”(常见的 RM 偏差)。

未加 KL 约束时β=0\beta = 0):

  • 模型学会无限重复、填充废话以增加长度
  • 某回复:奖励 r=8.5r = 8.5,但实际对用户无用(reward hacking)

加 KL 约束后β=0.1\beta = 0.1):

  • 某冗长回复:r(x,y)=8.5r(x,y) = 8.5KL=35.0\text{KL} = 35.0

  • 有效奖励 = 8.50.1×35.0=5.08.5 - 0.1 \times 35.0 = 5.0

  • 某精简回复:r(x,y)=7.0r(x,y) = 7.0KL=3.0\text{KL} = 3.0

  • 有效奖励 = 7.00.1×3.0=6.77.0 - 0.1 \times 3.0 = 6.7 ← 更高!

结论:KL 惩罚使模型倾向于用更接近 SFT 模型行为的方式获得奖励,抑制了极端的 reward hacking。

⚠️ 常见误区

  1. 误区:RLHF 是”在人类偏好上优化” → 正确:RLHF 是”在奖励模型上优化”。奖励模型是人类偏好的近似,本身有误差。Goodhart’s Law:“当一个度量指标成为优化目标时,它就不再是好的度量指标”——模型会找到奖励模型的漏洞(如倾向于给更长、语气更确定的回复高分),而不是真正提高有用性。

  2. 误区:KL 约束 β\beta 越小越好(更自由地优化奖励) → 正确β\beta 太小会导致严重的 reward hacking 和模型退化;β\beta 太大则 RLHF 效果微弱(模型几乎不更新)。β\beta 的调优是 RLHF 最重要的超参数之一,通常需要实验搜索。

4. InstructGPT 和 ChatGPT

Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47
  • InstructGPT(Ouyang et al., 2022):首次大规模应用 RLHF
  • 从补全模型到对话助手的关键转变

📐 InstructGPT 三阶段训练流水线

阶段 1 — SFT:在人工示范数据上监督微调,得到 πSFT\pi_{SFT}

θSFT=argmaxθ(x,y)DSFTlogPθ(yx)\theta_{SFT} = \arg\max_\theta \sum_{(x,y)\in D_{SFT}} \log P_\theta(y \mid x)

阶段 2 — RM 训练:学习人类偏好排序,得到奖励函数 rϕ(x,y)r_\phi(x, y)

ϕ=argminϕE(x,yw,yl)[logσ(rϕ(x,yw)rϕ(x,yl))]\phi^* = \arg\min_\phi -\mathbb{E}_{(x,y_w,y_l)}\left[\log\sigma(r_\phi(x,y_w) - r_\phi(x,y_l))\right]

阶段 3 — PPO:在 RM 的奖励下优化策略,约束不偏离 πSFT\pi_{SFT}

θ=argmaxθEyπθ[rϕ(x,y)βKL(πθπSFT)]\theta^* = \arg\max_\theta \mathbb{E}_{y \sim \pi_\theta}\left[r_\phi(x,y) - \beta \cdot KL(\pi_\theta \| \pi_{SFT})\right]

关键结论(InstructGPT 论文原文数字)

在人类评测中,1.3B 参数 InstructGPT 优于 175B 参数 GPT-3(85% 的评测者偏好 InstructGPT 输出)。参数量相差 134 倍,但对齐使小模型胜出——说明行为对齐的收益远超单纯的模型规模

📚 已收录至 拓展阅读知识库

🔢 InstructGPT 的人类评测结果

对比组偏好 InstructGPT 的比例
InstructGPT-1.3B vs GPT-3-175B85%
InstructGPT-175B vs GPT-3-175B~85%
InstructGPT-175B vs RLHF without SFT71%

同等参数量的 InstructGPT-175B 与 GPT-3-175B 对比,仍有 85% 偏好率,说明 RLHF 而非模型规模是主要贡献。

⚠️ 常见误区

  1. 误区:ChatGPT = InstructGPT → 正确:ChatGPT 在 InstructGPT 框架基础上加入了多轮对话历史建模,将整个对话 history 作为 context 输入。此外,ChatGPT 针对安全性有额外的 RLHF 阶段。OpenAI 从未公开 ChatGPT 的完整技术细节。

  2. 误区:RLHF 之后模型完全”听话”,不会产生有害输出 → 正确:RLHF 显著降低了有害输出,但无法完全消除——通过 jailbreak(越狱 prompt)、角色扮演等方法仍可绕过安全训练。这是对抗式 AI 安全研究的核心问题。

5. DPO(Direct Preference Optimization)

Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56 Slide 57
  • 核心洞察:RLHF 目标的闭式解可将 reward model 用 policy 的对数概率比表示
  • RMθ(x,y^)=βlogpθRL(y^x)pPT(y^x)+βlogZ(x)RM_\theta(x, \hat{y}) = \beta \log \frac{p_\theta^{RL}(\hat{y}|x)}{p^{PT}(\hat{y}|x)} + \beta \log Z(x)
  • DPO 损失:JDPO(θ)=E[logσ(RMθ(x,yw)RMθ(x,yl))]J_{DPO}(\theta) = -\mathbb{E}[\log \sigma(RM_\theta(x, y_w) - RM_\theta(x, y_l))]
  • Z(x) 在损失中消去(因为只测量 reward 差异)
  • 用简单的加权 MLE 替代复杂的 RL
  • 开源 LLM 几乎都用 DPO(HuggingFace 排行榜验证)
  • 变体:KTO、IPO 等

📐 DPO 从 RLHF 目标的完整推导

Step 1:RLHF 目标的最优解

RLHF 最大化(对每个输入 xx,对所有可能输出 yy 求最优):

maxπθEyπθ[r(x,y)]βKL[πθ(yx)πref(yx)]\max_{\pi_\theta} \mathbb{E}_{y \sim \pi_\theta}\left[r(x,y)\right] - \beta \cdot KL\left[\pi_\theta(y|x) \| \pi_{ref}(y|x)\right]

对此目标关于 πθ\pi_\theta 取变分,令导数为零,得闭式最优策略

π(yx)=1Z(x)πref(yx)exp ⁣(r(x,y)β)\pi^*(y|x) = \frac{1}{Z(x)}\, \pi_{ref}(y|x)\exp\!\left(\frac{r(x,y)}{\beta}\right)

其中 Z(x)=yπref(yx)exp ⁣(r(x,y)β)Z(x) = \sum_y \pi_{ref}(y|x)\exp\!\left(\frac{r(x,y)}{\beta}\right) 是归一化常数(配分函数)。

Step 2:反解奖励函数

由上式取对数,用 π\pi^* 表示 rr

r(x,y)=βlogπ(yx)πref(yx)+βlogZ(x)r(x,y) = \beta \log\frac{\pi^*(y|x)}{\pi_{ref}(y|x)} + \beta \log Z(x)

Step 3:代入 Bradley-Terry 偏好模型

P(ywylx)=σ(r(x,yw)r(x,yl))P(y_w \succ y_l \mid x) = \sigma(r(x,y_w) - r(x,y_l))

代入 rr 的表达式,βlogZ(x)\beta \log Z(x) 在差值中完全抵消

P(ywylx)=σ ⁣(βlogπ(ywx)πref(ywx)βlogπ(ylx)πref(ylx))P(y_w \succ y_l \mid x) = \sigma\!\left(\beta \log\frac{\pi^*(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log\frac{\pi^*(y_l|x)}{\pi_{ref}(y_l|x)}\right)

Step 4:DPO 损失(用 πθ\pi_\theta 近似 π\pi^*,最大化偏好对数似然):

JDPO(θ)=E(x,yw,yl) ⁣[logσ ⁣(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))]J_{DPO}(\theta) = -\mathbb{E}_{(x,y_w,y_l)}\!\left[\log\sigma\!\left(\beta\log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta\log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}\right)\right]

结论:DPO 完全绕过了奖励模型的训练,直接用偏好数据优化策略,且数学上等价于 RLHF 的最优解。

📚 已收录至 拓展阅读知识库

🔢 DPO vs RLHF 工程复杂度对比

维度RLHF (PPO)DPO
需要的模型数量4(Policy + Value + RM + Ref)2(Policy + Ref)
是否需要在线采样是(每步采样新回复)否(离线偏好数据)
训练稳定性较差(PPO 对超参敏感)较好(标准 MLE 梯度)
GPU 显存需求极高(4 模型同时加载)适中(2 模型)
是否需要 RM 单独训练

典型实践:Llama 2/3、Mistral、Qwen 等主流开源模型的偏好对齐阶段均采用 DPO 或其变体(SimPO、KTO)。

⚠️ 常见误区

  1. 误区:DPO 总是优于 RLHF → 正确:DPO 是离线方法——它只能从固定的偏好数据集中学习,而 PPO 可以通过在线与奖励模型交互动态生成新训练数据(探索未见过的输出)。对于分布外的困难指令,DPO 可能不如 PPO 的在线 RL 有效。近期 Online-DPO 和 DAPO 等方法试图结合两者优势。

  2. 误区:DPO 推导中 Z(x)Z(x) 消去,说明归一化常数无关紧要 → 正确Z(x)Z(x) 消去是数学推导的偶然便利,它实际上仍然存在于最优策略 π\pi^* 中。DPO 的真正假设是:偏好数据是由”接近真正最优策略”的分布生成的,当数据分布与当前策略差距大时(distribution shift),DPO 会失效。

6. GRPO(Group Relative Policy Optimization)

Slide 58
Slide 58
Slide 59
Slide 59
  • 来自 DeepSeekMath(Shao et al., 2024)
  • 相比 PPO 移除了 Value Model,用 group computation 估计 advantage
  • 更简单的训练架构

📐 GRPO 目标函数推导

核心思想:PPO 需要一个单独的 Value Network(价值网络)来估计优势函数(Advantage)A(x,y)A(x,y)——这个网络和策略网络一样大,代价极高。GRPO 用组内相对奖励代替价值网络。

Step 1:组内采样

对同一输入 xx,从当前策略采样 GG 个输出 {y1,,yG}\{y_1, \ldots, y_G\},计算各自奖励 {r1,,rG}\{r_1, \ldots, r_G\}

Step 2:优势估计(组内归一化)

Ai=riμrσr,μr=1Gj=1Grj,σr=1Gj=1G(rjμr)2A_i = \frac{r_i - \mu_r}{\sigma_r}, \quad \mu_r = \frac{1}{G}\sum_{j=1}^G r_j, \quad \sigma_r = \sqrt{\frac{1}{G}\sum_{j=1}^G (r_j - \mu_r)^2}

Ai>0A_i > 0 表示第 ii 个输出优于组内平均,Ai<0A_i < 0 则相反。

Step 3:GRPO 目标(结合 PPO clip 技巧)

JGRPO(θ)=Ex,{yi} ⁣[1Gi=1Gmin ⁣(πθ(yix)πold(yix)Ai,  clip ⁣(πθ(yix)πold(yix),1 ⁣ ⁣ϵ,1 ⁣+ ⁣ϵ)Ai)βDKL(πθπref)]J_{GRPO}(\theta) = \mathbb{E}_{x,\{y_i\}}\!\left[\frac{1}{G}\sum_{i=1}^G \min\!\left(\frac{\pi_\theta(y_i|x)}{\pi_{old}(y_i|x)} A_i,\; \text{clip}\!\left(\frac{\pi_\theta(y_i|x)}{\pi_{old}(y_i|x)}, 1\!-\!\epsilon, 1\!+\!\epsilon\right) A_i\right) - \beta\, D_{KL}(\pi_\theta \| \pi_{ref})\right]

与 PPO 的对比:PPO 用 Ai=riVϕ(x)A_i = r_i - V_\phi(x)VϕV_\phi 是价值网络),而 GRPO 用组内统计替代,消除了对价值网络的需求,节省了约 50% 的训练显存。

📚 已收录至 拓展阅读知识库

🔢 DeepSeek-R1 使用 GRPO 训练推理模型

任务:数学题求解(可自动验证正确性)

参数设置G=16G=16(每题采样 16 个解),ϵ=0.2\epsilon=0.2β=0.04\beta=0.04

一次训练步示例(某道数学题):

解法编号是否正确格式分总奖励 rir_i
y1y_1正确 ✓+0.11.1
y2y_2错误 ✗+0.10.1
y3y_3正确 ✓01.0
…(16个)

μr=0.35\mu_r = 0.35σr=0.42\sigma_r = 0.42

  • A1=(1.10.35)/0.42=1.79A_1 = (1.1 - 0.35)/0.42 = 1.79(上调概率)
  • A2=(0.10.35)/0.42=0.60A_2 = (0.1 - 0.35)/0.42 = -0.60(下调概率)

训练信号:增加 y1y_1 类解法的概率,降低 y2y_2 类解法的概率——模型学会”比平均水平更好的解题思路”。

⚠️ 常见误区

  1. 误区:GRPO 可以用于任何 NLP 任务 → 正确:GRPO 依赖可自动评分的奖励函数(如数学答案对错、代码是否通过测试)。对于需要人类判断的开放性任务(如写作风格、创意),无法在每步对 G=16G=16 个输出进行快速自动评分,实践中通常用预训练的奖励模型代替,但这又带回了奖励模型偏差的问题。

  2. 误区:组内采样数 GG 越大越好 → 正确GG 增大确实能让优势估计更准确,但计算成本是 O(G)O(G) 的。当 GG 过大时,正确/错误样本比例可能过于固定(高难题全错、简单题全对),组内方差趋近于零,优势估计退化。DeepSeek-R1 选择 G=16G=16 是经过消融实验的平衡点。

7. 偏好数据的伦理问题

Slide 60 Slide 61 Slide 62 Slide 63 Slide 64
  • RLHF 标注数据来源:大量海外低薪劳工
  • 标注者偏见可能渗入模型(OpinionQA 研究)
  • Reward model 对不同国家/文化的偏好不均匀
  • AI Feedback 作为替代:RL from AI Feedback(Bai et al., 2022)

💡 为什么这样做?

RLHF 的本质是用”人类偏好”定义”好的回复”,但人类偏好是主观的、文化相关的、有偏的。OpenAI 的 InstructGPT 标注者主要来自美国和英语国家;Anthropic 使用众包平台(Mechanical Turk)的标注者人口结构偏向年轻、英语为母语的人群。这些偏好被嵌入奖励模型,再被 RLHF 放大。结果是:模型对某些文化背景的用户”更有帮助”,对其他文化的用户则可能产生偏见性或不当回复。OpinionQA 研究(Santurkar et al., 2023)发现,主流 LLM 的意见分布与特定人口群体高度相关,不能代表全球用户多样性。

⚠️ 常见误区

  1. 误区:RLHF 让模型更诚实(Honest)→ 正确:RLHF 让模型产生看起来诚实的回复,但奖励模型通常由倾向于给”自信、流畅回复”高分的人类标注者训练。这可能导致模型学会”自信地编造事实”(hallucination with confidence),而不是”诚实地承认不确定性”。真正的诚实需要专门设计针对不确定性表达的评估和训练数据。

  2. 误区:用 AI Feedback(RLAIF,Bai et al., 2022)代替人类标注可以消除偏见 → 正确:RLAIF 只是将偏见的来源从”人类标注者”转移到”作为评判者的 LLM”。评判模型本身就包含了人类偏见(因为它也是由人类数据训练的),偏见并没有消失,只是变得更不透明。

推荐阅读

关联概念

个人笔记