AI测试架构知识库AI测试架构知识库
首页
  • 方法论体系
  • 评估体系
  • 对比分析
  • 最佳实践
  • LLM技术
  • VLM技术
  • Agent技术
  • RAG技术
  • 模型评估
  • 自愈测试
  • UI测试场景
  • API测试场景
  • 性能测试场景
  • 安全测试场景
  • 移动测试场景
  • 数据工程
  • MLOps实践
  • 平台建设
  • DevOps集成
  • 质量评估
  • 效果度量
  • 风险控制
  • 合规审计
  • 视觉融合
  • 稳定性测试
  • 服务端技术
  • 系统架构
  • 前沿探索
  • 软技能
首页
  • 方法论体系
  • 评估体系
  • 对比分析
  • 最佳实践
  • LLM技术
  • VLM技术
  • Agent技术
  • RAG技术
  • 模型评估
  • 自愈测试
  • UI测试场景
  • API测试场景
  • 性能测试场景
  • 安全测试场景
  • 移动测试场景
  • 数据工程
  • MLOps实践
  • 平台建设
  • DevOps集成
  • 质量评估
  • 效果度量
  • 风险控制
  • 合规审计
  • 视觉融合
  • 稳定性测试
  • 服务端技术
  • 系统架构
  • 前沿探索
  • 软技能
  • 模型训练

    • 模型训练与微调
    • 预训练(Pre-training)
    • 指令微调(SFT)
    • 模型压缩(Compression)
    • 偏好对齐(Alignment)

⚖️ 偏好对齐(Alignment)

一句话总结:偏好对齐通过人类反馈让模型输出更安全、更有用,是解决模型"会胡说八道"和"输出有害内容"的关键步骤。

📋 目录

  • 对齐概述
  • RLHF 流程
  • DPO 直接偏好优化
  • ORPO 联合优化
  • 方法对比
  • 实践指南

🎯 对齐概述

对齐的必要性

对齐数据需求

数据类型规模获取方式
偏好数据10K - 100K人工标注 / AI 生成
安全数据5K - 50K红队测试 / 规则过滤
拒绝数据1K - 10K正面示例 + 边界案例

🔄 RLHF 流程

完整 RLHF 三阶段

阶段 1: 奖励模型(Reward Model)

# 奖励模型训练数据格式
reward_data = [
    {
        "prompt": "帮我写一封辞职信",
        "chosen": "好的,请告诉我你的职位和离职原因...",  # 人类偏好
        "rejected": "我不能帮你写辞职信,这可能涉及法律问题。"  # 不被偏好
    }
]

# 奖励模型架构
class RewardModel(nn.Module):
    def __init__(self, base_model):
        super().__init__()
        self.base = base_model          # 共享 SFT 模型 backbone
        self.value_head = nn.Linear()   # 额外输出标量分数
        
    def forward(self, prompt, response):
        combined = tokenize(prompt + response)
        logits = self.base(combined)
        score = self.value_head(logits)  # 标量奖励
        return score

奖励模型训练目标

Loss_RL = -log(σ(r_θ(prompt, chosen) - r_θ(prompt, rejected)))
  • 最大化偏好回复的奖励分数
  • 最小化非偏好回复的奖励分数
  • 偏好差值越大,惩罚越大

阶段 2: PPO 训练

PPO 关键参数

参数推荐值说明
clip_range0.2PPO 裁剪范围
kl_coef0.04 - 0.2KL 散度惩罚系数
gamma0.995折扣因子
lam0.95GAE 参数
epochs1 - 3PPO 迭代轮数

阶段 3: SFT 清理

Pro Tip:PPO 训练后通常会退化 SFT 能力,需要用少量对齐数据继续 SFT 1-2 步来"清理"。

🎯 DPO 直接偏好优化

DPO vs RLHF

DPO 核心公式

Loss_DPO = -log(σ(β × log(π_θ(y|x)/π_ref(y|x))))

关键洞察:DPO 将奖励函数解析掉了,直接在策略模型上优化偏好数据。

DPO 优势

维度RLHFDPO
复杂度三阶段,极复杂单阶段,简单
稳定性PPO 训练不稳定更稳定
显存需求需要 4 个模型仅需 2 个
调参难度多超参少超参
效果理论最优接近 RLHF

DPO 实现

import torch.nn.functional as F

def dpo_loss(policy_chosen_logps, policy_rejected_logps,
             reference_chosen_logps, reference_rejected_logps, beta):
    """DPO 损失函数实现"""
    pi_logratios = policy_chosen_logps - policy_rejected_logps
    ref_logratios = reference_chosen_logps - reference_rejected_logps
    
    logits = pi_logratios - ref_logratios
    losses = -F.logsigmoid(beta * logits)
    return losses.mean()

DPO 超参

参数推荐值说明
β0.1 - 0.5KL 约束强度,越大越接近参考模型
学习率5e-7 - 1e-5通常比 SFT 小 10 倍
Epochs1 - 2过拟合风险高
Max Length2048与 SFT 一致

🔄 ORPO 联合优化

ORPO 的创新

ORPO = Supervised Fine-Tuning + Direct Preference Optimization

  • 无需参考模型:在损失函数中隐式包含 KL 约束
  • 单阶段训练:一个损失函数同时优化 SFT 和对齐
  • 更少超参:只需 λ 控制两个损失的权重

📊 方法对比

综合对比表

特性RLHFDPOORPOCAI
阶段数3111
需要 RM✅❌❌❌
需要 PPO✅❌❌❌
需要参考模型✅✅❌❌
实现复杂度高低最低低
效果上限⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
稳定性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
推荐度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

方法选择决策树

🛠️ 实践指南

偏好数据构建

# 偏好数据示例
alignment_data = [
    {
        "prompt": "如何快速学习编程?",
        "chosen": "建议从 Python 开始,它语法简洁...",
        "rejected": "你可以试试编程,有很多教程..."
    },
    {
        "prompt": "评价这部电影",
        "chosen": "这部电影节奏紧凑,剧情反转令人意外...",
        "rejected": "电影还行吧"
    }
]

数据质量要求

要求说明
难度适中偏好差异明显,避免模棱两可
多样性覆盖各任务类型
真实性来自真实用户 query
无偏见避免文化/政治偏见

训练监控

指标期望趋势异常信号
DPO Loss下降上升或不稳定
偏好一致性上升不变化
SFT 能力保持或略降显著退化
KL 散度平稳剧烈波动

常见问题与解决方案

问题原因解决方案
模型拒绝所有回答β 过大减小 β
SFT 能力退化λ 过大或 epoch 过多减少训练轮数
偏好模型过拟合数据量不足增加数据 / 正则化
训练不收敛学习率过高降低 LR,增加 Warmup
奖励黑客RM 存在漏洞多指标评估 + 人工抽查

📚 延伸阅读

  • Training Language Models to Follow Instructions (InstructGPT) — RLHF 开山之作
  • Direct Preference Optimization: Your Language Model is Secretly a Reward Model — DPO
  • ORPO: Monolithic Reward Modeling — ORPO
  • Constitutional AI: Harmlessness from AI Feedback — 宪法 AI
  • DPO vs RLHF: A Practical Comparison — 实践对比
在线编辑文档
上次更新: 2026/4/28 17:49
贡献者: colewort
Prev
模型压缩(Compression)