外观
RLHF 变种与 PPO 详解
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
一、LLM 经典预训练 Pipeline
目前基于 Transformer Decoder 的 LLM(如 ChatGPT、LLaMA、Baichuan 等)的 Chat 模型训练包含三个步骤:
预训练(Pre-training) → 有监督微调(SFT) → 对齐(Alignment / RLHF)- 预训练:在数十亿到数万亿 token 的文本语料上训练,使模型能够预测「下一个单词」
- 有监督微调(SFT):使用人工标注的指令数据集,训练目标仍是预测「下一个单词」,但输入是指令,输出为预期回复
- 对齐(Alignment):通过 RLHF 将语言模型与人类偏好、价值观对齐
SFT vs 预训练
| 维度 | 预训练 | SFT |
|---|---|---|
| 训练目标 | 相同:预测下一个单词 | 相同:预测下一个单词 |
| 数据量 | 极大 | 小很多 |
| 数据标注 | 无需标注 | 需要人工标注的指令数据 |
SFT 数据格式示例
Instruction: "Write a limerick about a pelican."
Output: "There once was a pelican so fine..."二、RLHF 详细流程
Step 1: SFT 微调
收集 Prompts 集合,标注人员写出高质量回复,以监督方式微调预训练基础模型。
Step 2: 训练奖励模型(RM)
对每个 Prompt,让 SFT 后的 LLM 生成 4~9 个回复,标注人员根据偏好排序。RM 来自 SFT 模型,将其输出通过一个回归层(单个输出节点)转换为奖励分数。
Step 3: PPO 微调
基于 RM 使用 PPO(Proximal Policy Optimization)算法微调 SFT 模型。
三、PPO 训练详解
3.1 PPO 三步流程
采样(生成答案) → 反馈(计算奖励) → 学习(更新参数)python
policy_model = load_model()
for k in range(20000):
# 采样
prompts = sample_prompt()
data = respond(policy_model, prompts)
# 反馈
rewards = reward_func(reward_model, data)
# 学习
for epoch in range(4):
policy_model = train(policy_model, prompts, data, rewards)3.2 角色类比
- 老师(我们):给出有趣的问题
- 学生(模型):不断尝试给出答案,答得好给予奖励,答得不好给予反馈
3.3 采样策略(Policy)
Policy 由两个模型组成:
| 角色 | 说明 |
|---|---|
| Actor(演员) | 要训练的目标大模型(RLHF 第一步的 SFT model),输入上下文,输出 token 概率分布 |
| Critic(评论家) | 强化学习辅助模型,输入上下文,输出下一个 token 的"收益"(从下一个 token 开始能获得的总奖励) |
四、LLaMA 2 的 RLHF 改进
4.1 与 InstructGPT 的区别
- 使用两个奖励模型:一个侧重「有用性(Helpfulness)」,一个侧重「安全性(Safety)」
- 最终奖励函数为两个分数的线性组合
- 增加了拒绝采样(Rejection Sampling) 步骤
- 奖励模型会根据 LLaMA-2-chat 模型出现的错误进行迭代更新
4.2 Margin Loss
Llama 2 在排序训练中引入边际损失(Margin Loss):
- 标准 RLHF:对同一 Prompt 下的 4-9 个输出排序
- Llama 2:每次只看两个回复对比,新增边际标签,对比结果可以是「显著更好」或「好的不明显」
- 排序训练示例:A < C < D < B → 6 个对比对:A<C, A<D, A<B, C<D, C<B, D<B
4.3 拒绝采样(Rejection Sampling)
- 同时使用 PPO 和拒绝采样算法,迭代产生多个 RLHF 模型(RLHF-V1 到 V5)
- 拒绝采样:生成 K 个输出,使用最高奖励的输出更新梯度
- PPO:每次基于单样本更新
- SFT 初始阶段后,先仅用拒绝采样训练,再结合拒绝采样和 PPO
五、RLHF 替代方案
5.1 Constitutional AI
基于人类提供的规则列表的自我训练机制,使用"红队(Red Team)"测试防御能力。
5.2 HIR(Hindsight Instruction Relabeling)
基于重新标记的监督微调方法,将失败案例(LLM 输出与原始指令不匹配)转化为有用训练数据。在 12 个 BigBench 任务上优于 RLHF。
5.3 DPO(Direct Preference Optimization)
直接偏好优化,替代 PPO-based RLHF。RLHF 中拟合奖励模型的交叉熵损失可直接用于微调 LLM。使用 DPO 更高效,响应质量通常优于 RLHF/PPO。
5.4 ReST(Reinforced Self-Training)
使用采样方法创建改进数据集,在质量越来越高的子集上迭代训练以完善奖励函数。ReST 通过离线生成训练数据集实现更高效率。
5.5 RLAIF
RLHF 中奖励模型训练的评分可以由 LLM(如 PaLM 2)生成而非人类提供。标注人员在一半案例中更偏好 RLAIF 模型,意味着两者差距不大。RLHF 和 RLAIF 都大大优于纯 SFT 模型。
六、RLHF 实践:最优 Checkpoint 选取
核心问题
Reward Model 输出的只是近似奖励(Proxy Reward),不能完全信任训练过程中的 Reward 变化。"更高"的 Reward 不一定意味着"更好"的效果。
奖励曲线特征
- 随着训练模型与初始模型的 KL 散度增大,真实分数先升后降(存在最优峰值)
- 但近似分数(RM 打出)一直稳步上升
- 需要找到真实分数曲线的最高点对应的 KL 值
Reward 估算公式
OpenAI 给出了真实 Reward 的估算公式(BON/RL 不同训练方式对应不同公式),核心参数为 α、β 和 d(d = √KL(初始模型, 当前模型))。
实验结论:
| 发现 | 说明 |
|---|---|
| RM 越大 | Actor 模型能获得更高的真实 reward |
| RM 越大 | 能在更大 KL 处发生下降转折 |
| RM 数据集越大 | 最终提升越大 |
| RM 数据下限 | 至少需要超过 2000 条训练数据 |
| Policy 模型越大 | 利用 RM 提升的收益越小(但绝对分数更高) |
| 最优 KL | 无论 Policy 模型大小如何,最优 Reward 对应的 KL 值相同 |