CS336 Lecture Notes 8

2974 字
15 分钟
CS336 Lecture Notes 8
Warning

本文为本人学习相关开源课程过程中,整理的个人学习笔记及作业解答,核心目的仅用于记录个人学习轨迹、巩固所学知识、梳理学习思路,全程为个人自主学习使用,不具备任何商业用途,也不构成任何形式的课程辅导或标准答案参考。

需特别说明的是,由于本人学习进度及知识储备有限,笔记内容及作业解答中可能存在大量纰漏、思路偏差甚至错误,仅代表本人当时的学习理解,不具备权威性和准确性。

在此郑重提醒:请勿将本文中的任何作业解答复制粘贴,作为自身所修课程的提交答案。任何因抄袭本文内容导致的课程成绩问题、学术诚信问题,均由抄袭者自行承担全部责任,本人不承担任何相关连带责任。

同时,本文所分享的内容均基于开源课程的公开内容整理,尊重原课程创作者的知识产权,若涉及相关内容的版权问题,请及时联系本人,本人将第一时间进行调整或删除。

感谢各位读者的理解与支持,也欢迎大家针对笔记及解答中的问题提出宝贵建议,共同交流学习、共同进步。

Important

Alignment - SFT/RLHF#

课程定位#

本节课程关注如何从预训练模型(如GPT-3)过渡到指令跟随模型(如InstructGPT)。预训练数据并不完全符合我们的需求,因此需要收集符合期望行为的数据来训练模型。核心问题包括:

  1. 这些数据应该是什么样子?
  2. 如何最好地利用这些数据?
  3. 是否需要大规模数据?

标准方法流程:模仿学习(SFT)→ 强化学习(RLHF)


Part 1: 监督微调(SFT)#

训练数据类型#

常见的指令微调数据集包括:

  • FLAN:包含多种任务类型(邮件主题生成、文本分类、文章摘要等)
  • Alpaca:基于Self-Instruct生成的指令数据
  • OpenAssistant (OASST):开源众包数据,包含更长、更复杂的回答

数据集特征分析#

可见的差异:

  • 回答长度和格式风格(如是否使用要点)
  • 引用和复杂知识的呈现

不可见但重要的因素:

  • 规模(Scale)
  • 安全性(Safety)

风格变化的影响#

模型在回答长度上差异很大,偏好评估中风格因素影响显著:

  • 人类和GPT评估都存在强烈的长度效应(length effects)
  • 但这些因素对其他基准测试性能影响较小

知识提取与对齐#

关键发现: 在模型”不知道”的事实上进行微调可能导致幻觉(hallucination)

实践经验:

  1. 不建议在长尾知识上进行微调,即使这是LM的使用场景
  2. 原则上,“RL”式的正确性反馈可能有帮助
  3. LM中的知识存储和提取是复杂且微妙的

安全微调(Safety-tuning)#

LM广泛部署给终端用户,需要安全控制:

  • 风险类型:错误信息、诈骗和垃圾邮件
  • 少量指令微调可显著改变安全特性
  • 挑战:平衡安全性与过度拒绝(over-refusals)

研究发现:仅约500个样本即可显著改善安全性,同时添加500个Alpaca风格示例可使模型遵循安全指南。

SFT数据总结#

  1. 指令微调(SFT)在提取预训练行为而非添加新行为时效果最佳
  2. 添加(事实正确的)数据有时可能有害
  3. 少量正确类型的行为数据(安全、指令跟随、风格)能产生显著效果,但长尾部分需要更多数据

微调方法#

基础方法: 直接使用梯度下降

规模化方法 - Midtraining / Two-phase training:

  1. 在web/预训练数据上预训练
  2. 将指令微调数据混入预训练
  3. 进行实际(但较短的)指令微调轮次

这种方法可规模化指令微调而避免灾难性遗忘,被大多数LLM公司采用。


Part 2: RLHF部分#

从模仿到优化#

模仿(SFT):

  • 拟合 p^(yx)p(yx)\hat{p}(y|x) \approx p^*(y|x) 对于某个参考分布
  • 纯生成建模视角
  • 需要从参考策略采样

优化(RLHF):

  • 找到 p^(yx)\hat{p}(y|x) 使得 maxpEp[R(y,x)]\max_p E_p[R(y,x)] 对于奖励函数 R(y,x)R(y,x)
  • 最大化可测量的奖励函数
  • LM是策略,而非某个分布的模型

为什么需要优化?#

成本考量:

  • SFT数据可能非常昂贵
  • 专家验证任务比解决任务更容易
  • 对于7B模型:SFT约300k,评估300k,评估100;而 pairwise feedback + RL约25k25k-4k

G-V Gap(Generation-Verification Gap): 人们并不总是写出他们偏好的LM输出内容

RLHF数据收集#

标准 Pairwise Feedback 设置:

  • 给定输入x,模型生成两个输出 y1,y2y_1, y_2
  • 标注者选择更好的输出
  • 可选:标注者提供文字反馈

标注者选择:

  • InstructGPT使用Scale + Upwork,约40名标注者
  • 需要仔细筛选高质量标注者

