大模型强化学习中的 PPO、DPO、KTO、ORPO 全解析

本文聚焦大语言模型(LLM)微调阶段中的强化学习方法,全面介绍四大主流算法:PPO(Proximal Policy Optimization)、DPO(Direct Preference Optimization)、KTO(Kullback-Leibler Preference Optimization)、ORPO(Offline RL with Preference Optimization)。通过原理、训练样例、公式与代码解析,帮助你理解它们在 RLHF(基于人类反馈的强化学习)中的定位与区别。


目录

  1. PPO:传统但强大的策略优化方法
  2. DPO:去奖励建模的偏好优化算法
  3. KTO:KL 指导的直接偏好优化
  4. ORPO:离线偏好监督强化学习
  5. 总结对比

PPO:Proximal Policy Optimization

原理

PPO 是强化学习中最常见的策略优化算法之一,适用于 RLHF 的最后一阶段。它通过约束新旧策略之间的距离,避免模型剧烈更新。

在 LLM 中,PPO 通常如下流程:

  • 提供一个问题 prompt
  • 当前策略生成多个候选回复
  • 使用奖励模型(Reward Model)打分
  • 将得分用于更新策略

样例数据

{
  "prompt": "Explain quantum computing in simple terms",
  "completion": "Quantum computing uses qubits instead of bits...",
  "reward": 6.2
}

公式

目标函数(clipped)如下:

LPPO(θ)=Et[min⁡(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)] L^{PPO}(\theta) = \mathbb{E}_t \left[ \min(r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t) \right] LPPO(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)]

其中:

  • rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{old}}(a_t | s_t)}rt(θ)=πθold(atst)πθ(atst)
  • A^t\hat{A}_tA^t 是 advantage(优势函数)

简单实现(使用 trl 库)

from trl import PPOTrainer
trainer = PPOTrainer(model, ref_model, tokenizer, args)
trainer.step(prompt_tensors, response_tensors, rewards)

DPO:Direct Preference Optimization

原理

DPO 不再训练奖励模型,而是直接使用人类偏好进行优化。输入为两条回复(chosen 和 rejected),目标是让模型直接学会偏好。

优势:

  • 无需训练额外 reward model
  • 与 SFT 类似的训练范式,稳定易实现

样例数据

{
  "prompt": "What is the capital of France?",
  "chosen": "The capital of France is Paris.",
  "rejected": "France's capital city is Germany."
}

公式

优化目标为最大化以下似然差异:

LDPO=log⁡exp⁡(βfθ(x,y+))exp⁡(βfθ(x,y+))+exp⁡(βfθ(x,y−)) \mathcal{L}_{\text{DPO}} = \log \frac{\exp(\beta f_\theta(x, y^{+}))}{\exp(\beta f_\theta(x, y^{+})) + \exp(\beta f_\theta(x, y^{-}))} LDPO=logexp(βfθ(x,y+))+exp(βfθ(x,y))exp(βfθ(x,y+))

其中:

  • fθ(x,y)f_\theta(x, y)fθ(x,y) 是模型输出对输入 xxx 生成 yyy 的打分(logit)
  • β\betaβ 控制偏好强度

简单实现(trl)

from trl import DPOTrainer
trainer = DPOTrainer(model, args)
trainer.train(preference_dataset)

KTO:KL-guided Preference Optimization

原理

KTO 是 DPO 的改进版,引入了 KL 正则项,鼓励新模型不要偏离参考模型太远。

适用于奖励来源不稳定或参考模型非常可靠的场景。

样例数据

与 DPO 相同(prompt + chosen + rejected)

公式

KTO 的损失函数如下:

LKTO=LDPO+λ⋅KL(πθ∥πref) \mathcal{L}_{KTO} = \mathcal{L}_{\text{DPO}} + \lambda \cdot KL(\pi_{\theta} \| \pi_{\text{ref}}) LKTO=LDPO+λKL(πθπref)

实现(类 DPO,可加 KL loss)

loss = dpo_loss + lambda_ * kl_divergence(new_logits, ref_logits)

ORPO:Offline RL with Preference Optimization

原理

ORPO 是 OpenChat 提出的 RLHF 替代方案。目标是用 offline dataset(已存在的人类偏好数据)一次性训练,无需在线 rollout。

核心思想:将奖励模型的偏好信息嵌入损失函数中,像 SFT 一样训练。

样例数据

{
  "prompt": "Define inflation.",
  "response": "Inflation is the rate at which prices increase...",
  "score": 0.85
}

公式

ORPO 的损失包含两个部分:

LORPO=LMLE−λ⋅R(y) \mathcal{L}_{\text{ORPO}} = \mathcal{L}_{\text{MLE}} - \lambda \cdot R(y) LORPO=LMLEλR(y)

  • LMLE\mathcal{L}_{\text{MLE}}LMLE 是传统的最大似然损失
  • R(y)R(y)R(y) 是偏好得分(或奖励)

简单实现

loss = cross_entropy_loss - lambda_ * reward_score

总结对比

方法 训练阶段 是否需奖励模型 是否用偏好数据 在线策略优化 适用场景
PPO RLHF 后期 间接 高控制力
DPO 替代 RLHF 稳定、易部署
KTO DPO 增强 偏差控制好
ORPO 替代 RLHF 离线数据训练

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