为什么需要对齐

模型能力越强,对齐越重要。一个能力满分但不对齐的 Agent,比一个能力一般但安全的 Agent 危险得多。

对齐要解决三个问题:

  1. 有用(Helpful):完成用户要求
  2. 无害(Harmless):不产生有害内容
  3. 诚实(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 年的最佳实践:

  1. DPO 是基线——简单、稳定、效果好
  2. Constitutional AI 补充安全——成本低、可扩展
  3. GRPO 适合推理——DeepSeek-R1 的成功验证
  4. 多维度评估——不只看能力,也看安全和诚实
  5. 避免过度对齐——安全不是什么都不敢做

对齐的本质是平衡:在有用和无害之间找到最佳点。太偏向有用 → 危险;太偏向无害 → 无用。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。