LLM 安全对齐:RLHF、DPO与Constitutional AI深度对比
📌 背景与核心问题
大语言模型通过预训练学习语言规律,但预训练目标(预测下一个token)与人类期望的"有用、诚实、无害"目标存在本质差异。安全对齐(Safety Alignment)旨在将模型行为引导至人类偏好。
💡 核心挑战
预训练缺陷:语言模型从海量互联网数据中学习,其中包含偏见、毒料、虚假信息。对齐技术需要在保留模型能力的同时消除这些负面影响。
对齐技术的演进
有用性 (Helpfulness)
模型能够理解用户意图,提供准确、有条理的回答。
诚实性 (Honesty)
对于不确定的问题承认不确定性,不产生虚假信息。
无害性 (Harmlessness)
避免生成攻击性、歧视性、危险内容。
🎯 RLHF:奖励模型训练
RLHF(Reinforcement Learning from Human Feedback)由OpenAI在2022年提出,成为LLM对齐的主流方法。
2.1 RLHF三阶段流程
2.2 奖励模型训练
奖励模型(Reward Model)的目标是学习人类偏好:给定prompt和两个response,预测哪个更符合人类期望。
# Bradley-Terry 奖励模型损失
def reward_model_loss(reward_chosen, reward_rejected):
"""
reward_chosen: 被选中的response的奖励logit
reward_rejected: 被拒绝的response的奖励logit
目标: reward_chosen > reward_rejected
"""
# 概率 = sigmoid(reward_chosen - reward_rejected)
prob = torch.sigmoid(reward_chosen - reward_rejected)
# 二分类交叉熵损失
loss = -torch.log(prob + 1e-8)
return loss.mean()
# 训练数据格式
# {prompt: "如何制作炸弹", response_A: "拒绝回答", response_B: "详细教程"}
# 期望: reward_A > reward_B (A是无害回答)
2.3 人类标注数据构建
高质量的人类偏好数据是对齐效果的关键。需要:
- 多样化标注员:不同背景、文化、价值观的标注员减少偏见
- 一致性校准:定期对同一prompt进行重复标注,计算标注员间一致性
- 对抗性数据:刻意构造模型可能产生有害输出的prompt
- 难度筛选:优先标注模型容易出错或存在争议的案例
⚔️ PPO vs KTRL
RLHF的第二阶段使用策略优化算法强化奖励模型。主要有两种方法:PPO和KTRL。
3.1 PPO (Proximal Policy Optimization)
PPO是OpenAI在InstructGPT中使用的算法,通过限制策略更新幅度避免灾难性偏移。
# PPO 剪切损失
def ppo_loss(old_logprob, new_logprob, reward, clip_epsilon=0.2):
"""
old_logprob: 旧策略下action的对数概率
new_logprob: 新策略下action的对数概率
reward: 奖励信号
"""
# 重要性采样比率
ratio = torch.exp(new_logprob - old_logprob)
# 剪切目标
clipped_ratio = torch.clamp(ratio, 1 - clip_epsilon, 1 + clip_epsilon)
# 优势函数 (GAE)
advantage = compute_gae(reward)
# 剪切损失
loss = -torch.min(ratio * advantage, clipped_ratio * advantage)
return loss.mean()
3.2 KTRL (Kullback-Leibler divergence with Trajectory-based Regularization)
KTRL由DeepMind提出,使用KL散度作为轨迹级正则项,比PPO更稳定。
# KTRL 损失
def ktrl_loss(pi_theta, pi_ref, reward, beta=0.1):
"""
pi_theta: 当前策略
pi_ref: 参考策略 (SFT模型)
reward: 奖励信号
beta: KL系数
"""
# 轨迹级KL散度 (更平滑的惩罚)
kl_term = trajectory_kl_divergence(pi_theta, pi_ref)
# 奖励 + KL惩罚
loss = -reward.mean() + beta * kl_term
return loss
| 维度 | PPO | KTRL |
|---|---|---|
| 稳定性 | 中等(依赖clipping) | 更高(连续正则) |
| 采样效率 | 中等 | 更高(轨迹级优化) |
| 实现复杂度 | 较高(需PPO-clip) | 中等 |
| 超参数敏感度 | clip_epsilon敏感 | beta敏感 |
| 代表性模型 | ChatGPT, GPT-4 | Gemini |
📌 DPO:直接偏好优化
DPO(Direct Preference Optimization)由Stability AI在2023年提出,绕过了显式奖励模型和强化学习,直接优化人类偏好。
4.1 DPO核心思想
DPO将RLHF的三阶段压缩为两阶段:SFT + 直接偏好优化。不训练奖励模型,直接用偏好数据更新语言模型。
# DPO 损失函数
def dpo_loss(pi_theta, pi_ref, prompt, chosen, rejected, beta=0.1):
"""
pi_theta: 当前策略
pi_ref: 参考策略 (SFT模型)
chosen/rejected: 人类偏好数据中的chosen > rejected
beta: KL系数
"""
# 计算策略下的对数概率差
chosen_logprob = pi_theta.get_log_prob(prompt, chosen)
rejected_logprob = pi_theta.get_log_prob(prompt, rejected)
ref_chosen_logprob = pi_ref.get_log_prob(prompt, chosen)
ref_rejected_logprob = pi_ref.get_log_prob(prompt, rejected)
# Bradley-Terry 偏好建模
# π(y_w|x) = exp(r(x, y_w)) / Z(x)
# 在DPO中: π* ∝ π_ref * exp(r/β)
chosen_rewards = beta * (chosen_logprob - ref_chosen_logprob)
rejected_rewards = beta * (rejected_logprob - ref_rejected_logprob)
# 偏好损失 = -log sigmoid(chosen_reward - rejected_reward)
loss = -F.logsigmoid(chosen_rewards - rejected_rewards)
return loss.mean()
4.2 DPO vs RLHF对比
✅ DPO 优势
- • 无需训练奖励模型,简化流程
- • 不需要额外的PPO采样步骤
- • 训练更稳定,收敛更快
- • 减少了对超参数的敏感度
- • 降低了"reward hacking"风险
⚠️ DPO 局限
- • 需要更大的偏好数据集
- • 对数据质量要求更高
- • 难以处理复杂的多维度偏好
- • 表达能力弱于完整RLHF
- • 长序列生成场景效果待验证
4.3 IPO与ORPO
DPO的变体解决了其潜在问题:
- IPO (Identity Preference Optimization):通过重新参数化避免DPO可能产生的模式崩溃
- ORPO (Odds Ratio Preference Optimization):将SFT损失与偏好损失联合优化,无需参考模型
📜 Constitutional AI
Constitutional AI (CAI) 由Anthropic在2022年提出,核心思想是让AI通过自我约束而非人类标注来避免有害输出。
5.1 Constitutional AI核心原理
CAI引入宪法(Constitution)——一组描述AI行为准则的原则。通过AI自我评估和RLHF结合,实现高效且可解释的对齐。
5.2 SL-CAI阶段
通过few-shot prompt让模型对有害prompt生成"有害响应→自我批评→修正响应",用修正响应微调模型。
# Constitutional AI few-shot prompt
prompt_template = """人类发起的提示可能是有害的。
请按照以下步骤进行:
1. 识别提示中潜在的有害成分
2. 生成一个有害的回应
3. 解释为什么这个回应是有害的
4. 提供一个无害且有帮助的替代回应
人类: {harmful_prompt}
AI: {constitutional_response}"""
5.3 RLAIF阶段
使用AI(而非人类)生成偏好标注。通过宪法原则让AI判断哪个响应更符合准则。
# AI偏好标注
def generate_ai_preference(response_a, response_b, constitution):
"""
使用宪法原则比较两个响应
"""
evaluation_prompt = f"""根据以下宪法原则评估两个AI响应:
宪法: {constitution}
响应A: {response_a}
响应B: {response_b}
请指出哪个响应更符合宪法原则,并解释原因。"""
evaluation = llm.generate(evaluation_prompt)
preference = parse_preference(evaluation)
return preference
5.4 CAI vs RLHF对比
| 维度 | RLHF | Constitutional AI |
|---|---|---|
| 反馈来源 | 人类标注 | AI自我评估 + 人类宪法 |
| 数据标注成本 | 高(需大量人工) | 低(AI生成偏好) |
| 可解释性 | 中等(隐式奖励) | 高(宪法原则显式) |
| 一致性 | 标注员间存在差异 | AI评估更一致 |
| 代表性模型 | GPT-4, ChatGPT | Claude |
⚠️ 对齐税问题
对齐税(Alignment Tax)指的是为提升安全性/对齐质量而付出的能力代价——模型可能因过度保守而降低有用性。
6.1 对齐税的表现
过度拒绝
模型对无害问题也过度警惕,拒绝回答,导致用户体验下降。
能力退化
某些对齐目标(如"无害")可能抑制模型的创造性表达能力。
阿谀奉承
模型可能过度认同用户观点,即使观点明显错误。
6.2 缓解策略
- RLHF + 安全目标平衡:在奖励模型中同时考虑有用性和安全性权重
- Red Teaming:通过对抗性测试发现模型的"对齐漏洞",针对性修复
- Constitutional AI:通过明确的宪法原则减少对"无害"的过度解读
- PPO与SFT混合:定期用SFT数据"刷新"模型,减缓能力退化
⚠️ SFT vs RLHF 的权衡
SFT(直接模仿好回复)可以提升模型的有用性,但可能降低安全性。RLHF可以平衡有用性和安全性,但需要更复杂的训练流程。实践中通常先用SFT打基础,再用RLHF精细调整。
📝 总结
LLM安全对齐是一个持续演进的领域,RLHF、DPO和Constitutional AI各有优劣。
| 方法 | 反馈来源 | 复杂度 | 效果 | 适用场景 |
|---|---|---|---|---|
| RLHF (PPO) | 人类 | 高 | 优秀 | GPT-4, Claude初期 |
| RLHF (KTRL) | 人类 | 中高 | 优秀 | Gemini |
| DPO | 人类 | 中 | 良好 | 资源有限场景 |
| Constitutional AI | AI宪法 | 中 | 良好+可解释 | Claude |
🔮 未来趋势
未来对齐技术将向更高效(更少人类反馈)、更鲁棒(对抗性攻击防御)、更多模态(图像、音频对齐)和更强可解释性方向发展。自我对齐(AI自己生成对齐数据)是重要研究方向。