强化学习对齐

强化学习对齐 2026:从 RLHF 到 DPO 再到 ORPO

引言 大模型的对齐(Alignment)是让模型输出符合人类期望和价值的关键技术。从2022年RLHF的爆发,到2024年DPO的崛起,再到2026年ORPO和GRPO的成熟,对齐技术经历了深刻的范式转变。本文系统梳理这一演进历程。 RLHF:对齐的起点 核心原理 RLHF(Reinforcement Learning from Human Feedback)通过三个步骤实现对齐: 1. SFT(监督微调):用高质量数据训练基础模型 2. RM(奖励模型):训练模型评估输出质量 3. PPO(近端策略优化):用奖励信号优化策略 优点 理论完备,效果可证明 可优化任意可微奖励函数 缺点 训练复杂度高(4个模型同时训练) 超参数敏感,不稳定 需要大量人工标注 DPO:简化对齐的革命 核心思想 DPO(Direct Preference Optimization)绕过了奖励模型和强化学习,直接优化偏好数据。 关键突破: 将奖励函数隐式建模 直接对策略模型进行偏好优化 只需一个模型,训练稳定 数学本质: L_DPO = -log(σ[β log(π(y|x)/π_ref(y|x))]) 优点 训练简单:只需一个模型 训练稳定:无PPO的不稳定性 资源需求低:无需奖励模型 缺点 需要成对偏好数据 对数据质量敏感 复杂奖励无法表达 ORPO:SFT与DPO的统一 核心创新 ORPO(Odds Ratio Preference Optimization)将SFT和DPO统一到一个目标函数中。 核心公式: L_ORPO = -log(σ[log(π_chosen/π_rejected) - log(π_ref_chosen/π_ref_rejected)]) 与DPO的区别 维度 DPO ORPO 参考模型 需要 隐式 训练步骤 2步(SFT+DPO) 1步 数据需求 偏好对 偏好对 + 单样本 训练速度 中等 快 2026年进展 ORPO在2026年成为微调的首选方法,特别是在中小规模模型上表现优异。 ...

2026-06-30 · 1 min · 191 words · 硅基 AGI 探索者
RLHF替代方案2026:DPO、GRPO、SimPO技术对比

RLHF替代方案2026:DPO、GRPO、SimPO技术对比

RLHF(Reinforcement Learning from Human Feedback)虽是当今大模型对齐的事实标准,但其训练不稳定、超参数敏感、需要独立Reward Model等痛点促使研究者不断探索替代方案。到2026年,DPO、GRPO、SimPO三大方案已在不同场景下展现出各自优势。 1. RLHF的核心痛点 标准RLHF流程包含三个阶段:SFT → Reward Model训练 → PPO强化学习。其中PPO阶段的问题最为突出: 训练不稳定:Policy model和Reward model的博弈容易震荡 超参数敏感:KL系数、学习率、clip range需要精细调优 资源消耗大:需要同时维护4个模型(Policy、Reference、Reward、Critic) Reward Hacking:模型学会欺骗reward model获取高分 RLHF显存占用(7B模型): Policy Model: ~14GB (fp16) Reference Model: ~14GB (fp16) Reward Model: ~14GB (fp16) Critic Model: ~14GB (fp16) ──────────────────────── 总计: ~56GB 2. DPO:Direct Preference Optimization 2.1 核心思想 DPO的洞见是:不需要显式训练Reward Model。通过重参数化,直接从偏好数据中优化策略模型。 推导过程从RLHF的目标函数出发: $$\max_{\pi_\theta} \mathbb{E}{x \sim \mathcal{D}, y \sim \pi\theta}[r(x,y)] - \beta \mathbb{D}{KL}[\pi\theta(\cdot|x) | \pi_{ref}(\cdot|x)]$$ 其最优解为: $$r(x,y) = \beta \log \frac{\pi^*(y|x)}{\pi_{ref}(y|x)} + \beta \log Z(x)$$ ...

2026-06-30 · 3 min · 504 words · 硅基 AGI 探索者
RLHF替代方案2026:DPO、GRPO、SimPO技术对比

RLHF替代方案2026:DPO、GRPO、SimPO技术对比

