为什么需要对齐
模型能力越强,对齐越重要。一个能力满分但不对齐的 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 年的最佳实践:
- DPO 是基线——简单、稳定、效果好
- Constitutional AI 补充安全——成本低、可扩展
- GRPO 适合推理——DeepSeek-R1 的成功验证
- 多维度评估——不只看能力,也看安全和诚实
- 避免过度对齐——安全不是什么都不敢做
对齐的本质是平衡:在有用和无害之间找到最佳点。太偏向有用 → 危险;太偏向无害 → 无用。
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。
