RLHF 论文演进与变体
RLHF(基于人类反馈的强化学习)是大语言模型对齐的核心技术,从 InstructGPT 到 ChatGPT,RLHF 将原始语言模型转变为有用的助手。本文梳理 RLHF 的论文演进和重要变体。
RLHF 流程
标准 RLHF 包含三个阶段:
阶段一:监督微调(SFT)
用高质量指令-响应对微调预训练模型:
python
# SFT 阶段
def sft_train(model, sft_data, epochs=3, lr=2e-5):
"""监督微调"""
optimizer = torch.optim.AdamW(model.parameters(), lr=lr)
for epoch in range(epochs):
for batch in sft_data:
input_ids = batch["input_ids"]
labels = batch["labels"]
loss = model(input_ids, labels=labels).loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
return model阶段二:奖励模型训练
收集人类偏好数据,训练奖励模型:
python
class RewardModel(nn.Module):
"""奖励模型"""
def __init__(self, base_model, hidden_dim=768):
super().__init__()
self.base = base_model
self.reward_head = nn.Linear(hidden_dim, 1)
def forward(self, input_ids):
hidden = self.base(input_ids).last_hidden_state
# 取最后一个 Token 的表示
reward = self.reward_head(hidden[:, -1, :])
return reward.squeeze(-1)
def preference_loss(self, chosen_ids, rejected_ids, margin=0.0):
"""Bradley-Terry 偏好损失"""
chosen_reward = self.forward(chosen_ids)
rejected_reward = self.forward(rejected_ids)
loss = -torch.log(
torch.sigmoid(chosen_reward - rejected_reward - margin)
).mean()
return loss阶段三:PPO 强化学习
使用奖励模型指导策略优化:
- 使用 KL 散度惩罚防止策略偏离 SFT 模型
- PPO 裁剪确保稳定训练
KL 惩罚的重要性
没有 KL 惩罚,PPO 可能找到奖励模型的漏洞——生成获得高奖励但无意义的文本(奖励黑客现象)。KL 惩罚确保输出保持自然语言特性。
论文演进
| 时间 | 工作 | 核心贡献 |
|---|---|---|
| 2020 | Ziegler et al. | 首次将 RLHF 应用于文本生成 |
| 2022 | InstructGPT | RLHF 在 GPT-3 上的规模化应用 |
| 2023 | Llama 2 | 开源 RLHF 最佳实践 |
| 2023 | DPO | 简化 RLHF,无需奖励模型 |
重要变体
DPO(直接偏好优化)
DPO 绕过奖励模型训练,直接从偏好数据优化策略:
$$\mathcal{L}{DPO} = -\mathbb{E}\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]$$
RLAIF(AI 反馈强化学习)
用 AI 替代人类提供偏好反馈,实现更可扩展的对齐。
RRHF(排名响应 HF)
简化 RLHF 流程,直接在排序的响应上训练,无需 PPO。