30秒快速回答: RLHF 是用「人类偏好」来训练 AI 的方法——人类先对 AI 的回答打分(A 比 B 好),再用这些分数训练一个「奖励模型」来预测人类会打多少分,最后用强化学习(PPO)让 AI 学会「怎样的回答能得高分」。这就像训练一只狗:做对了给零食,做错了不给,久而久之学会什么是「好行为」。


RLHF 的三个阶段

阶段一:有监督微调 (SFT)
  [高质量问答对] → 训练 → 基础对话模型

       ↓

阶段二:奖励模型训练 (RM)
  [人类对多个回答排序] → 训练 → 奖励模型
  (预测人类会给多少分)

       ↓

阶段三:强化学习 (PPO)
  [让 AI 生成回答 → 奖励模型打分 → PPO 优化]
  (让 AI 学会「怎样才能得高分」)

阶段一:SFT(已在预训练阶段完成)

# 概念示意
model = pretrained_llm()
data = [
    {"input": "解释一下 RLHF", "output": "RLHF 是..."},
    # ... 数千条高质量问答
]
model = fine_tune(model, data)

阶段二:训练奖励模型

核心思想:人类不需要给「绝对分数」,只需要告诉模型「A 比 B 好」:

# 人类标注数据格式
preferences = [
    {
        "prompt": "如何学习 AI?",
        "chosen": "建议从 Python 和数学基础开始...",
        "rejected": "AI 很简单,三天就能学会..."
    },
    # ... 数万条偏好对
]

# 奖励模型训练(Bradley-Terry 排序损失)
def reward_model_loss(r_chosen, r_rejected):
    """
    最小化:-log(sigmoid(r_chosen - r_rejected))
    目标:让「好回答」的奖励 >「差回答」的奖励
    """
    return -torch.log(torch.sigmoid(r_chosen - r_rejected))

阶段三:PPO 优化

# PPO (Proximal Policy Optimization) 简化示意
for episode in range(n_episodes):
    # 1. AI 生成一个回答
    response = policy_model.generate(prompt)

    # 2. 奖励模型打分
    reward = reward_model(prompt, response)

    # 3. KL 散度惩罚(防止偏离太远)
    kl_penalty = KL_divergence(policy_model, reference_model)

    # 4. 综合奖励
    total_reward = reward - beta * kl_penalty

    # 5. 用 PPO 更新策略
    policy_model = ppo_update(policy_model, total_reward)

DPO:RLHF 的简化替代

为什么需要 DPO?

RLHF 的痛点:
  1. 需要单独训练一个奖励模型
  2. PPO 训练不稳定(4 个模型同时跑)
  3. 超参数敏感(beta, clip 等)

DPO(Direct Preference Optimization)解法:
  1. 不需要奖励模型!直接从偏好数据训练
  2. 只需 1 个模型的 forward pass
  3. 数学上等价于 PPO,但实现简单一个数量级

RLHF vs DPO 对比

维度 RLHF (PPO) DPO
需要奖励模型?
训练复杂度 高(4 模型) 低(1 模型)
训练稳定性 波动大 稳定
效果上限 理论上更高 接近但略低
适用场景 大公司/研究 个人/小团队

DPO 实战代码

from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import DPOTrainer, DPOConfig
from datasets import Dataset

# 1. 加载基础模型
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B")

# 2. 准备偏好数据
data = {
    "prompt": [
        "如何学习编程?",
        "AI 会取代人类吗?"
    ],
    "chosen": [
        "建议从 Python 入门,逐步学习数据结构和算法...",
        "AI 会取代部分重复性工作,但创造性和人际工作仍需要人..."
    ],
    "rejected": [
        "编程很简单,看视频就会",
        "AI 马上会取代全人类"
    ]
}
dataset = Dataset.from_dict(data)

# 3. 配置 DPO 训练
training_args = DPOConfig(
    output_dir="./dpo-model",
    per_device_train_batch_size=4,
    learning_rate=5e-6,
    num_train_epochs=3,
    beta=0.1,  # KL 惩罚系数
    logging_steps=10,
)

# 4. 训练
trainer = DPOTrainer(
    model=model,
    args=training_args,
    train_dataset=dataset,
    tokenizer=tokenizer,
)
trainer.train()

# 5. 保存对齐后的模型
trainer.save_model("./dpo-model-final")
print("DPO 训练完成!模型已对齐人类偏好。")

RLHF 在 2026 年的演进

方向 进展 说明
DPO 变体 ORPO、KTO、IPO 越来越简单的对齐方法
合成偏好数据 最强模型生成偏好 减少对人类标注的依赖
多目标对齐 安全性 + 创意性 + 准确性 不止「有用」,还要「安全」
持续对齐 在线 RLHF 模型部署后持续接收反馈更新

常见问题

Q: RLHF 和 RLAIF 有什么区别?

RLHF 用「人类」反馈(人工标注),RLAIF 用「AI」反馈(如 GPT-4 打分)。RLAIF 成本更低、速度更快,但可能存在 AI 偏见。实际项目中常用「人类 + AI 混合反馈」。

Q: 不做 RLHF 的模型会怎样?

会「跑偏」——生成有害内容、胡编乱造、不符合人类预期。最典型的例子:早期 GPT-3 不做 RLHF 时,经常生成种族歧视、暴力等不安全内容。

Q: DPO 比 RLHF 简单那么多,为什么还有人用 RLHF?

DPO 依赖的偏好数据假设更强(要求偏好数据完全准确),实际数据可能不满足。大规模场景下,RLHF 的奖励模型可以持续更新,更灵活。


下一步建议: 用 HuggingFace TRL 库的 DPOTrainer,拿 100 条你标注的「好回答 vs 差回答」对,训练一个你自己的对齐模型。