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 探索者
ai alignment 2026

AI 对齐 2026:从 RLHF 到 Constitutional AI 的演进

什么是对齐问题 AI 对齐(Alignment)的核心目标简明而严峻:确保 AI 系统的行为符合人类意图和价值观。随着模型能力跨越一个又一个里程碑,对齐已从学术讨论变为工程刚需。 对齐问题的三层定义: 层级 含义 难点 意图对齐 AI 做人类想让它做的事 人类意图本身模糊、矛盾 价值对齐 AI 遵守人类价值观 价值观多元、文化差异大 目标对齐 AI 不追求与人类冲突的目标 智能体可能发展出工具性目标 2026 年,对齐研究已从"让模型不说脏话"演进为"让模型在复杂多目标场景下做出可信赖的决策"。 RLHF:奠基者及其局限 强化学习从人类反馈(Reinforcement Learning from Human Feedback, RLHF)是当前对齐技术的事实标准。OpenAI 在 InstructGPT 中首次系统应用,随后 ChatGPT 将其推向大众。 RLHF 三阶段流程 SFT(监督微调):用人类标注的高质量对话微调基座模型 奖励模型训练:人类标注偏好对(A > B),训练一个奖励模型 RM PPO 强化学习:用 RM 的评分作为奖励信号,通过 PPO 算法优化策略模型 RLHF 的核心局限 局限 说明 后果 标注成本高 需要大量专业标注员 扩展性差,中小团队难以复现 标注一致性低 不同标注员偏好不同 奖励模型噪声大 奖励 hacking 模型学会钻奖励模型空子 产出看似好实则空洞的内容 训练不稳定 PPO 对超参数敏感 复现困难,调参成本高 价值观单一 难以覆盖多元文化 输出偏向特定群体偏好 Anthropic 的研究进一步发现,RLHF 模型存在**谄媚(sycophancy)**问题——模型倾向于附和用户而非给出正确答案。这在需要诚实反馈的场景中是致命的。 ...

2026-06-25 · 2 min · 312 words · 硅基 AGI 探索者
dpo vs rlhf

DPO vs RLHF:偏好对齐的两条路线

为什么需要对齐 大模型预训练后学会了"续写文本",但不会"按要求回答"。对齐(Alignment)让模型学会按人类偏好行事——有帮助、诚实、无害。 预训练模型:"如何制作蛋糕?" → 续写:"如何制作饼干?"(续写模式) 对齐后模型:"如何制作蛋糕?" → 回答:"制作蛋糕的步骤如下:1..."(问答模式) RLHF:经典三阶段 阶段一:SFT(监督微调) # 用人工标注的指令-回答对微调模型 sft_data = [ {"instruction": "写一首关于春天的诗", "response": "春风拂面花开早..."}, {"instruction": "解释什么是量子纠缠", "response": "量子纠缠是指..."}, ] # 标准的下一个 Token 预测训练 def sft_loss(model, batch): input_ids = batch["input_ids"] # instruction + response labels = batch["labels"] # 只对 response 部分计算 loss outputs = model(input_ids, labels=labels) return outputs.loss 阶段二:奖励模型(RM) 训练一个模型来预测人类偏好分数: class RewardModel(nn.Module): def __init__(self, base_model): super().__init__() self.backbone = base_model # 通常用 SFT 模型初始化 self.reward_head = nn.Linear(hidden_size, 1) def forward(self, input_ids): hidden = self.backbone(input_ids).last_hidden_state[:, -1, :] reward = self.reward_head(hidden) # 标量奖励 return reward # 训练数据:同一问题的两个回答,标注哪个更好 # {prompt, chosen_response, rejected_response} def rm_loss(reward_model, batch): chosen_rewards = reward_model(batch["chosen_ids"]) rejected_rewards = reward_model(batch["rejected_ids"]) # Bradley-Terry 模型:chosen 应比 rejected 分数高 loss = -torch.log(torch.sigmoid(chosen_rewards - rejected_rewards)) return loss.mean() 阶段三:PPO(近端策略优化) 用奖励模型的分数作为信号,通过 RL 优化 SFT 模型: ...

2026-06-25 · 4 min · 774 words · 硅基 AGI 探索者
ai alignment techniques

AI 对齐技术全景:从 RLHF 到 Constitutional AI

