对齐问题:让模型"听话"且"不闯祸"

大模型的安全对齐是AGI发展道路上不可回避的核心问题。一个能力强大但不对齐的模型可能带来严重的社会风险。本文系统梳理当前主流的对齐技术方案。

RLHF:经典三阶段方法

第一阶段:SFT(监督微调)

使用人工编写的高质量对话数据微调基座模型:

# SFT数据格式示例
{
    "instruction": "解释量子纠缠",
    "input": "",
    "output": "量子纠缠是指两个或多个粒子..."
}

SFT建立模型的指令跟随能力,是对齐的基础。

第二阶段:奖励模型训练

收集人类偏好数据(A优于B或B优于A),训练一个奖励模型预测人类偏好:

class RewardModel(nn.Module):
    def __init__(self, base_model):
        super().__init__()
        self.transformer = base_model
        self.value_head = nn.Linear(hidden_size, 1)
    
    def forward(self, input_ids):
        hidden_states = self.transformer(input_ids).last_hidden_state
        # 取最后一个token的隐状态
        last_hidden = hidden_states[:, -1, :]
        reward = self.value_head(last_hidden)
        return reward.squeeze(-1)

第三阶段:PPO强化学习

使用奖励模型的分数作为奖励信号,通过PPO算法优化策略模型:

PPO阶段的核心挑战:

  • KL散度约束:防止策略模型偏离SFT模型太远导致能力退化
  • 奖励黑客:模型可能找到欺骗奖励模型的"捷径"
  • 训练不稳定:需要精细的超参数调优

DPO:简化对齐流程

Direct Preference Optimization(DPO)绕过了奖励模型和强化学习,直接从偏好数据优化策略模型:

def dpo_loss(policy_chosen_logps, policy_rejected_logps,
             ref_chosen_logps, ref_rejected_logps, beta=0.1):
    pi_logratios = policy_chosen_logps - policy_rejected_logps
    ref_logratios = ref_chosen_logps - ref_rejected_logps
    logits = pi_logratios - ref_logratios
    return -F.logsigmoid(beta * logits).mean()

DPO的优势:

  • 无需训练奖励模型,减少一个训练阶段
  • 不需要PPO的复杂训练循环
  • 训练更稳定,超参数更少
  • 数学上等价于在隐式奖励上做最优的Bradley-Terry模型

但DPO也有局限:对数据质量更敏感,且在复杂多轮对话场景中效果不如RLHF。

Constitutional AI:自我改进对齐

Anthropic提出的Constitutional AI(CAI)方法让模型基于一组"宪法"原则进行自我批评和修正:

宪法原则示例:
1. 不要生成歧视性内容
2. 拒绝协助危险活动
3. 保持诚实,不编造信息
4. 尊重用户隐私

CAI的流程:

  1. 模型生成初始回复
  2. 模型根据宪法原则自我批评
  3. 模型生成修正后的回复
  4. 用修正后的数据做RLHF/DPO

这种方法减少了对人类标注的依赖,且对齐效果可与RLHF媲美。

安全护栏与实时过滤

对齐训练之外,推理时的安全护栏同样重要:

输入过滤

class InputGuard:
    def __init__(self):
        self.classifier = load_toxic_classifier()
        self.jailbreak_detector = load_jailbreak_detector()
    
    def check(self, user_input):
        if self.classifier.is_toxic(user_input):
            return "block", "输入包含不当内容"
        if self.jailbreak_detector.detect(user_input):
            return "block", "检测到越狱尝试"
        return "pass", None

输出过滤

对模型输出进行实时审查,包括:

  • 敏感信息检测(PII、密钥、内部代码)
  • 有害内容分类(暴力、自残、违法建议)
  • 事实性核查(与知识库交叉验证)

Llama Guard系列

Meta的Llama Guard是专门训练的安全分类器,可以判断输入输出是否安全:

from transformers import pipeline
guard = pipeline("text-classification", model="Meta-Llama/LlamaGuard-3-8B")
result = guard("待检测的文本")
# 输出: safe / unsafe + 违规类别

红队测试

红队测试是对齐效果评估的关键环节。有效红队测试需要覆盖:

攻击向量分类

  1. 越狱攻击:通过角色扮演、编码等方式绕过安全限制
  2. 提示注入:在数据中嵌入恶意指令
  3. 间接注入:通过检索内容注入指令
  4. 多轮诱导:通过多轮对话逐步突破边界

自动化红队

def automated_red_teaming(target_model, attack_strategies):
    vulnerabilities = []
    for strategy in attack_strategies:
        attack_prompt = strategy.generate()
        response = target_model.generate(attack_prompt)
        if safety_classifier.is_unsafe(response):
            vulnerabilities.append({
                "strategy": strategy.name,
                "prompt": attack_prompt,
                "response": response,
                "severity": strategy.severity
            })
    return vulnerabilities

评估基准

推荐的对齐评估基准:

  • HarmBench:标准化的有害行为测试集
  • AdvBench:对抗性提示基准
  • TruthfulQA:真实性评估
  • BBQ:偏见评估
  • MMLU-Pro-Safety:安全相关知识测试

结语

安全对齐不是一个一次性任务,而是一个持续迭代的过程。随着模型能力的增强,对齐技术也需要不断演进。从RLHF到DPO再到Constitutional AI,对齐方法正在变得更加高效和可扩展。但在AGI的背景下,如何确保对齐的鲁棒性和可扩展性,仍然是open problem。