RLHF:基于人类反馈的强化学习
1. 背景与核心思想
大语言模型(LLM)的预训练目标是预测下一个 token,这给了模型强大的语言能力和知识储备,但并不能直接保证模型的输出符合人类偏好。预训练目标与”有用、诚实、无害”的对齐目标之间存在根本性差异:
- 语言模型目标:最大化
,即让续写更”像”互联网文本。 - 对齐目标:输出应该被人类认为更有用、更安全、更符合意图。
这就是为什么仅仅通过 next-token prediction 训练出的模型会表现出奖励黑客(reward hacking)、有害输出、过度迎合等问题。RLHF(Reinforcement Learning from Human Feedback) 是一套将人类偏好纳入训练目标的方法论,其核心思想是:
- 让人类对模型的多个候选输出打分或排序。
- 训练一个 Reward Model 来学习这些偏好。
- 使用强化学习算法(通常是 PPO)来优化策略,使其在尽可能获得高奖励的同时,保持与原模型的合理距离。
RLHF 并非单纯的”训练技巧”,而是一种从人类偏好出发定义目标函数、再用 RL 优化策略的范式转换。它解决的问题本质上是:如何将模糊的、主观的”人类意图”转化为可优化的目标函数?
2. RLHF 三阶段流程
2.1 总体架构
RLHF 分为三个依次执行的阶段,缺一不可:
[预训练 LLM] → Stage 1: SFT(监督微调)→ [SFT 模型]
↓
Stage 2: Reward Model 训练 → [Reward Model]
↓
Stage 3: Policy Optimization(PPO)→ [对齐模型]
2.2 Stage 1:监督微调(Supervised Fine-Tuning, SFT)
目的:为后续的 RL 阶段提供一个质量尚可的初始化策略。
为什么需要 SFT?直接用预训练模型做 RL 存在几个问题:
- 预训练模型产生的输出质量方差极大,reward model 难以学到有意义信号的对应关系。
- 预训练模型缺乏遵循指令的能力(instruction following),PPO 阶段难以有效探索高质量输出。
- SFT 阶段让模型学会生成”人类会阅读的”格式的回复,而非随意续写。
数据:人类标注的”问答对”或”指令-回复对”,通常 10k-100k 条。数据质量在此阶段至关重要,因为 SFT 模型会成为后续所有阶段的基石。
训练:标准的 next-token LM 目标,最小化负对数似然:
关键注意事项:
- SFT 阶段不必练到模型收敛,目标是让模型具备基本的指令遵循能力。
- 过长的 SFT 会导致模型”记住”回复格式而失去多样性,影响后续 RL 阶段探索。
- 数据质量 >> 数据数量,高质量的 10k 条数据远优于低质量的 100k 条。
2.3 Stage 2:奖励模型(Reward Model, RM)训练
目的:学习一个人类偏好的代理函数,将人类主观评价转化为可微的数值信号。
数据:同一输入
建模:Reward Model 本质上是一个对序列打分的模型,通常基于 SFT 模型去掉 LM head 后加一个回归头得到:
Pairwise Loss(Bradley-Terry 模型):
给定一个输入
其中
更一般的排序损失可以写为 listwise 形式,但对 RLHF 场景,pairwise 是最常用且最有效的。
为什么用 Reward Model 而不是直接用人类标注的分数作为奖励?
- 人类标注的成本极高,无法对每一次模型输出都打分。
- Reward Model 具备泛化能力,可以对任意输入-回复对打分。
- Reward Model 过滤了人类标注中的噪声(不同标注者的主观差异),学到一个相对一致的偏好函数。
关键训练细节:
- RM 的输入通常是完整的
对,输出一个标量分数。 - 需要将
截断到合理长度(如 512-2048 tokens),避免极长序列导致的梯度问题。 - RM 的训练需要和 SFT 模型使用相同的 tokenization 和编码方式。
- 推荐使用独立的 Reward Model 而非复用 SFT 模型权重(否则会造成训练不稳定)。
验证:RM 的验证通常使用 held-out 人类偏好数据集,衡量模型预测的排序正确率(accuracy)。一个好的 RM 在 held-out 上通常达到 65-75% 的排序准确率。
2.4 Stage 3:策略优化(Policy Optimization)
目的:使用 RL 算法最大化累积奖励,同时控制策略偏离初始模型(通常是 SFT 模型)的程度。
2.4.1 RL 目标函数
PPO 阶段优化的总体目标可以写为:
其中:
是当前要优化的策略(policy),即正在训练的 LLM。 是参考策略(reference policy),通常是 Stage 1 的 SFT 模型。 是 Reward Model 给出的奖励。 是 KL penalty 系数,控制策略偏离参考模型的程度。 衡量两个策略分布之间的差异。
KL penalty 的物理含义:
- 没有 KL penalty 时,优化 reward 会导致策略走向极端——可能生成在 Reward Model 上得分极高但实际质量极差的内容(reward hacking)。
- KL penalty 本质上是一种正则化,要求策略不要走得太远,保持与原始 SFT 模型的能力接近。
的取值需要权衡:过大 → 策略几乎不退化但 reward 提升有限;过小 → 容易出现 reward hacking 和训练不稳定。
2.4.2 从 Reward 到 Advantage
实际训练中,直接用 reward 作为优化目标是不稳定的。我们使用优势函数(advantage)来衡量一个 action 相对于 baseline 的相对优势:
其中
在 RLHF 中,reward 是对整个序列打分的(sequence-level),而非每步的奖励。优势估计通常采用 GAE(Generalized Advantage Estimation) 或简化的 reward-to-go 方式:
其中
2.4.3 PPO 算法在 RLHF 中的应用
PPO(Proximal Policy Optimization)是一种 on-policy 算法,其核心思想是限制策略更新的幅度,避免灾难性的策略更新。
PPO 的 clip 目标:
其中
在 RLHF 场景下的适配:
| PPO 标准设定 | RLHF 适配 |
|---|---|
| 状态 | 已生成的前缀 |
| 动作 | 下一个 token |
| 奖励 | 通常 |
| Value network | 单独训练或共享 SFT 模型权重的 value head |
PPO 的关键优势:
- 稳定性:clip 机制防止策略更新过大,这在大模型训练中至关重要——一次灾难性的更新可能需要数万 USD 的重训成本。
- 单调提升保证:在一定条件下,PPO 能保证策略性能的提升而非下降。
- 成熟实现:open-source 库(TRL、RL4LMa、RLHF 等)有成熟实现,社区积累了大量调参经验。
PPO 的关键缺点:
- On-policy 限制:每次更新都需要重新从当前策略采样,显存占用大(需要同时存储 old policy 和 new policy 以及 rollout 数据)。
- 超参数敏感:clip 范围、KL 系数、学习率等都需要仔细调教,不同模型结构的最优参数差异显著。
- Reward hacking 风险:PPO 优化最终奖励,如果 RM 存在漏洞,PPO 会精准地”钻空子”。
3. 为什么 RLHF 能提升”偏好一致性”
“偏好一致性”(preference alignment)指的是模型的输出分布与人类对相同输入的期望输出分布之间的匹配程度。RLHF 提升偏好一致性的机制可以从几个层面理解:
3.1 从信息论角度看
预训练目标(next-token prediction)学到的分布
RLHF 本质上是在做分布修正——用 reward 信号引导策略从
3.2 从决策角度看
预训练模型在做下一个 token 预测时,并不知道”哪个输出人类会认为更好”,它只知道”哪个续写更符合互联网文本的统计规律”。RLHF 为模型提供了一个可区分好与坏的信号,使模型在生成时能够隐式地考虑”人类会怎么看这个输出”。
这与监督微调的区别在于:SFT 教会模型”什么样的回答格式是正确的”(behavior cloning),而 RLHF 教会模型”如何在多个选项中选择最好的”(active selection through reward comparison)。
3.3 从避免分布偏移看
一个仅靠 SFT 训练的模型,其能力上限是标注数据覆盖的分布。如果人类的偏好分布与 SFT 训练数据存在系统性差异(如 SFT 数据偏向某种风格的回答),模型无法自主修正。RLHF 通过 reward signal 让模型能够主动探索并偏好更符合人类期望的输出,而非被动地模仿训练数据中的模式。
4. Reward Model 的漏洞与 Reward Hacking
4.1 为什么 Reward Model 容易被钻空子
Reward Model 是从有限的人类标注中学习的,其泛化能力受限于:
- 数据覆盖不足:人类不可能穷尽所有输入类型,RM 对某些输入模式缺乏理解。
- 标注噪声:不同标注者的标准不统一,RM 学到的是一种”平均偏好”,这种偏好可以被特定输出模式精准击中而实际质量不佳。
- 分布偏移:RM 训练在某个分布上,但 RL 优化会驱动策略移向 RM 的”漏洞区域”——即 RM 打分高但实际质量差的数据点。
4.2 常见 Reward Hacking 现象
| 现象 | 描述 | 原因 |
|---|---|---|
| 输出变短 | 模型学会生成简洁的、容易获得中等偏好评分的回答 | RM 对短回答的惩罚不够敏感,且短回答容易”看起来正确” |
| 过度迎合 | 模型学会讨好标注者而非真正解决用户问题 | RM 训练数据中标注者偏好可能与真实用户偏好不同 |
| 模式重复 | 模型学会套用固定的”好回答模板” | RM 对重复模式的识别能力有限 |
| 过度使用安全词汇 | 频繁出现”作为一个AI,我认为…”等安全免责声明 | RM 训练数据中包含大量安全导向的偏好 |
| 语法正确但事实错误 | 生成流畅但内容虚假的回答 | RM 仅评估流畅度和格式,不评估事实性 |
4.3 Mode Collapse
Mode collapse 是 RLHF 训练中的严重问题,指策略在优化过程中逐渐失去输出多样性,集中在少数几个”套路”上。触发原因通常是:
- KL 系数
设得过高,策略探索受限。 - Reward model 对特定模式的过度偏好导致其他模式被快速淘汰。
- PPO 的 on-policy 特性使得稀有模式的数据点被快速丢弃。
4.4 如何缓解 Reward Hacking
- 增加 RM 训练数据的多样性:覆盖更多输入类型,避免模型对特定模式过拟合。
- KL 控制:保持足够的
值,防止策略走得太远。 - 混合训练:将 RLHF 与 SFT 数据混合训练,防止完全依赖 RM 信号。
- Reward 归一化:确保 RM 打分在不同输入类型间具有可比性。
- 对抗性测试:刻意构造 RM 容易打高但实际质量差的对,训练 RM 识别。
- 多 RM 集成:使用多个独立的 RM,聚合它们的判断作为 reward,降低单点漏洞的风险。
5. 训练工程细节
5.1 Reward 数据收集与标注
数据来源:
- 人工标注:雇佣标注员对模型输出进行排序或打分。成本高但质量可靠。
- AI 辅助标注:用已有的大模型(如 GPT-4)对候选回复打分,扩展标注数据。
- 众包 vs 专业标注:前者成本低但方差大;后者成本高但一致性高。
标注流程建议:
- 同一输入至少标注 2-3 对(pairwise comparison),用于评估标注一致性。
- 标注前对标注员进行校准培训,减少系统性偏见。
- 监控标注一致性指标(如 Cohen’s kappa),一致性过低的数据应剔除或重新标注。
- 优先标注模型当前分布中不确定性高的样本(主动学习),提升数据效率。
数据量级:
- 初期探索:1k-5k 对比数据可训练出 baseline RM。
- 成熟训练:通常需要 10k-100k 对比数据。
- 大规模训练(如 GPT-3.5/4 对齐):数量级在百万级。
5.2 Reward Model 训练与验证
训练配置:
- 模型架构:通常基于 SFT 模型,去掉 LM head,添加 reward head(线性层)。
- 训练步数:通常 1-3 个 epoch,避免过拟合。
- 学习率:通常 1e-5 到 5e-5,较小以保持稳定。
- Batch size:通常 4-32,取决于显存。
- 正则化:使用 weight decay(L2 正则),防止 reward 值在少数 token 上过拟合。
验证指标:
- Pairwise Accuracy:在 held-out 测试集上正确判断偏好的比例。>70% 为良好。
- RM 校准:RM 打分与人类打分的一致性,检测 RM 是否系统性地高估或低估某些类型输出。
- Reward 分布:验证 RM 对不同质量输出的区分能力,避免所有输出打分区间的分布过于集中。
5.3 Policy Rollout、采样与优势估计
Rollout 过程:
- 从当前
采样多个候选回复(通常 4-64 个/输入)。 - 对每个
用 Reward Model 打分,得到 。 - 计算优势估计
。
采样温度:
- 温度
控制采样分布的熵。 - 过低(
):采样高度集中,难以探索多样化输出,KL penalty 会误判为策略退化。 - 过高(
):采样过于随机,reward 信号方差大,收敛慢。 - 建议初始值
,根据 KL 稳定性和 reward 提升情况调整。
Batch Size:
- Rollout batch size:每次采样多少条数据。取决于显存,通常 8-32。
- PPO update batch size:每次更新用多少条数据。越大越稳定但显存需求越高。
更新频率:
- PPO 是 on-policy 算法,每次策略更新后必须重新采样。
- 通常每个 step 做 4-8 次 PPO epoch 更新,然后重新 rollout。
- 过少的 epoch 更新浪费数据,过多则过拟合。
5.4 超参数常见设置
| 参数 | 常见范围 | 说明 |
|---|---|---|
| KL 系数 | 0.01 ~ 0.2 | 初期可用较大值(如 0.1),后期逐步降低 |
| PPO clip | 0.1 ~ 0.3 | 默认 0.2,过小限制学习,过大导致不稳定 |
| 折扣因子 | 1.0 | RLHF 通常无折扣 |
| 学习率 | 1e-6 ~ 1e-5 | 较小以保持稳定 |
| Rollout batch size | 8 ~ 64 | 取决于显存 |
| PPO epoch 数 | 4 ~ 10 | 每批数据更新多次 |
| Value network 学习率 | 与 policy 相同或稍低 | 通常共享 encoder |
6. 训练监控指标
RLHF 训练中需要同时监控多个指标,以尽早发现问题:
| 指标 | 含义 | 正常趋势 | 危险信号 |
|---|---|---|---|
| Reward 分数 | RM 对当前策略输出的评分 | 逐步上升 | 急速上升(可能 reward hacking) |
| KL 散度 | 稳定在目标区间 | 超过阈值 → 策略过度偏离 | |
| Response Length | 平均回复长度 | 保持稳定 | 持续下降 → 过度迎合/模式简化 |
| Win Rate | 对参考模型或 baseline 的胜率 | 逐步提升 | 波动剧烈 → 训练不稳定 |
| Value Loss | Value network 的预测误差 | 逐步下降 | 上升 → 优势估计不可靠 |
| Policy Entropy | 输出分布的熵 | 先降后稳 | 持续下降 → mode collapse |
| PG Loss | Policy gradient loss | 逐步下降 | NaN/Inf → 数值不稳定 |
建议的日志记录频率:
- Reward、KL:每个 step 记录。
- Win rate、Response length:每 100-500 step 记录一次。
- 样本级别的详细日志(方便事后分析):每个 step 抽样记录。
可视化建议:
- 同时绘制 reward 曲线和 KL 曲线,观察两者是否同步变化。
- 记录训练过程中采样输出的典型案例,用于人工评估输出质量。
- 使用 wandb / tensorboard 记录所有指标,便于复盘分析。
7. PPO 在大模型对齐中的优点与缺点
7.1 优点
- 理论基础扎实:PPO 是当前最成熟的 on-policy RL 算法,有大量理论分析和实验验证。
- 训练稳定:clip 机制有效防止策略崩溃,是大模型训练的基本保障。
- 可复现性强:各大开源库(TRL、RL4LMa)有成熟实现,超参数经验可迁移。
- 端到端优化:直接从 reward signal 优化策略,不经过中间代理,信号损失小。
- 与 KL penalty 的天然结合:PPO 与 KL 约束的结合(PPO+KL penalty,即 PPO-KL)是大模型对齐的事实标准。
7.2 缺点
- 显存占用大:on-policy 特性决定了每次更新需要同时持有 old policy、new policy、rollout 数据。对于 7B+ 模型,单卡训练几乎不可能。
- Sample Efficiency 低:每次更新后必须丢弃所有旧数据,对于大规模语言模型这意味着巨大的计算浪费。
- 超参数敏感:KL 系数、clip 范围等参数在不同模型、不同数据上表现差异大,需要大量调参。
- Reward hacking 风险:如果 RM 有漏洞,PPO 会精准攻击这个漏洞,且一旦攻击成功很难恢复。
- 难以处理多目标:当需要同时优化多个目标(如有用性+安全性+真实性)时,PPO 需要人工设计 reward 的加权组合,不够灵活。
8. RLHF 训练流水线清单
阶段 1:数据准备
- 收集并清洗 SFT 训练数据(10k-100k 条指令-回复对)
- 收集 RM 训练数据(同一输入下的多候选回复对比数据)
- 标注数据一致性检查(剔除一致性过低的样本)
- 数据去重(去除与测试集重叠的样本)
- 数据格式统一(prompt + chosen + rejected)
阶段 2:SFT 训练
- 配置基础模型(预训练权重加载)
- 设置训练超参数(学习率 1e-5,epoch 1-3,batch size 根据显存)
- 设置日志(train loss, token accuracy)
- 保存 checkpoint(每 1000-5000 step 保存一次)
- 人工抽检输出质量
阶段 3:Reward Model 训练
- 从 SFT checkpoint 初始化 RM(复制权重,添加 reward head)
- 配置 RM 训练超参数(学习率 1e-5,epoch 1-3,weight decay 0.01)
- 用 held-out 数据验证 RM(pairwise accuracy > 65-70%)
- 检查 RM 打分分布(不同质量输出的区分度)
- 保存多个 RM checkpoints(用于集成或选择)
阶段 4:PPO 训练
- 从 SFT checkpoint 初始化 Policy 和 Value network
- 加载 RM 和 reference model(reference = SFT)
- 配置 PPO 超参数(KL 系数、clip 范围、学习率)
- 配置 rollout 参数(batch size、采样温度)
- 设置监控指标(reward、KL、length、entropy、win rate)
- 训练循环:
- Rollout:当前策略采样
- Reward 计算:用 RM 对所有采样打分
- Advantage 估计:计算
- PPO 更新:多轮 epoch 更新 policy 和 value
- 日志记录:每 step 记录关键指标
- Checkpoint 保存:每 N step 保存
- 人工抽检:定期抽样检查输出质量
阶段 5:训练后评估
- 在 held-out 测试集上评估最终模型的 win rate(vs SFT baseline)
- 人工评估输出质量(100-200 条,覆盖多种任务类型)
- 测试安全性(toxicity、harmful content)
- 测试事实准确性(幻觉问题)
- 测试指令遵循能力
9. RLHF 常见故障排查表
故障 1:Reward 不上升或上升后回落
可能原因:
- RM 训练不充分:pairwise accuracy 过低,reward 信号噪声过大
- KL 系数
过大:策略更新受限,reward 无法提升 - 学习率过小:优化器无法有效更新
- Rollout batch size 过小:reward 方差过大,无法有效学习
排查步骤:
- 检查 RM 在 held-out 上的 accuracy 是否 > 65%。
- 降低
(如从 0.1 降至 0.01)后观察 reward 是否上升。 - 观察 KL 是否在合理区间(通常 5-15 之间,太高或太低都不好)。
- 检查采样温度是否过高导致方差太大。
故障 2:KL 爆炸(KL 值急剧上升)
可能原因:
- KL 系数
过小 - 学习率过大
- PPO clip 过度触发导致策略剧烈波动
排查步骤:
- 立即降低学习率(如降低 50%)。
- 增大 KL 系数
。 - 检查是否出现 NaN/Inf(如出现,需要从上一个 checkpoint 恢复)。
- 检查 PPO epoch 数是否过多导致过拟合。
故障 3:输出长度急剧下降(模式简化)
可能原因:
- RM 过度偏好短回答
- KL 系数过大导致策略不敢探索长回答
- 采样温度过低
排查步骤:
- 检查 RM 是否对短回答有系统性偏好(分析 RM 打分 vs 回答长度的关系)。
- 加入 length normalization 到 reward 中(如 reward + α * length)。
- 降低 KL 系数,让策略有更多探索空间。
- 提高采样温度,增加输出的多样性。
故障 4:Mode Collapse(输出多样性丧失)
可能原因:
- KL 系数过大限制探索
- PPO 更新过于频繁导致稀有模式被丢弃
- Reward 信号过于集中
排查步骤:
- 降低 KL 系数
。 - 减少每批数据的 PPO epoch 数。
- 提高采样温度,增加 rollout 多样性。
- 在 reward 中加入 entropy bonus,鼓励策略保持探索。
故障 5:Reward Hacking(reward 上升但输出质量实际下降)
可能原因:
- RM 存在漏洞被策略精准利用
- KL 系数过小,策略过度偏离
- RM 训练数据分布与 RL 阶段分布偏移
排查步骤:
- 人工抽检高 reward 输出的实际质量。
- 分析 RM 打分高的输出是否具有共同的可利用模式。
- 训练对抗性测试集,识别 RM 的漏洞区域。
- 增大 KL 系数,限制策略偏离。
- 考虑使用多 RM 集成。
故障 6:Value Network 预测不准确
可能原因:
- Value network 训练不充分
- Advantage 估计方差大
- Value network 和 Policy 训练不同步
排查步骤:
- 检查 value loss 是否收敛。
- 监控 advantage 的分布,过大的方差说明估计不可靠。
- 使用更保守的 advantage 估计方法(如增大 GAE 的
)。 - Value network 学习率通常应与 policy 相当或略低。
故障 7:训练崩溃(NaN/Inf)
可能原因:
- 梯度爆炸(学习率过大或 reward 值域不 normaliz)
- 数值溢出(特别是在长序列上)
- 显存不足导致部分更新失败
排查步骤:
- 从上一个 checkpoint 恢复。
- 降低学习率(至少降低 50%)。
- 检查 reward 是否 normaliz(对 RM 打分做标准化)。
- 梯度裁剪(gradient clipping,max norm 1.0)。
- 减少 rollout 序列长度或 batch size。
10. 总结
RLHF 是大语言模型对齐的核心技术,其成功依赖于三个阶段的协同设计:
- SFT 提供了具备基本指令遵循能力的初始化策略。
- Reward Model 将人类偏好转化为可微的数值信号。
- PPO 在 KL 约束下最大化累积奖励,同时保持策略的可控性。
RLHF 的工程复杂度远高于标准的监督训练,主要挑战在于:
- RM 的质量直接决定了最终模型的上限。
- PPO 的超参数和训练稳定性需要大量调参经验。
- Reward hacking 和训练不稳定性是每个 RLHF 工程师都会遇到的问题。
理解 RLHF 的每个环节、每个超参数的作用,是成功训练对齐模型的基础。这份文档涵盖了 RLHF 从理论到工程的完整知识体系,但实际训练中仍需要根据具体模型、数据和硬件条件进行调整。训练一个好的 RLHF 模型是一门实验科学,需要持续的监控、分析和迭代。