📖 定义
RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)是一种将人类偏好融入语言模型训练的技术。它是 ChatGPT、Claude 等先进对话模型的核心训练方法,通过人类评分来引导模型生成更有用、更无害、更诚实的回答。
核心理念:不是直接告诉模型"正确答案",而是让人类评价模型的输出,通过强化学习优化模型以符合人类偏好。
⚙️ 三阶段训练流程
1
预训练 (Pre-training)
在大规模文本数据上进行自监督学习,学习语言知识和世界知识
→
2
SFT 监督微调
使用人类编写的问答数据进行监督微调,学习对话格式
→
3
RLHF 强化学习
使用奖励模型和PPO算法,根据人类反馈进一步优化
🔍 RLHF 核心步骤详解
步骤一:收集人类偏好数据
对同一问题的多个回答,人类标注员进行排序或评分:
- 比较两个回答,选择更好的一个
- 考虑因素:有用性、安全性、真实性、简洁性
- 构建偏好数据集:{prompt, chosen_response, rejected_response}
步骤二:训练奖励模型 (Reward Model)
奖励模型学习预测人类偏好,为RL提供优化信号:
import torch
import torch.nn as nn
class RewardModel(nn.Module):
def __init__(self, base_model):
super().__init__()
self.model = base_model
self.score_head = nn.Linear(base_model.config.hidden_size, 1)
def forward(self, input_ids, attention_mask):
outputs = self.model(input_ids, attention_mask=attention_mask)
# 取最后一个token的隐藏状态
last_hidden = outputs.last_hidden_state[:, -1, :]
score = self.score_head(last_hidden)
return score
# 训练目标:让chosen的得分高于rejected
loss = -torch.log(torch.sigmoid(reward_chosen - reward_rejected)).mean()
步骤三:使用 PPO 进行强化学习
使用近端策略优化算法(PPO)来最大化奖励模型的评分:
from transformers import AutoModelForCausalLM
from trl import PPOTrainer, PPOConfig
# 加载SFT后的策略模型
policy_model = AutoModelForCausalLM.from_pretrained("sft-model")
# PPO配置
config = PPOConfig(
model_name="sft-model",
learning_rate=1.41e-5,
batch_size=256,
ppo_epochs=4,
gamma=1,
lam=0.95
)
# 创建PPO训练器
ppo_trainer = PPOTrainer(
config=config,
model=policy_model,
tokenizer=tokenizer,
dataset=dataset
)
# 训练循环
for batch in ppo_trainer.dataloader:
# 生成回答
queries = batch["query"]
response_tensors = ppo_trainer.generate(queries)
# 计算奖励
texts = [q + r for q, r in zip(queries, response_tensors)]
rewards = reward_model(texts)
# PPO更新
stats = ppo_trainer.step(queries, response_tensors, rewards)
🎯 为什么 RLHF 有效
对齐人类意图
让模型理解人类真正想要的回答,而非简单模仿训练数据
减少有害输出
通过偏好学习减少偏见、歧视和有害内容
更好的对话体验
回答更加自然、有帮助,符合对话场景
难以量化的目标
处理那些难以用规则定义的"好回答"标准
⚠️ 挑战与局限
- 人类标注成本:需要大量高质量的人类偏好数据
- 奖励黑客:模型可能学会"欺骗"奖励模型而非真正改进
- 分布偏移:训练时的奖励模型可能在推理时失效
- 价值观对齐:人类标注员的主观偏好可能不一致
- 训练不稳定:RL训练可能出现模式崩溃或退化
🆕 替代方案与改进
DPO (Direct Preference Optimization)
直接偏好优化,跳过奖励模型训练,直接用偏好数据优化策略,更简单高效
KTO (Kahneman-Tversky Optimization)
仅需二元反馈(好/坏)而非成对比较,大幅降低标注成本
SLiC (Sequence Likelihood Calibration)
序列似然校准,结合排序损失和长度归一化,训练更稳定
Constitutional AI
宪法AI,用AI自我批评和修正替代部分人类反馈,减少对人类标注的依赖
🛠️ 常用工具
TRL
Hugging Face 的 Transformer 强化学习库
TRLX
分布式 RLHF 训练框架
LLaMA-Factory
一站式大模型训练框架,支持 RLHF 全流程
DeepSpeed Chat
微软开源的 RLHF 训练系统