算法

RLHF 的三阶段流程

2026-02-12 阅读约 2.4k 字 LLM
文章目录

基础知识

RLHF 的三阶段流程

RLHF(Reinforcement Learning from Human Feedback)通常包含三个主要阶段:

监督微调(SFT)→ 偏好采样 + 奖励模型学习 → 强化学习优化(RL)

简单可以理解为:先学”怎么说话”,再学”什么话更好”,最后逼模型多说”好话”

阶段一:SFT(Supervised Fine-Tuning)

RLHF 通常从对一个预训练语言模型进行监督微调开始,使用高质量的人工数据(如对话、摘要等),得到一个模型 $\pi_{SFT}$。

数据形式:$(\text{prompt } x, \text{高质量回答 } y)$

损失函数:标准的监督学习损失函数

  • $\pi_\theta$:策略模型的参数化形式
  • $D$:监督微调数据集
  • $x$:输入提示
  • $y$:目标回答

目标:让模型学会基本的对话能力和任务完成能力,即”怎么说话”

阶段二:奖励模型(Reward Modeling)

使用 SFT 模型,对同一个 prompt $x$ 采样两个回答:

交给人类标注者,让他们选更好的一个:

  • $y_w$:winner,preferred(赢家)
  • $y_l$:loser,rejected(输家)

潜在奖励函数假设:假设人类偏好是由一个未知的真实奖励函数 $r^*(x,y)$ 生成的。我们并不知道它,但假设它存在。

偏好模型

数据集形式

损失函数


补充解释

BT 模型:

Bradley-Terry 模型是一个用于成对比较的概率模型

核心思想

  • 每个对象 $i$ 有一个隐藏的”实力值”参数 $\lambda_i$
  • 当两个对象 $i$ 和 $j$ 比较时,$i$ 战胜 $j$ 的概率为:

在 DPO 中的应用

  • 将奖励函数 $r(x,y)$ 看作”实力值”
  • 人类偏好 $ y_w \succ y_l $ 就是”比较结果”
  • 通过 BT 模型建立奖励与偏好的桥梁

为什么不用「谁分数大就选谁」?

如果直接规定:
那问题是:人类判断有噪声,同一个人、同一个问题,不一定每次选同样的。所以我们不建模成确定性规则,而是:概率模型

把公式 (1) 改写一下:

这就是熟悉的 Sigmoid 函数:

于是:

因为真实数据里人确实选择了 $ y_w $,所以该事件的概率是上式,对数似然是:

最大化所有样本的对数似然:

意思是:对每一条数据,都算一次”模型认为人类会选赢家的概率的对数”,然后把它们加起来,让这个总和尽可能大。对数把“连乘”变成“连加”,最优解不变(对数是单调递增函数)

等价地,最小化负对数似然(Likelihood):

这正是公式 (2)。意思是:对数据集里的样本取平均,然后对”对数概率”取负号,让这个值尽可能小。

对一个有限数据集 $D = {z_1, …, z_N}$,如果你均匀随机从中抽一个样本,那么:

👉 期望 = 平均值

令 $f(x,y_w,y_l) = \log \sigma(r_\theta(x,y_w) - r_\theta(x,y_l))$ 那么:

因为 $\sum_{i=1}^N f_i$ 和 $\frac{1}{N} \sum_{i=1}^N f_i$ 只差一个常数 $\frac{1}{N}$。而在优化中:乘以一个正的常数,不会改变最优解的位置。也就是说:

原目标:

等价于:

于是定义:

为什么机器学习里”总是最小化”?

因为梯度下降(Gradient Descent)默认是 minimize loss,所以大家习惯:把”想最大化的目标”,写成”要最小化的损失”。


阶段三:RL 微调

RL 目标函数(核心)


补充解释

一句话解释:👉 让模型生成 奖励高的回答 👉 但不能偏离原始 SFT 模型太远