众包的复杂性:

  • 难以获得真正高质量、可验证的标注者
  • 难以确保他们真正检查正确性
  • 需要注意GPT-4的使用

人口统计学影响: RLHF的标注者分布会显著改变模型行为

LM生成的反馈:

  • GPT-4作为pairwise feedback系统表现出色
  • 在成本-质量光谱低端,AI反馈常用于RLHF
  • 用于Olmo、Zephyr等模型

PPO算法简介#

PPO(Proximal Policy Optimization)是RLHF的经典方法:

  1. 策略梯度:方差太高 θEpθ[R(z)]=Epθ[R(z)θlogpθ(z)]\nabla_\theta E_{p_\theta}[R(z)] = E_{p_\theta}[R(z)\nabla_\theta \log p_\theta(z)]

  2. TRPO:在当前策略附近线性化问题

  3. PPO:在某个ε处裁剪比率

PPO实现复杂,需要reward model、rollout、外循环等组件。

DPO算法详解#

DPO(Direct Preference Optimization) 简化了PPO:

  • 不需要reward model
  • 不需要on-policy相关内容(rollouts、外循环等)

核心思路:

  • 对”好”的内容进行正梯度更新
  • 对”坏”的内容进行负梯度更新(适当加权)

DPO推导:

  1. RLHF目标是优化:maxπE(x,yw,yl)D[logσ(r(x,yw)r(x,yl))]\max_\pi E_{(x,y_w,y_l) \sim D}[\log \sigma(r(x,y_w) - r(x,y_l))]

  2. 假设策略π是所有策略的集合(非参数假设),最优策略为: π(yx)πref(yx)exp(r(x,y)/β)\pi^*(y|x) \propto \pi_{ref}(y|x) \exp(r(x,y)/\beta)

  3. 解出隐含奖励: r(x,y)=βlogπθ(yx)πref(yx)r(x,y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}

  4. DPO目标函数: LDPO=E(x,yw,yl)D[logσ(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))]\mathcal{L}_{DPO} = -E_{(x,y_w,y_l) \sim D}[\log \sigma(\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)})]

关键步骤:

  1. 做非参数假设(将πθ\pi_\theta和r以闭式关联)
  2. 通过策略参数化奖励r
  3. 使用监督损失优化奖励(进而优化策略)

DPO变体:

  • SimPO:无参考模型
  • Length-normalized DPO:长度归一化

RLHF注意事项#

过优化(Overoptimization):

  • 在多种RLHF优化器中,过度优化奖励会导致过拟合
  • 对人类偏好和噪声LM偏好成立,但对无噪声LM偏好不成立

模式崩塌(Mode Collapse):

  • RLHF使模型不再成为”概率模型”
  • 默认情况下没有校准(calibration)

总结#

SFT要点:

  1. SFT最适合提取预训练行为而非添加新行为
  2. 添加数据有时可能有害(幻觉风险)
  3. 少量高质量数据可产生显著效果

RLHF要点:

  1. RLHF数据收集同样困难,存在许多混淆因素
  2. RLHF算法比SFT复杂(尤其是PPO)
  3. 注意过度优化奖励的影响
  4. DPO提供了更简单的替代方案

Alignment - RL#

课程定位#

本节课程关注如何从 GPT-3.5 级别模型进一步提升到 o1/r1 级别的推理模型。RLHF 存在过优化问题,难以直接扩展。核心思路是在 RL 能发挥优势的领域工作——即可以精确优化目标的领域。


Part 1: PPO 回顾与实践#

PPO 理论基础#

PPO 的演进历程:

  1. Policy Gradient:方差太高 θEpθ[R(z)]=Epθ[R(z)θlogpθ(z)]\nabla_\theta E_{p_\theta}[R(z)] = E_{p_\theta}[R(z)\nabla_\theta \log p_\theta(z)]
  2. TRPO:在当前策略附近线性化问题
  3. PPO:在某个 ε 处裁剪比率

PPO 在语言模型中的应用#

在语言模型设置中,PPO 与标准 RL 公式相似:

  • Actions 操作在 tokens 上
  • 序列末端有密集奖励

PPO 实践组件:

  1. 外循环:调用内循环在 rollouts 上优化损失
  2. 损失计算:标准的裁剪损失,cliprange=0.2
  3. Reward Shaping
    • 添加 per-token KL penalty
    • 最后 token 的完整奖励
    • 裁剪 KL 以防止新策略 logp < 参考策略 logp 时 KL 发散
  4. Generalized Advantage Estimate (GAE)
    • 使用 advantages 而非 reward
    • 这是一个 bandit 问题,gamma=lambda=1 即可

PPO 的问题#

  • 实现复杂
  • Value model 内存消耗大,需要额外调优
  • 为什么不用 DPO?数据不总是 pairwise 形式,且是 offline 方法

Part 2: GRPO 算法#

GRPO 核心思想#

GRPO (Group Relative Policy Optimization)

  • 从 PPO 开始(许多部分相似)
  • 移除 value function / advantage computation
  • 将 advantage 计算为”组内 z-score”

