RLHF Reinforcement Learning from Human Feedback

基于人类反馈的强化学习 — 让AI更懂人类的训练方法

模型训练 对齐技术 核心技术

📖 定义

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 训练系统