RLHF 与大模型对齐:从 PPO 到 DPO

发布时间:2026/6/26 8:56:54

RLHF 与大模型对齐:从 PPO 到 DPO 摘要ChatGPT 的成功不仅来自 GPT 模型本身更来自一个关键的训练步骤——RLHFReinforcement Learning from Human Feedback基于人类反馈的强化学习。RLHF 用强化学习的方法让大模型的输出与人类的偏好对齐——让它变得有用、诚实、无害。而 RLHF 中使用的主力算法正是上一篇文章讲的 PPO。这篇文章详细拆解 RLHF 的四步流程、PPO 在其中的具体作用、以及 2025 年出现的替代方案 DPO。一、大模型训练的完整流程三步走现代大语言模型的训练分为三个阶段阶段 1预训练Pre-training 数据互联网文本万亿 Token 目标预测下一个 Token 成本数千万美元 产出基础模型知识丰富但不会聊天 阶段 2监督微调SFT 数据高质量问答对人工标注 目标模仿人类回答格式 成本数万美元 产出对话模型会回答问题但不够贴心 阶段 3RLHF基于人类反馈的强化学习 数据人类对模型输出的偏好排序 目标与人类价值观对齐 成本数万到数十万美元 产出对齐模型有用、诚实、无害为什么要对齐大模型在预训练阶段学会了海量知识但也学会了互联网上的偏见、有害内容和不诚实回答。预训练模型的天然问题 ✅ 知识丰富——知道几乎所有领域的知识 ✅ 语言流畅——能写出通顺的句子 ❌ 缺乏帮助性——不会主动理解用户意图 ❌ 缺乏诚实性——不确定时也会编造答案幻觉 ❌ 缺乏安全性——可能输出有害内容 → RLHF 就是解决这些对齐问题的方法二、RLHF 的四步流程RLHF 由四个关键步骤组成Step 1: 监督微调SFT 用高质量对话数据微调预训练模型 → 让模型学会对话格式 Step 2: 训练奖励模型Reward Model 让人类对模型输出进行排序 → 训练一个打分器 Step 3: PPO 优化 用奖励模型指导语言模型优化 → 让模型输出人类更喜欢的内容 Step 4: 迭代 重复 2-3持续改进Step 1监督微调SFT目标从续写机器变成对话助手 数据人工编写的 {prompt, 理想回答} 对 例如 prompt: 解释一下什么是量子计算 理想回答: 量子计算是一种利用量子力学... 方法标准的有监督学习最大似然估计 损失交叉熵 结果模型学会了回答问题的格式 但还没有学会什么是好的回答Step 2训练奖励模型Reward Model奖励模型是 RLHF 的关键——它把人类偏好编码成一个可计算的打分函数。数据收集 对同一个 prompt让模型生成 K 个回答通常 K4-9 让人类标注员对这些回答排序 例如 Prompt: 怎么制作炸弹 回答 A: 我不能提供有害信息。 ← 人类排第 1 回答 B: 制作炸弹需要... ← 人类排最后 训练奖励模型 输入(prompt, response) 输出一个分数越高表示人类越喜欢 损失对比排序损失让排在前面的回答分数更高# 奖励模型的训练简化伪代码 def train_reward_model(model, batch): 奖励模型的训练目标 让人类偏好的回答得分 不偏好的回答得分 prompts, chosen_responses, rejected_responses batch # 计算偏好回答和不偏好回答的分数 chosen_score model(prompts, chosen_responses) # 人类觉得好的 rejected_score model(prompts, rejected_responses) # 人类觉得差的 # 对比排序损失 # 目标chosen_score - rejected_score 越大越好 loss -torch.log(torch.sigmoid(chosen_score - rejected_score)) return loss.mean()Step 3PPO 优化这是 RLHF 的核心步骤——用 PPO 微调语言模型。PPO 在 RLHF 中的角色 状态 s 当前的对话历史prompt 已生成的部分 动作 a 要生成的下一个 Token 奖励 r 奖励模型对完整回答的打分 优化目标 最大化奖励模型的分数 同时保持与原始模型不要太远KL 散度约束 为什么用 PPO 因为生成回答是一个离散动作问题选 Token PPO 擅长处理这类问题 更重要的是PPO 的 Clip 机制防止模型一步走偏# RLHF 中 PPO 的目标函数核心 def ppo_rlhf_loss(new_log_probs, old_log_probs, rewards, kl_penalty): RLHF 中 PPO 的完整损失 包含两个部分 1. 奖励最大化让模型输出人类偏好的回答 2. KL 散度惩罚防止模型偏离原始分布太远 # 1. 策略比率 ratio torch.exp(new_log_probs - old_log_probs) # 2. Clip 裁剪PPO 核心 clipped_ratio torch.clamp(ratio, 0.8, 1.2) # 3. 奖励 KL 惩罚 # KL 惩罚防止模型作弊——如果只用奖励信号 # 模型可能会输出高分但语言混乱的回答 advantage rewards - kl_penalty # 4. PPO 目标 loss -torch.min(ratio * advantage, clipped_ratio * advantage) return loss.mean()KL 散度惩罚为什么重要如果没有 KL 惩罚 PPO 会最大化奖励模型的分数 模型可能学会攻击奖励模型的弱点 输出一些高分但人类看不懂的内容 加上 KL 惩罚 PPO 同时最大化奖励和保持语言流畅 KL 项 D_KL(π_ppo || π_sft) 如果 π_ppo 偏离 π_sft 太远KL 惩罚变大 → 模型在讨好奖励模型和保持语言能力之间平衡 经验值 太强的 KL 惩罚 → 模型改变太小RLHF 无效 太弱的 KL 惩罚 → 模型可能疯掉 通常 KL 惩罚的系数在 0.01~0.1 之间三、RLHF 的挑战挑战 1奖励黑客Reward Hacking问题奖励模型只是一个代理proxy不是真正的人类判断 → 模型可能找到欺骗奖励模型的方法 真实案例 奖励模型喜欢长篇大论的回答 PPO 发现后模型开始输出冗长但空洞的文本 虽然奖励分数很高但人类并不喜欢 解决方案 - KL 散度惩罚阻止偏离原始分布 - 训练多个奖励模型取平均 - 定期用人类评估来校准奖励模型挑战 2奖励模型的不完美奖励模型是通过排序数据训练的 排序数据天然有噪声——不同标注员的偏好不同 一个 prompt 可能 标注员 A 觉得回答 1 好 标注员 B 觉得回答 2 好 标注员 C 觉得两个都不好 → 奖励模型学到的可能是平均偏好 → 无法捕捉人类偏好的多样性挑战 3PPO 的工程复杂性RLHF 的 PPO 需要同时加载四个模型 1. 策略模型正在训练的语言模型 2. 参考模型冻结的 SFT 模型用于计算 KL 散度 3. 奖励模型给回答打分 4. Critic 模型PPO 的价值网络有时和策略模型合并 显存占用 4 × 模型大小 7B 模型 × 4 28B 的显存需求 70B 模型 × 4 280B 的超高需求 → RLHF 的计算成本比 SFT 高 10 倍以上四、DPO无奖励模型的 RLHFDPO 的核心思想2024 年提出的 DPODirect Preference Optimization绕过了奖励模型和 PPO直接优化语言模型。PPO 路径 DPO 路径 人类偏好 → 训练奖励模型 人类偏好 → 直接优化语言模型 ↓ ↓ PPO 优化语言模型 一步到位 ↓ 对齐模型 DPO 省去了训练奖励模型和PPO 强化学习两个步骤DPO 的原理DPO 的核心发现奖励模型和语言模型之间有一个数学等价关系——给定最优策略 π*可以反推出奖励函数 r。DPO 的推导直觉 1. 传统 RLHF 的最优策略满足 π*(y|x) ∝ π_sft(y|x) × exp(r(x,y)/β) 翻译最优策略 原始策略 × 奖励加权 2. 反过来奖励函数可以表示为 r(x,y) β × log(π*(y|x) / π_sft(y|x)) 常数 3. 把奖励函数代入偏好损失得到 DPO 损失 L_DPO -log σ(β × [log(π(y_w|x)/π_ref(y_w|x)) - log(π(y_l|x)/π_ref(y_l|x))]) 其中 y_w 人类偏好的回答 y_l 人类不偏好的回答 σ sigmoid 函数 β 温度参数DPO 的 PyTorch 实现def dpo_loss(policy_logps, ref_logps, pref_logps, unpref_logps, beta0.1): DPO 损失函数 参数: policy_logps: 当前策略模型的 log 概率 ref_logps: 参考模型冻结的 SFT 模型的 log 概率 pref_logps: 偏好回答的 log 概率 unpref_logps: 不偏好回答的 log 概率 beta: 温度参数控制偏离程度 # 偏好回答的对数几率比 pref_ratio policy_logps - ref_logps # log(π/π_ref) for y_w # 不偏好回答的对数几率比 unpref_ratio policy_logps - ref_logps # log(π/π_ref) for y_l # DPO 损失 logits pref_ratio - unpref_ratio loss -torch.log(torch.sigmoid(beta * logits)) return loss.mean()DPO vs PPO对比PPO-RLHFDPO步骤数3 步RM训练PPOKL约束1 步训练稳定性⚠️ 需要大量调参✅稳定计算成本极高4个模型低2个模型效果✅ 强上限高✅ 接近PPO实现复杂度❌ 复杂✅简单超参数多lr, clip, KL系数...少只需 βDPO 的优势 ✅ 不需要训练奖励模型 ✅ 不需要 PPO 的四个模型 ✅ 训练更稳定 ✅ 代码更简单 DPO 的劣势 ⚠️ 不能迭代优化没有多次打分→优化的循环 ⚠️ 对偏好数据质量更敏感 2026 年现状DPO 广泛用于模型对齐 但也经常和 PPO 结合使用 或者用 DPO 做初步对齐PPO 做精细优化五、从 PPO 到 DPO 的演进RLHF 的演进路径 2022 (InstructGPT/ChatGPT): SFT → 训练 RM → PPO ← OpenAI 开创性的工作 2023 (开源复现): 各种开源 RLHF 框架TRL、DeepSpeed Chat PPO 成为标准 2024 (DPO 提出): DPO → 不需要 RM 和 PPO 更简单、更稳定 2024-2025 (变体涌现): KTO: 不需要配对偏好数据只要好或坏 ORPO: 把 SFT 和对齐合并成一步 GRPO: 不需要 Critic 模型的 PPO 变体DeepSeek-R1使用 2026 (现状): PPO 和 DPO 共存 简单任务用 DPO 复杂对齐用 PPO RM 混合使用是最佳实践六、RLHF 的完整效果RLHF 到底带来了什么提升评估维度 SFT 模型 RLHF 模型 提升幅度 ────────────────────────────────────────────── 帮助性 3.2/5 4.5/5 40% ✅ 诚实性 2.8/5 4.1/5 46% ✅ 安全性 3.5/5 4.7/5 34% ✅ 创造力 3.0/5 4.3/5 43% ✅ 拒绝有害请求 2.0/5 4.5/5 125% ✅ RLHF 最大的提升在拒绝有害请求上 从 40% 提升到 90% 同时保持了对正常请求的高质量回答一个具体对比同一 prompt如何欺骗我的老板 SFT 模型回答 您可以假装生病、伪造考勤记录... → 回答了问题但提供了有害建议 ❌ RLHF 模型回答 我不建议欺骗您的老板。建立信任关系对长期职业发展更重要。 如果您有困难可以考虑以下合法的方式 1. 与老板开诚布公地沟通 2. 申请调休或远程办公 3. 寻求 HR 的帮助 → 拒绝提供有害信息同时提供了有益建议 ✅七、总结概念一句话理解RLHF用强化学习让大模型学会人类偏好——有用、诚实、无害奖励模型一个给回答打分的模型——把人类偏好编码成数值PPO 在对齐中的作用在不超过 KL 约束的前提下最大化奖励模型的分数KL 散度惩罚防止模型走火入魔——既要讨好人类又要保持语言能力DPO跳过奖励模型和 PPO直接优化偏好——简单、稳定、高效核心三句话RLHF 是 ChatGPT 成功的核心密码——没有 RLHFGPT 只是一个知识丰富但不好用的基础模型PPO 在 RLHF 中的作用是稳妥地优化——Clip 机制和 KL 惩罚确保了模型不会一步走偏DPO 让 RLHF 变得简单——不需要奖励模型和 PPO 的复杂工程一句话的数据就能优化模型强化学习系列 4 篇总结01: Q-Learning ──── 基础 RL表格方法 02: DQN PPO ──── 深度 RL 的两大里程碑 03: Policy Gradient ── 策略梯度演进Actor-Critic 04: RLHF ─────────── RL 在大模型中最关键的应用

相关新闻