$\pi_{ref}$(即初始 SFT 模型 $\pi_{SFT}$)实践中,语言模型策略 $\pi_\theta$ 也被初始化为 $\pi_{SFT}$。

  • 初始状态:$\pi_\theta = \pi_{ref} = \pi_{SFT}$
  • 训练目标:在保持与原始 SFT 模型接近的前提下,优化奖励
  • KL 约束作用:确保模型不会偏离初始能力太远

KL 约束:

KL 散度(Kullback-Leibler 散度)衡量两个概率分布之间的差异:

这表示:

  • 如果 $\pi_\theta$ 和 $\pi_{SFT}$ 相同:KL = 0
  • 如果 $\pi_\theta$ 偏离 $\pi_{SFT}$:KL > 0
  • 目标函数中的 $-\beta KL$ 惩罚偏离行为

KL 散度推导过程详解

KL 散度的通用定义(离散型)

期望的定义
对于随机变量 $Y \sim P$,函数 $f(Y)$ 的期望定义为:

进行变量映射

在 RLHF 的语境下,我们要计算的是两个模型策略(概率分布)之间的差异:

  • $P$ (当前分布):$\pi_\theta(y|x)$ —— 模型当前正在学习的策略
  • $Q$ (参考分布):$\pi_{SFT}(y|x)$ —— 原始的 SFT 策略
  • 样本空间:$y$(模型生成的所有可能的回答序列)

将这些代入通用公式:

转化为期望形式

  • 外层的 $\sum_y \pi_\theta(y|x)(\cdots)$ 表示我们在按照 $\pi_\theta(y|x)$ 的概率分布对后面的项进行加权平均
  • 括号里的项 $\log \frac{\pi_\theta(y|x)}{\pi_{SFT}(y|x)}$ 就是要计算期望的对象

因此,根据期望的定义 $ \sum P \cdot f = \mathbb{E}_P[f] $,可以直接写成:

为什么实践中要写成期望形式?

在深度学习和强化学习中,写成期望形式有重大的工程意义:

无法全量求和
对于语言模型,可能的回答 $y$ 的组合是天文数字(由词表大小和序列长度决定),我们根本无法遍历所有的 $y$ 来计算那个 $\sum$ 符号。

蒙特卡洛采样(Monte Carlo Sampling)
期望形式告诉我们,虽然不能遍历所有结果,但可以通过采样来近似:让模型 $\pi_\theta$ 生成(Sample)一批句子 $y$,计算这些句子的 $\log \pi_\theta(y|x) - \log \pi_{SFT}(y|x)$,取这些值的平均值,就是对 KL 散度的无偏估计

对齐目标函数
RL 的目标函数本身就是最大化期望奖励 $\mathbb{E}_{y \sim \pi_\theta}[r(x,y)]$。将 KL 约束也写成期望形式,就可以合并到一个大括号里:

这样,模型在每一轮训练采样时,就可以同时优化奖励并计算 KL 惩罚。

为什么这个目标函数不可导?

语言模型是离散生成的:

  • 输出是 token 序列 $y = (y_1, y_2, \ldots)$
  • 采样 / argmax 都是离散操作

无法像普通监督学习那样,对 $\mathbb{E}_{y \sim \pi_\theta(y|x)}[r(x,y)]$ 直接对 $\theta$ 求梯度。

👉 所以不能用反向传播直接优化奖励
👉 必须用强化学习(policy gradient)

这就是为什么要用 REINFORCE / PPO。

KL 约束是怎么变成”奖励”的?

关键一步是:把公式 (3) KL 项写成 log-prob 的形式

对离散策略:

代回目标函数

于是可以定义一个新的 reward

即论文中的:

(论文里通常把 $\beta$ 省略或吸收到系数里)

转换后的简化目标函数

通过这个变换,原来的约束优化问题变成了无约束的奖励最大化问题:

其中 $r(x, y)$ 已经包含了 KL 惩罚项。


版权声明

本文作者:ZhenWusi

本文链接:https://zhenwusi.github.io/2026/02/12/RLHF%20%E7%9A%84%E4%B8%89%E9%98%B6%E6%AE%B5%E6%B5%81%E7%A8%8B/

除特别声明外,本站所有文章均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

评论区