03 RLHF 核心数学推导
03 RLHF 核心数学推导
RLHF(Reinforcement Learning from Human Feedback)是让大语言模型对齐人类偏好的核心技术。本文从 Bradley-Terry 模型讲起,推导奖励模型训练和 PPO-RLHF 的完整数学流程。
1. RLHF 整体框架
RLHF 分为三个阶段:
| 阶段 | 目标 | 方法 |
|---|---|---|
| Stage 1: SFT | 监督微调 | 最大似然训练 |
| Stage 2: RM | 训练奖励模型 | Bradley-Terry + 对比学习 |
| Stage 3: PPO | 强化学习优化 | PPO + KL 惩罚 |
本文聚焦 Stage 2 和 Stage 3 的数学推导。
2. Stage 2: 奖励模型训练
2.1 人类偏好数据
收集人类对模型输出的偏好比较:
给定提示 ,模型生成两个回复 (chosen/winner)和 (rejected/loser),人类标注哪个更好。
训练数据格式:
2.2 Bradley-Terry 模型
问题:如何从比较数据中学习一个标量奖励函数?
Bradley-Terry 模型假设:两个选项被偏好的概率可以表示为它们"潜在得分"的函数。
设 是奖励函数,表示对 的"得分",则人类偏好 优于 的概率为:
2.3 推导 Bradley-Terry 概率公式
Step 1:假设潜在得分服从 Gumbel 分布
Gumbel 分布是一种极值分布,具有一个关键性质:
如果 和 独立,则:
Step 2:链接到奖励模型
假设每个回复 有一个"真实奖励" ,人类判断时观察到的奖励带有噪声:
则人类选择 的概率为 的概率:
Step 3:应用 Gumbel 分布性质
根据 Gumbel 分布性质:
其中 是 sigmoid 函数。
这就是 Bradley-Terry 模型的核心公式!
2.4 一致性检验:Sigmoid 形式
注意到:
核心结论:偏好概率只依赖于奖励差值 。
2.5 奖励模型训练目标
最大似然估计:
给定数据集 ,奖励模型的训练目标是最大化观测到的偏好概率:
展开:
2.6 梯度推导
对参数 求梯度:
Step 1:损失函数
Step 2:利用对数 sigmoid 导数
Step 3:链式法则
直觉理解:
- 是模型"错误预测 更好"的概率(接近 0 表示预测正确)
- 当模型预测正确时,梯度接近 0,更新幅度小
- 当模型预测错误时,梯度较大,会显著调整 和
3. Stage 3: PPO-RLHF
3.1 目标设定
给定训练好的奖励模型 ,我们希望优化语言模型 使得期望奖励最大化。
问题:直接最大化奖励会导致:
- 奖励黑客(Reward Hacking):模型学会欺骗奖励模型,而不是真正对齐人类偏好
- 灾难性遗忘:模型忘记预训练知识,输出不连贯的内容
解决方案:添加 KL 散度约束,限制模型不要偏离参考模型太远。
3.2 KL 惩罚的推导
目标函数:
其中:
- 是参考模型(通常是 SFT 模型)
- 控制 KL 惩罚强度
3.3 KL 散度的展开
为什么用正向 KL 而不是逆向 KL?
- 正向 KL: —— mode-covering,鼓励 覆盖 的所有模式
- 逆向 KL: —— mode-seeking,鼓励 只覆盖一个模式
在 RLHF 中,我们希望 不要偏离 太远,正向 KL 更合适。
3.4 PPO-RLHF 目标函数
结合 PPO 的 Clip 目标和 KL 惩罚:
其中:
- 是 token 级重要性权重
- 是优势估计( 是学到的价值函数)
3.5 完整 PPO-RLHF 目标
实践中,完整目标函数包含:
| 项 | 公式 | 作用 |
|---|---|---|
| PPO-Clip 目标 | 稳定策略优化 | |
| 价值函数学习 | ||
| 熵奖励,鼓励探索 | ||
| KL 惩罚 | 防止偏离参考模型 |
3.6 为什么用 KL 惩罚而不是 Clip?
你可能问:PPO 已经有 Clip 防止策略变化太大,为什么还要 KL 惩罚?
关键区别:
- Clip:限制 相对于 (同一个 epoch 内)
- KL 惩罚:限制 相对于 (参考模型,通常是 SFT 后的模型)
目的不同:
- Clip 保证单次更新稳定
- KL 惩罚保证长期不偏离"好"的基准
4. 奖励模型的局限性
4.1 奖励函数的不唯一性
Bradley-Terry 模型只决定了奖励的差值,不决定绝对值。
对于任意函数 :
有相同的偏好预测:
解决方案:标准化奖励,或在损失中加入正则项。
4.2 Over-optimization 问题
随着 PPO 优化,语言模型可能会找到奖励模型的"漏洞",获得高奖励但实际质量下降。
表现:
- 奖励持续上升
- KL 散度持续增大
- 实际生成质量反而下降
This is known as Goodhart's Law in action:
"When a measure becomes a target, it ceases to be a good measure."
5. PPO-RLHF 算法伪代码
PPO-RLHF 算法:
输入:
- 预训练语言模型 π_init
- SFT 微调后的参考模型 π_ref
- 奖励模型 r_φ
- 初始策略参数 θ(从 π_ref 复制)
- 初始价值函数参数 ω
For iteration = 1, 2, ...:
1. 生成回复:
对一批 prompts X = {x_1, ..., x_n}
用当前策略 π_θ 生成回复 {y_1, ..., y_n}
2. 计算奖励:
For each (x, y):
r(x, y) = r_φ(x, y)
KL 惩罚项(提前计算):
kl_penalty = β * ∑_t log(π_θ(y_t|x,y_<t) / π_ref(y_t|x,y_<t))
final_reward = r(x, y) - kl_penalty
3. 计算优势(GAE):
用价值函数 V_ω 估计优势 Â_t
4. PPO 更新(多轮 epoch):
For epoch = 1, ..., K:
L_CLIP(θ) = 𝔼_t[min(r_t(θ)Â_t, clip(r_t(θ),1-ε,1+ε)Â_t)]
L_KL(θ) = 𝔼_t[D_KL(π_θ || π_ref)]
L(θ) = L_CLIP(θ) - L_KL(θ)
θ ← θ + α ∇_θ L(θ)
5. 更新价值函数:
L_VF(ω) = 𝔼_t[(V_ω(s_t) - V_t^target)²]
ω ← ω - α ∇_ω L_VF(ω)
6. 实际训练中的技巧
6.1 奖励归一化
训练前对奖励模型输出做归一化:
其中 是训练集上的均值和标准差。
6.2 KL 惩罚的自适应调整
参考 PPO-Penalty,可以自适应调整 :
- 如果 KL > 目标值:增大
- 如果 KL < 目标值/2:减小
6.3 奖励塑形(Reward Shaping)
为每个 token 分配奖励,而非整个回复一个奖励:
或者使用 KL 惩罚的 token-wise 分解。
7. 总结
| 阶段 | 核心公式 | 目标 |
|---|---|---|
| RM 训练 | 学习人类偏好 | |
| PPO-RLHF | 优化奖励 + 保持对齐 | |
| KL 惩罚 | 防止偏离参考模型 |
RLHF 的核心思想:
- 用 Bradley-Terry 模型从偏好数据学习奖励
- 用 PPO 优化策略最大化奖励
- 用 KL 惩罚约束,防止偏离太远
8. 参考文献
- Ouyang, L., et al. (2022). "Training language models to follow instructions with human feedback." NeurIPS.
- Christiano, P., et al. (2017). "Deep reinforcement learning from human preferences." NeurIPS.
- Stiennon, N., et al. (2020). "Learning to summarize from human feedback." NeurIPS.
- Bradley, R. A., & Terry, M. E. (1952). "Rank analysis of incomplete block designs: I. The method of paired comparisons." Biometrika.
- Ziegler, D. M., et al. (2019). "Fine-Tuning Language Models from Human Preferences." arXiv.