LLM对齐核心:RLHF 从基础到实践全解析

二、RLHF

1. RLHF 基础概念

RLHF (Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)是一种通过人类偏好反馈来优化大语言模型的技术框架。其核心目标是让模型输出更安全 (safe)、有帮助 (helpful)且符合人类价值观。

典型应用模型:ChatGPT、LLaMA-3、Qwen2、DeepSeek-R1 等在对齐(alignment)阶段广泛使用。

主要模块及流程(三阶段,面试必背)

  1. SFT (Supervised Fine-Tuning,有监督微调)

    使用指令-回答对 数据集对预训练模型进行微调,让模型学会遵循指令 。

    涉及模块:

    • 数据加载器
    • LoRA / PEFT 适配器
    • Trainer 优化器
  2. Reward Model(RM,奖励模型)

    基于偏好数据集 训练一个分类或回归模型,学习给人类偏好的回答打分。

    涉及模块:

    • SequenceClassification 头
    • 偏好损失函数(通常基于 Bradley-Terry 模型)
  3. PPO (Proximal Policy Optimization,近端策略优化)

    以 RM 作为奖励信号,通过强化学习迭代优化策略模型(即语言模型本身)。

    涉及模块:

    • 策略模型(Actor)
    • 参考模型(用于 KL 惩罚)
    • 价值函数(Critic)
    • 在线采样器

整体流程 :

SFT 提供初始基线 → RM 捕捉人类偏好 → PPO 闭环迭代优化

常结合 Qwen / DeepSeek 的 MoE 架构,进一步提升多语言、长上下文对齐效果。

2. RLHF 和 DPO 的区别

RLHF vs DPO(Direct Preference Optimization)

相似点 :

两者都利用偏好数据集来进行模型对齐,弥补纯 SFT 的局限性。

主要差异:

方面 RLHF(带 PPO) DPO
训练方式 在线采样(生成新响应) 离线优化
是否需要 RM 需要独立的奖励模型 不需要 RM
是否需要 PPO 需要 PPO 进行强化学习 直接用偏好对计算损失
计算成本 较高、不稳定 更稳定、训练更快
探索能力 强(能探索新响应) 较弱(依赖已有数据)
典型代表 DeepSeek-R1 Qwen2.5(常用 DPO 变体如 SimPO)
优缺点总结 上限高,但易模式崩溃(可加 KL 惩罚缓解) 简单高效,但对数据质量敏感

简单一句话总结 :

DPO 是一种"更直接"的对齐方法,它跳过了奖励模型这一中间步骤,直接根据人类偏好数据优化语言模型。

与其他 RL 方法对比

  • PPO vs REINFORCE:PPO 引入 clipping 机制,梯度更稳定,避免大更新导致训练崩溃。
  • RLHF vs RLAIF (RL from AI Feedback):
    RLHF 使用真人反馈,质量高但成本高;
    RLAIF 使用强模型(如 GPT-4)合成反馈,成本低但可能引入偏差。

参考:https://deepseek.csdn.net/68425033965a29319f2524fd.html

3. RLHF 数据集类型

  • 偏好数据集(Preference Dataset):每条数据包含 prompt + chosen(更好回答)+ rejected(较差回答)
  • 纯 Prompt 数据集:仅包含 prompt,用于 PPO 在线采样生成新回答
  • SFT 数据集:指令-回答对,用于初始监督微调

4. 代码实现(基于 Hugging Face TRL 库)

常用于 Qwen / DeepSeek 模型,面试代码题高频出现。

奖励模型(RM)训练代码

python 复制代码
from trl import RewardTrainer, RewardConfig
from transformers import AutoModelForSequenceClassification

reward_model = AutoModelForSequenceClassification.from_pretrained(
    "Qwen/Qwen2-7B", 
    num_labels=1
)