在 online case(rollout + immediate update)中,这实际上是带组归一化奖励的 policy gradient。

GRPO 实现步骤#

GRPO 实现非常简单:

  1. 计算每个 rollout 的奖励
  2. 组内 Mean/Var 归一化
  3. 计算 KL term
  4. 对损失进行梯度更新

GRPO 理论分析#

关键问题:GRPO vs PPO 的区别在于 advantage 计算 A^i=rimean(r)std(r)\hat{A}_i = \frac{r_i - \text{mean}(r)}{\text{std}(r)}

问题:除以 stdev 不是保持 unbiasedness 的有效 baseline。

Liu et al 2025 提出了 unbiased-gradient 版本的 GRPO(接近 reinforce w/ leave-one-out)。

GRPO 的长度偏差#

  • Stdev term:过度加权太简单或太难的问题
  • Length normalization 需要修正

Part 3: 案例研究#

DeepSeek R1#

R1 的突破性意义:

  • 性能超越 OpenAI O1
  • 开放且简单的 RL recipe
  • 结束了关于 MCTS/PRMs 必要性的争论

R1-Zero 设置:

  • 奖励:Accuracy rewards + Format rewards(使用 thinking tags)
  • Base model:DeepSeek-V3
  • 结果略逊于 OpenAI O1

有趣现象:

  • 训练过程中 CoT 变长
  • “aha moment”(顿悟时刻)——可能被过度渲染

R1 vs R1-Zero 关键差异:

  1. SFT 初始化
  2. 语言一致性奖励(用于 CoT)
  3. 非可验证奖励(第二阶段)

训练流程:

  1. SFT 初始化:使用长 CoT 数据
  2. RL step:与 R1-Zero 相同,增加语言一致性 loss
  3. SFT/RLHF:
    • SFT:推理数据(600k)+ 非推理数据(200k)
    • RLHF:推理 RLHF + 非可验证任务的 GRPO

Distillation:

  • 用 R1 生成 800k CoT traces
  • 教 Qwen 2.5 通过 distillation 学习

失败尝试:

  • PRMs(PRM800k, DeepSeekMath)
  • MCTS

Kimi K1.5#

核心步骤:

  1. Dataset construction(难度过滤)
  2. SFT(用于长 CoT)
  3. RL(使用自己的 policy gradient loss)

数据筛选:

  • 平衡数学主题
  • 排除多选题/判断题(避免假阳性)
  • 仅选择 best-of-8 失败的样本

Kimi RL 算法:

  • Reference-based reward model
  • DPO-type derivation(非参数假设 + 解出 r)
  • 使用 squared loss 作为 surrogate

长度控制:

  • 每个 batch 有长度奖励
  • λ 在 [0.5, -0.5],较长序列为负
  • 正确答案鼓励短,错误答案鼓励比 rollout 中间值更短

额外细节:

  • Curriculum:从易到难
  • 奖励:代码用 ground truth + 新测试用例;数学用 800k 样本训练 CoT reward model

Ablation 结果: Expert iteration(仅从正样本学习)不如 RL-style negative gradients

Qwen 3#

整体流程: RLHF 在 reasoning RL 之后,distillation 最后

SFT + Reasoning RL:

  • 难度过滤(best-of-n)
  • 移除无 CoT 即正确的样本
  • 移除与验证数据太相似的样本
  • 手动过滤 CoT 质量
  • RL 仅用 3995 个样本

新特性:Thinking Mode Fusion:

  • 混合 non-thinking 和 thinking 数据(带 tags)
  • 通过特殊字符串提前终止

Test Time Scaling: 可控制 CoT 长度

阶段组成:

  • Math/STEM 能力在通用 RLHF 后略有下降

Part 4: RL 基础设施#

RL 效率挑战:

  • On-policy = rollouts = 慢推理
  • 训练和 rollouts 切换常涉及不同框架
  • 长 CoT 使 batch 很不均匀

总结#

核心要点:

  1. 过优化是问题 → 在狭窄领域用 RL 是解决方案
  2. GRPO 简单但有缺陷, enables RLVR
  3. 多个成功 recipe(R1, Kimi 1.5, Qwen 3)

算法对比:

方法优点缺点
PPO经典、成熟实现复杂、需要 value model
DPO无 reward model、offline数据需 pairwise、非 online
GRPO简单、无 value functionadvantage 计算有偏差

关键洞察:

  • 少量数据(1k-4k)即可有效 bootstrap 推理
  • SFT 初始化很重要
  • 语言一致性、长度控制是重要细节

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
CS336 Lecture Notes 8
https://llm-tech.com.cn/posts/cs336-lec-notes-8/
作者
Ming
发布于
2026-05-04
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Ming
你是来找 Ming 学习的吗
🎉 欢迎来到 Ming 的博客
这里是我的个人博客,分享 AI Infra、LLM 等技术内容。欢迎关注交流!
分类
标签
站点统计
文章
19
分类
6
标签
12
总字数
69,591
运行时长
0
最后活动
0 天前

目录