引言 强化学习从人类反馈(RLHF)是让大语言模型与人类偏好对齐的关键技术。然而,传统RLHF采用PPO算法,训练过程不稳定、超参数敏感、工程实现复杂。2023-2026年间,一系列RLHF替代方案涌现,它们通过不同的数学推导简化了偏好对齐过程。本文将系统对比DPO、GRPO、SimPO等主流方案。 RLHF回顾:PPO的标准流程 标准RLHF包含三个阶段: SFT(监督微调):在高质量对话数据上微调基座模型 RM(奖励模型训练):训练奖励模型 $r_\phi(x, y)$ 拟合人类偏好 PPO(强化学习优化):用奖励模型的分数作为奖励信号优化策略 PPO的目标函数: $$ \max_{\pi_\theta} \mathbb{E}{x \sim \mathcal{D}, y \sim \pi\theta(\cdot|x)} \left[ r_\phi(x, y) - \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)} \right] $$ 其中 $\beta$ 是KL散度惩罚系数,防止策略偏离参考模型太远。 PPO的痛点: 需要4个模型同时加载(策略模型、参考模型、奖励模型、价值模型) 训练不稳定,需要精细的超参数调优 奖励模型与策略模型训练目标不一致 工程实现复杂,训练效率低 DPO:直接偏好优化 核心思想 DPO(Direct Preference Optimization)的关键洞察是:RLHF的最优解有闭式表达。通过数学推导,可以将奖励函数用策略模型本身表示,从而跳过奖励模型训练和强化学习。 数学推导 RLHF的最优策略为: $$ \pi^*(y|x) = \frac{\pi_{\text{ref}}(y|x) \exp\left(\frac{r(x, y)}{\beta}\right)}{Z(x)} $$ 反解得到: $$ r(x, y) = \beta \log \frac{\pi^*(y|x)}{\pi_{\text{ref}}(y|x)} + \beta \log Z(x) $$ 代入Bradley-Terry偏好模型: $$ p(y_w \succ y_l | x) = \sigma(r(x, y_w) - r(x, y_l)) $$ ...

2026-06-30 · 3 min · 548 words · 硅基 AGI 探索者
grpo algorithm deepseek reinforcement learning

GRPO 算法解析:DeepSeek 的强化学习新方案

从 PPO 到 GRPO 的演进 PPO(Proximal Policy Optimization)是 RLHF 的传统方法,但它有几个问题:需要一个 Critic 模型(额外显存)、训练不稳定、超参数敏感。DeepSeek 提出的 GRPO(Group Relative Policy Optimization)通过组内相对比较消除了 Critic 模型,简化了训练同时提升了稳定性。 方法 需要Critic 显存占用 训练稳定性 实现复杂度 PPO ✅ 高 中 高 DPO ❌ 低 高 低 GRPO ❌ 中 高 中 GRPO 核心思想 传统 PPO 用 Critic 网络估计 baseline,GRPO 直接用同一 prompt 的多个采样结果的平均值作为 baseline: 对每个 prompt p: 1. 采样 G 个回复 {r_1, r_2, ..., r_G} 2. 计算每个回复的奖励 {R_1, R_2, ..., R_G} 3. 组内归一化:advantage_i = (R_i - mean(R)) / std(R) 4. 用归一化后的 advantage 更新策略 算法对比 # PPO 的 Advantage 计算 def ppo_advantage(rewards, values, gamma=0.99, lam=0.95): """需要 Critic 网络预测 values""" advantages = [] returns = [] gae = 0 for t in reversed(range(len(rewards))): delta = rewards[t] + gamma * values[t + 1] - values[t] gae = delta + gamma * lam * gae advantages.insert(0, gae) return advantages # GRPO 的 Advantage 计算 def grpo_advantage(rewards_per_group: list): """不需要 Critic,直接用组内统计""" group_mean = np.mean(rewards_per_group) group_std = np.std(rewards_per_group) advantages = [(r - group_mean) / (group_std + 1e-8) for r in rewards_per_group] return advantages GRPO 训练流程 import torch import torch.nn.functional as F from transformers import AutoModelForCausalLM, AutoTokenizer class GRPOTrainer: def __init__(self, model, ref_model, reward_model, tokenizer, config): self.model = model # 策略模型(训练) self.ref_model = ref_model # 参考模型(冻结) self.reward_model = reward_model # 奖励模型 self.tokenizer = tokenizer self.config = config def train_step(self, prompts: list): batch_size = len(prompts) group_size = self.config.group_size # G=8 或 16 all_advantages = [] all_old_logps = [] all_responses = [] # 1. 对每个 prompt 采样 G 个回复 for prompt in prompts: responses = [] rewards = [] for _ in range(group_size): # 生成回复 response = self._generate(prompt, temperature=0.8) responses.append(response) # 计算奖励 reward = self.reward_model.score(prompt, response) rewards.append(reward) # 2. GRPO Advantage 计算 advantages = self._compute_grpo_advantage(rewards) all_advantages.extend(advantages) all_responses.extend(responses) # 3. 计算旧策略的 log prob old_logps = self._compute_logps(self.model, prompts_expanded, all_responses) all_old_logps = old_logps.detach() # 4. PPO-style 更新(多轮 epoch) for epoch in range(self.config.ppo_epochs): new_logps = self._compute_logps(self.model, prompts_expanded, all_responses) ref_logps = self._compute_logps(self.ref_model, prompts_expanded, all_responses) # 5. 计算 Loss loss = self._grpo_loss( new_logps=new_logps, old_logps=all_old_logps, ref_logps=ref_logps, advantages=torch.tensor(all_advantages), beta=self.config.kl_coef # KL 散度惩罚 ) loss.backward() self.optimizer.step() self.optimizer.zero_grad() return loss.item() def _grpo_loss(self, new_logps, old_logps, ref_logps, advantages, beta=0.04): # Ratio ratio = torch.exp(new_logps - old_logps) # Clipped ratio (PPO clip) clipped_ratio = torch.clamp(ratio, 1 - self.config.clip_range, 1 + self.config.clip_range) # Policy loss policy_loss = -torch.min(ratio * advantages, clipped_ratio * advantages).mean() # KL penalty (GRPO 使用 k3 估计器) kl = (torch.exp(ref_logps - new_logps) - (ref_logps - new_logps) - 1).mean() return policy_loss + beta * kl def _compute_grpo_advantage(self, rewards: list): """GRPO 核心创新:组内相对优势""" mean_r = np.mean(rewards) std_r = np.std(rewards) advantages = [(r - mean_r) / (std_r + 1e-8) for r in rewards] return advantages 奖励函数设计 GRPO 的效果很大程度上取决于奖励函数。DeepSeek R1 使用了多种奖励信号: ...

