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 的区别

相关推荐
小镇敲码人6 小时前
深入剖析华为CANN框架下的Ops-CV仓库:从入门到实战指南
c++·python·华为·cann
lili-felicity6 小时前
CANN优化LLaMA大语言模型推理:KV-Cache与FlashAttention深度实践
人工智能·语言模型·llama
程序猿追6 小时前
深度解码昇腾 AI 算力引擎:CANN Runtime 核心架构与技术演进
人工智能·架构
金融RPA机器人丨实在智能6 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
lili-felicity6 小时前
CANN异步推理实战:从Stream管理到流水线优化
大数据·人工智能
做人不要太理性6 小时前
CANN Runtime 运行时组件深度解析:任务下沉执行、异构内存规划与全栈维测诊断机制
人工智能·神经网络·魔珐星云
不爱学英文的码字机器6 小时前
破壁者:CANN ops-nn 仓库与昇腾 AI 算子优化的工程哲学
人工智能
晚霞的不甘6 小时前
CANN 编译器深度解析:TBE 自定义算子开发实战
人工智能·架构·开源·音视频
愚公搬代码6 小时前
【愚公系列】《AI短视频创作一本通》016-AI短视频的生成(AI短视频运镜方法)
人工智能·音视频
哈__6 小时前
CANN内存管理与资源优化
人工智能·pytorch