Skip to content

RLHF 变种与 PPO 详解

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

一、LLM 经典预训练 Pipeline

目前基于 Transformer Decoder 的 LLM(如 ChatGPT、LLaMA、Baichuan 等)的 Chat 模型训练包含三个步骤:

预训练(Pre-training) → 有监督微调(SFT) → 对齐(Alignment / RLHF)
  1. 预训练:在数十亿到数万亿 token 的文本语料上训练,使模型能够预测「下一个单词」
  2. 有监督微调(SFT):使用人工标注的指令数据集,训练目标仍是预测「下一个单词」,但输入是指令,输出为预期回复
  3. 对齐(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 值相同