trainer = RewardTrainer(
    model=reward_model,
    args=RewardConfig(output_dir="./rm"),
    train_dataset=preference_dataset,  # 格式:{prompt, chosen, rejected}
    tokenizer=tokenizer
)

trainer.train()

PPO 训练代码

python 复制代码
from trl import PPOTrainer, PPOConfig
from transformers import AutoModelForCausalLM

ppo_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-7B")

ppo_trainer = PPOTrainer(
    model=ppo_model,                    # 需要优化的模型
    ref_model=sft_model,                # SFT 后的模型,用于 KL 惩罚
    reward_model=reward_model,          # 已训练好的奖励模型
    tokenizer=tokenizer,
    dataset=prompt_only_dataset,        # 只含 prompt 的数据集
    config=PPOConfig(batch_size=64, ppo_epochs=4)
)

ppo_trainer.train()

优化建议:

结合 LoRA / QLoRA 大幅降低显存占用

面试可能考点:手写 PPO 损失函数、数据加载逻辑等

5. RLHF 相关面试高频 Q&A(点对点)

Q: RLHF 为什么分为三个阶段?

A: SFT 打基础(学会指令跟随);RM 学习人类偏好(打分);PPO 迭代优化(探索更高奖励响应)。三者缺一不可,避免直接 RL 的低效。

Q: 为什么奖励模型(RM)不直接用来生成文本?

A: RM 是分类/回归模型,只负责打分,没有自回归生成能力;强行用于生成容易导致分布偏移和模型崩坏。

Q: PPO 为什么使用纯 prompt 数据集?

A: 需要在线采样生成全新响应以实现探索;如果带固定回答,会导致过拟合,失去强化学习的效果。

Q: DPO 相比 RLHF 的优势是什么?

A: DPO 无需训练 RM 和 PPO,训练更稳定、速度更快;RLHF 探索能力更强,但计算成本高。Qwen2 系列倾向使用 DPO 简化流程。

Q: PPO 中 KL 散度起什么作用?

A: 防止策略模型偏离参考模型(通常是 SFT 模型)太远,缓解模式崩溃问题。

代码体现:loss = -clipped_surrogate + value_loss + entropy - beta * kl_div

Q: DeepSeek-R1 是如何使用 RLHF 的?

A: 在 MoE 架构下使用 PPO 优化多语言偏好;数据集合成 + 人工标注结合,重点对齐长程推理能力。

参考文章:

1、DPO PPO GRPO RLHF 的区别

相关推荐
小朱爱编程1238 小时前
当 AI 开始研发下一代 AI:“智能爆炸”离我们还有多远?
人工智能·深度学习
每周报刊8 小时前
智能手表健康监测实测:心率、血氧数据靠谱吗?
人工智能·智能手表
HIT_Weston8 小时前
239、【AI】【模型部署】基座模型研究:反向传播的已知、所求与场景
人工智能·模型部署
深频率8 小时前
15 Pro 能用、15 不能用:Siri AI 划了三档
人工智能
YOLO数据集集合9 小时前
电力设备目标检测数据集 | 电力设备 变电站巡检 部件识别 目标检测 YOLO格式 9127期
人工智能·yolo·目标检测·计算机视觉·目标跟踪·电力设备
我是小白呀9 小时前
24-从提交到服务开通:交付一个可恢复、可升级的企业Workflow系统
人工智能·workflow
编码者卢布9 小时前
【App Service 】WebJobs 多实例实验:谁在运行,什么时候运行?
开发语言·python
quantdash_cc9 小时前
Python 获取实时行情后如何进行批量筛选?从全市场快照到策略候选池
开发语言·python·数据分析·量化交易·股票数据·quantdash
code2cat9 小时前
【随笔】Agent Skills如何按需加载:把技能说明放进分层目录
人工智能·ai agent·agent skills
AI 算法大模型备案~当当9 小时前
各地备案数量怎么看:一份属地公告的认读与台账方法
java·数据库·人工智能