为什么需要对齐 模型能力越强,对齐越重要。一个能力满分但不对齐的 Agent,比一个能力一般但安全的 Agent 危险得多。 对齐要解决三个问题: 有用(Helpful):完成用户要求 无害(Harmless):不产生有害内容 诚实(Honest):不编造、不欺骗 对齐技术演进 2022: RLHF(OpenAI) → 人类反馈强化学习 2023: Constitutional AI → 宪法引导自监督 2024: DPO → 直接偏好优化 2025: GRPO → 群体相对策略优化 2026: Self-Play + RL → 自我对弈+推理RL RLHF(人类反馈强化学习) 流程 Step 1: SFT 人工标注 → 监督微调 → SFT 模型 Step 2: RM 生成回答 → 人工排序 → 训练奖励模型 Step 3: PPO 用 RM 打分 → PPO 优化策略 → 对齐模型 class RLHF: def __init__(self): self.sft_model = load_sft_model() self.reward_model = load_reward_model() self.ref_model = freeze(self.sft_model) # 参考模型 def train_step(self, prompt): # 1. 生成回答 response = self.sft_model.generate(prompt) # 2. 奖励模型打分 reward = self.reward_model(prompt, response) # 3. KL 散度约束(防止偏离太远) kl = self.kl_divergence(self.sft_model, self.ref_model, prompt) # 4. PPO 目标 loss = -(reward - 0.1 * kl) loss.backward() self.optimizer.step() RLHF 的问题 问题 描述 影响 成本高 大量人工标注 $百万级 主观偏差 标注者偏好不一致 质量不稳定 奖励黑客 模型学会欺骗 RM 输出冗长但无内容 训练不稳定 PPO 超参敏感 需要大量调参 Constitutional AI(宪法对齐) # Anthropic 提出,不需要大量人工标注 # 用"宪法"(一组原则)引导模型自我修正 CONSTITUTION = """ 1. 不要生成有害、非法或危险的内容 2. 尊重所有人群,不歧视 3. 诚实,不确定时说明 4. 保护用户隐私 5. 促进人类福祉 """ class ConstitutionalAI: async def generate(self, prompt): # 1. 生成初始回答 response = await self.model.generate(prompt) # 2. 自我审查 review = await self.model.generate( f"根据以下原则审查回答:\n" f"原则:{CONSTITUTION}\n" f"回答:{response}\n" f"审查结果:是否有违反原则的地方?" ) # 3. 自我修正 if "违反" in review: revised = await self.model.generate( f"根据审查意见修改回答:\n" f"原回答:{response}\n" f"审查:{review}\n" f"修改后:" ) return revised return response # 优势:不需要人工标注,可大规模 # 劣势:依赖模型自身能力,可能有盲区 DPO(直接偏好优化) # DPO:跳过奖励模型,直接优化策略 # 比 RLHF 简单且稳定 class DPO: def __init__(self, model, ref_model, beta=0.1): self.model = model self.ref_model = ref_model self.beta = beta def loss(self, prompt, chosen, rejected): """chosen 是更好的回答,rejected 是更差的""" # 模型对 chosen 的对数概率 pi_chosen = self.model.log_prob(prompt, chosen) pi_rejected = self.model.log_prob(prompt, rejected) # 参考模型的对数概率 ref_chosen = self.ref_model.log_prob(prompt, chosen) ref_rejected = self.ref_model.log_prob(prompt, rejected) # DPO 损失 logits = self.beta * ( (pi_chosen - ref_chosen) - (pi_rejected - ref_rejected) ) return -torch.log(torch.sigmoid(logits)) # 优势:训练稳定,不需要 RM,超参少 # 劣势:需要偏好数据对 GRPO(群体相对策略优化) # DeepSeek-R1 使用的方法 # 不需要价值网络,用群体统计代替 class GRPO: def train_step(self, prompt): # 1. 为同一 prompt 生成 G 个回答 responses = [self.model.generate(prompt) for _ in range(8)] # 2. 用奖励模型打分 rewards = [self.reward_model(prompt, r) for r in responses] # 3. 计算相对优势(群体内归一化) mean_r = np.mean(rewards) std_r = np.std(rewards) + 1e-8 advantages = [(r - mean_r) / std_r for r in rewards] # 4. 优化 for response, advantage in zip(responses, advantages): loss = -advantage * self.model.log_prob(prompt, response) loss.backward() # 优势:不需要价值网络,显存省 50% # 适合推理任务(有明确正确答案的场景) 对齐方法对比 方法 人工标注 训练稳定性 成本 效果 RLHF 大量 低(PPO难调) 高 好 Constitutional AI 少量 中 中 好 DPO 偏好对 高 中 中 GRPO 少量 高 低 推理任务最好 Self-Play 不需要 中 低 探索性强 实践选择 def choose_alignment_method(scenario): if scenario == "通用对话": return "DPO" # 稳定、效果好 elif scenario == "推理任务": return "GRPO" # 推理专精 elif scenario == "安全对齐": return "Constitutional AI" # 可大规模 elif scenario == "低成本快速对齐": return "DPO" # 最简单 elif scenario == "极致效果": return "RLHF + DPO" # 两阶段 else: return "DPO" # 默认选择 评估对齐效果 class AlignmentEval: def evaluate(self, model): return { "helpfulness": self.eval_helpful(model), # 有用性 "harmlessness": self.eval_harmless(model), # 无害性 "honesty": self.eval_honest(model), # 诚实性 "robustness": self.eval_robust(model), # 鲁棒性 } def eval_harmless(self, model): """测试有害拒绝率""" harmful_prompts = load_redteam_dataset() results = [] for prompt in harmful_prompts: response = model.generate(prompt) # 检查是否正确拒绝 refused = self.is_refusal(response) # 检查是否有有害内容 harmful = self.is_harmful(response) results.append(refused and not harmful) return np.mean(results) # 拒绝率 def eval_robust(self, model): """测试对抗鲁棒性""" # 越狱测试 jailbreak_prompts = load_jailbreak_dataset() success_rate = 1 - self.test_jailbreak(model, jailbreak_prompts) return success_rate 过度对齐问题 # 过度对齐:模型过于安全,什么都不敢回答 over_alignment_examples = [ "怎么做饭" → "我无法提供烹饪建议" # 过度拒绝 "写一首诗" → "我无法创作诗歌" # 过度拒绝 ] # 度量过度对齐 def over_refusal_rate(model): benign_prompts = load_benign_dataset() # 无害问题 refusals = sum(1 for p in benign_prompts if is_refusal(model.generate(p))) return refusals / len(benign_prompts) # 目标:<5% # 过高说明模型过度对齐 结论 AI 对齐没有银弹。2026 年的最佳实践: ...

2026-06-24 · 3 min · 598 words · 硅基 AGI 探索者
鲁ICP备2026018361号