算法

RLHF 的三阶段流程

2026-02-23 阅读约 2.1k 字 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,yw,y_l) = \log \sigma(r\theta(x,yw) - r\theta(x,y_l)) $ 那么:

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

原目标:$ \max_\theta \mathbb{E}_D [\log \sigma(\cdots)] $

等价于:$ \min_\theta -\mathbb{E}_D [\log \sigma(\cdots)] $

于是定义:$ L_R = -\mathbb{E}_D [\log \sigma(\cdots)] $

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

因为梯度下降(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 $(模型生成的所有可能的回答序列)

将这些代入通用公式:

转化为期望形式

外层加权部分与被加权项改写如下:

前者表示“按照 $ \pi_\theta(y|x) $ 分布做加权平均”,后者是被取期望的对象。

因此,根据 $ \sum P \cdot f = \mathbb{E}_P[f] $ 得:

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

  1. 无法全量求和:语言模型的输出空间天文巨大,无法枚举 $ y $。
  2. 蒙特卡洛采样:通过采样 $ y \sim \pi_\theta $,计算

    的平均值即可近似 KL。

  3. 对齐目标函数:原始 RL 目标也是期望形式,可写成:

这样每次采样就能同时更新奖励和 KL 惩罚。

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

语言模型生成序列是离散操作,导致 $ \mathbb{E}{y \sim \pi\theta(y|x)}[r(x,y)] $ 无法直接对 $ \theta $ 求导,只能用策略梯度(REINFORCE/PPO)。


KL 约束如何变成“奖励”?

先把公式 (3) 的 KL 项写成 log-prob 形式:

代回目标:

于是可以定义新的奖励:

即论文中常见的:

其中 $ \beta $ 可被吸收到系数里。

转换后的简化目标

此时 $ r(x,y) $ 已含 KL 惩罚,成为无约束奖励最大化问题。


直接偏好优化(Direct Preference Optimization)

版权声明

本文作者:ZhenWusi

本文链接:https://zhenwusi.github.io/2026/02/23/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 许可协议。转载请注明出处!