2026-06-28 · 4 min · 782 words · 硅基 AGI 探索者
rlhf dpo grpo

RLHF vs DPO vs GRPO:三种对齐算法深度对比

为什么需要对齐? 预训练后的 LLM 只是"下一个 token 预测器",它学会了互联网上的所有文本模式——包括有害内容、错误信息和不符合人类价值观的回答。 对齐(Alignment) 的目标是:让模型的行为符合人类期望。 三个阶段: SFT(监督微调):用人类标注的问答对训练 偏好学习:让模型学会区分"好回答"和"差回答" 安全对齐:拒绝有害请求 本文聚焦于第 2 阶段的三种主流方法。 RLHF:经典三阶段方法 总体架构 SFT Model | v [奖励模型训练] ← 人类偏好数据 (chosen, rejected) | v 奖励模型 (Reward Model) | v [PPO 强化学习] ← 奖励模型打分 + SFT 模型作为参考 | v 对齐后的模型 (Aligned Policy) 阶段一:训练奖励模型 人类标注员对模型的多个回答进行排序(A > B > C),然后训练一个奖励模型 RM 来预测偏好分数: import torch import torch.nn as nn class RewardModel(nn.Module): """ 奖励模型:基于 SFT 模型,将最后一个 token 的隐藏状态 投影到标量奖励值 """ def __init__(self, base_model): super().__init__() self.base_model = base_model # 通常是 SFT 模型 self.value_head = nn.Linear( base_model.config.hidden_size, 1 ) def forward(self, input_ids, attention_mask): # 获取最后一个 token 的隐藏状态 outputs = self.base_model( input_ids, attention_mask=attention_mask, output_hidden_states=True ) hidden = outputs.hidden_states[-1] # (B, L, D) # 取最后一个非 padding token seq_lens = attention_mask.sum(dim=1) - 1 # (B,) last_hidden = hidden[torch.arange(hidden.size(0)), seq_lens] # 投影到标量 reward = self.value_head(last_hidden) # (B, 1) return reward.squeeze(-1) def reward_model_loss(rm, chosen_ids, chosen_mask, rejected_ids, rejected_mask): """ Bradley-Terry 模型:chosen 的奖励应高于 rejected Loss = -log(sigmoid(r_chosen - r_rejected)) """ r_chosen = rm(chosen_ids, chosen_mask) r_rejected = rm(rejected_ids, rejected_mask) # Bradley-Terry loss loss = -torch.nn.functional.logsigmoid(r_chosen - r_rejected).mean() # 准确率 acc = (r_chosen > r_rejected).float().mean() return loss, acc 阶段二:PPO 强化学习 用奖励模型作为奖励函数,通过 PPO 算法优化策略模型: ...

2026-06-25 · 7 min · 1368 words · 硅基 AGI 探索者
鲁ICP备2026018361号