RLHF

这是笔者初次学习RL & RLHF时的一些笔记草稿。

一、目标函数:从策略梯度到 PPO

强化学习中的两个重要函数

动作价值函数 𝑄𝜋(𝑠,𝑎) 衡量的是在给定策略 𝜋 下,智能体从状态 𝑠 开始,并采取特定动作 𝑎 后,预期能获得的累积折扣奖励(Expected Discounted Return)。(如果我在状态 𝑠 选择了动作 𝑎,然后从下一步开始严格遵循策略 𝜋,我预期能获得多少总回报?)

状态价值函数与动作价值函数的关系:

Vanilla Policy Gradient

策略梯度是强化学习中最基础的一类方法,它直接学习和优化策略 𝜋𝜃。

训练
𝜃←𝜃+𝜂∇𝐿PG
策略梯度定理

强化学习的最原始的目标是希望一个策略平均来看能够带来更大的总回报,即最大化策略 𝜋𝜃 下的累积奖励的期望值,也等价于起始状态 𝑠0 在策略 𝜋𝜃 下的状态价值函数 𝑉𝜋𝜃(𝑠0):

𝐽(𝜃)=𝑉𝜋𝜃(𝑠0)=𝔼𝜋𝜃[∑𝑡=0𝑇𝛾𝑡𝑟𝑡]≔𝔼𝜏∼𝑃𝜃(𝜏)[𝐺(𝜏)]

(上式我们用 𝐺(𝜏) 表示轨迹 𝜏 下的累积奖励 ∑𝑡=0𝑇𝛾𝑡𝑟𝑡。)

𝜋𝜃 会产生无数个发生概率各不相同的轨迹 𝜏(概率分布记为 𝑃𝜃(𝜏)),在不同轨迹下的累积奖励 𝐺(𝜏) 也不同,因此 𝐽(𝜃) 是一个非常复杂的期望值。虽然难以计算,但我们可以用大数定律(蒙特卡洛方法)无偏地近似这个期望。

理论上我们求 ∇𝐽(𝜃) 并应用梯度上升策略就可以实现最大化这个目标函数:

∇𝐽(𝜃)=∇∑𝜏𝑃𝜃(𝜏)𝐺(𝜏)=∑𝜏∇𝑃𝜃(𝜏)𝐺(𝜏)

但问题在于,一条完整轨迹 𝜏 的概率 𝑃𝜃(𝜏) 是每一步环境转移概率 𝑃(𝑠𝑡+1|𝑠𝑡,𝑎𝑡) 和智能体动作选择概率 𝜋𝜃(𝑎𝑡|𝑠𝑡) 的连乘:

𝑃𝜃(𝜏)=𝑃(𝑠0)∏𝑡=0𝑇𝑃(𝑠𝑡+1|𝑠𝑡,𝑎𝑡)𝜋𝜃(𝑎𝑡|𝑠𝑡)

由于表达式中含有未知的环境转移概率,因此即便我们解析地写出 𝑃𝜃(𝜏) 的完整形式,也因为连乘导致导数解析式中含环境转移概率,由于不知道环境转移概率,导致导数值不确定。即 ∇𝑃𝜃(𝜏) 是不可计算的。

为了巧妙避开环境转移概率及其导数,我们注意到,如果我们把 𝑃𝜃(𝜏) 改写成 log𝑃𝜃(𝜏) 的形式,就可以把连乘变成加法。由于环境转移概率与 𝜃 无关,这样它们就会从导数表达式中消失。

又注意到 ∇log𝑃=𝜕log𝑃𝜕𝜃=𝜕log𝑃𝜕𝑃𝜕𝑃𝜕𝜃=∇𝑃𝑃,我们得到了

∇𝑃(𝜏;𝜃)=𝑃(𝜏;𝜃)∇𝑃(𝜏;𝜃)𝑃(𝜏;𝜃)=𝑃(𝜏;𝜃)∇log𝑃(𝜏;𝜃)

恰巧地把 ∇𝐽(𝜃) 写成了一个期望的形式:

∇𝐽(𝜃)=𝔼𝜏∼𝑃𝜃(𝜏)[∇log𝑃𝜃(𝜏)𝐺(𝜏)]

轨迹概率可以逐步拆开为单步的形式:

∇𝐽(𝜃)=𝔼𝜏∼𝑃𝜃(𝜏)[(∑𝑡=0𝑇∇log𝜋𝜃(𝑎𝑡|𝑠𝑡))𝐺(𝜏)]

而同时,考虑到因果性(Causality),虽然 𝐺(𝜏) 是整条轨迹的回报,但我们知道在时间步 𝑡 采取的动作 𝑎𝑡,只能影响其之后的奖励,而不能影响其之前的奖励。因此,对于在时间步 𝑡 发生的事件 (𝑠𝑡,𝑎𝑡) 来说,我们只需要考虑从 𝑡 时刻开始的未来回报,即累积奖励 𝐺𝑡 即可:

∇𝐽(𝜃)=𝔼𝜏∼𝑃𝜃(𝜏)[∑𝑡=0𝑇∇log𝜋𝜃(𝑎𝑡|𝑠𝑡)𝐺𝑡]

这样我们巧妙避开了环境转移概率及其导数。我们终于可以用大数定律(蒙特卡洛方法)无偏地近似这个期望,从而求得 ∇𝐽(𝜃) 的估计值了。

我们发现这个表达式其实正好是另一个函数的梯度:

𝐿PG(𝜃)=𝔼𝜏[log𝜋𝜃(𝑎𝑡|𝑠𝑡)𝐺𝑡]

因此,在实际实现中,我们优化的目标函数就是它了。我们通过最大化这个目标函数来间接地最大化原始的累积奖励期望 𝐽(𝜃)。

上面的推导过程又称为策略梯度定理(Policy Gradient Theorem)。

优势函数

即使使用 𝐺𝑡,蒙特卡洛估计的方差仍然非常大。这是因为 𝐺𝑡 随每一次采样的轨迹而剧烈变化。高方差意味着训练不稳定,收敛速度慢。

因为对于任何不依赖于动作 𝑎𝑡 的函数 𝑏(𝑠𝑡),以下恒等式成立:

𝔼𝜋𝜃[∇log𝜋𝜃(𝑎𝑡|𝑠𝑡)𝑏(𝑠𝑡)]=0

这表明在梯度中减去 𝑏(𝑠𝑡) 不会改变梯度的期望(保持无偏性)。

为了降低方差,我们可以在不改变期望梯度 ∇𝐽(𝜃) 的前提下,引入一个基线函数 𝑏(𝑠𝑡),并将权重 𝐺𝑡 替换为 𝐺𝑡−𝑏(𝑠𝑡),移除 𝐺𝑡 中与动作选择无关、只与状态本身有关的随机波动。

理论上,能最大限度降低方差的最优基线就是状态价值函数 𝑉𝜋𝜃(𝑠𝑡)。【推导很复杂】

𝑉𝜋𝜃(𝑠𝑡) 代表在状态 𝑠𝑡 下,智能体平均能获得的长期回报。所以将 𝐺𝑡 替换为 (𝐺𝑡−𝑉𝜋𝜃(𝑠𝑡))。

总结:目标函数

因此,目标函数为

maximize 𝐿PG(𝜃)=𝔼𝑡[log𝜋𝜃(𝑎𝑡|𝑠𝑡)𝐴̂𝑡]

其中

𝐴̂𝑡=𝐺𝑡−𝑏
𝐺𝑡=∑𝑘=0𝑇−𝑡𝛾𝑘𝑟𝑡+𝑘

重要性采样

On-policy / Off-policy 与重要性采样

On-policy:学习的智能体与和环境交互的智能体是同一个。

Off-policy:学习采取行动的智能体和与环境交互的智能体是不同的。

On-policy 方法的数据利用效率低。主要原因是其数据的「新鲜度」要求极高且不可复用。

为了用旧策略 𝜋𝜃old(行为策略)的数据来计算新策略 𝜋𝜃(目标策略)下的期望,我们引入重要性采样。

重要性采样是一种统计学工具,其核心作用是允许我们使用一个不同的概率分布(Off-policy)来估计目标概率分布(On-policy)下的期望值。

假设我们有两个概率分布 𝑝(𝑥) 和 𝑞(𝑥),我们想要计算在分布 𝑝(𝑥) 下的某个函数 𝑓(𝑥) 的期望值 𝔼𝑝[𝑓(𝑥)]。如果直接从 𝑝(𝑥) 采样困难,我们可以从另一个更容易采样的分布 𝑞(𝑥) 进行采样,并通过调整权重来获得正确的期望值:

𝔼𝑝[𝑓(𝑥)]=∫𝑓(𝑥)𝑝(𝑥)d𝑥=∫𝑓(𝑥)𝑝(𝑥)𝑞(𝑥)𝑞(𝑥)d𝑥=𝔼𝑞[𝑓(𝑥)𝑝(𝑥)𝑞(𝑥)]

其中 𝜌(𝑥)=𝑝(𝑥)𝑞(𝑥) 被称为重要性权重(Importance Weight)。

Off-policy 应用: 我们因此可以引入两个分布:

通过重要性采样,我们可以用由行为策略 𝑏 采集的数据(Off-policy 数据)来估计目标策略 𝜋𝜃 的期望,从而实现 Off-policy 学习。

Off-policy 的策略梯度估计

在 off-policy 学习中,我们从与正在优化的策略不同的其他策略中采样轨迹。像近端策略优化算法(PPO)和广义近端策略优化算法(GRPO)等流行的 PG 的 off-policy 变体,会使用来自 𝜋old 的轨迹来优化当前策略。Off-policy 的策略梯度估计是

𝑔̂off-policy=1𝑁∑𝑖=1𝑁∑𝑡=0𝑇𝜋𝜃(𝑎𝑡(𝑖)|𝑠𝑡(𝑖))𝜋𝜃old(𝑎𝑡(𝑖)|𝑠𝑡(𝑖))∇𝜃log𝜋𝜃(𝑎𝑡(𝑖)|𝑠𝑡(𝑖))𝑅(𝜏(𝑖))

这看起来像是 Vanilla PG 的重要性采样版本。

TRPO 与 PPO

从 Off-policy 的策略梯度估计出发,我们可以构造新的目标函数,使得其导数即为这个公式。

TRPO 给出了一种构造方式

maximize𝜃𝔼̂𝜏[𝜋𝜃(𝑎𝑡|𝑠𝑡)𝜋𝜃old(𝑎𝑡|𝑠𝑡)𝐴̂𝑡]

使得 𝔼̂𝜏[KL(𝜋𝜃(⋅|𝑠𝑡)‖𝜋𝜃old(⋅|𝑠𝑡))]≤𝛿。

然而,TRPO 虽然有理论上的单调改进保证,但其带硬性约束的优化问题计算复杂(需要二阶近似、共轭梯度和线性搜索等)。

PPO(Proximal Policy Optimization,近端策略优化)旨在保留 TRPO 限制策略更新幅度的优点,同时大大简化优化过程。

PPO 通过修改目标函数,将 TRPO 的硬性 KL 约束替换为一种软性约束(PPO-KL)或截断机制(PPO-Clip,最常用),使其可以使用标准的一阶优化方法(如 SGD 或 Adam)进行优化。

GRPO

GRPO 是一个更通用的策略优化框架,它推广了 TRPO 和 PPO。它允许使用各种不同的距离度量(不限于 KL 散度)来定义新旧策略之间的信任区域,并提供了一种统一的、可扩展的方法来计算其梯度和更新。(关于 GRPO 的另一份介绍,可参见 HW3 的 README。)

Advantage estimation. The core idea of GRPO is to sample many outputs for each question from the policy 𝜋𝜃 and use them to compute a baseline. This is convenient because we avoid the need to learn a neural value function 𝑉𝜑(𝑠), which can be hard to train and is cumbersome from the systems perspective. For a question 𝑞 and group outputs {𝑜(𝑖)}𝑖=1𝐺∼𝜋𝜃(⋅|𝑞), let 𝑟(𝑖)=𝑅(𝑞,𝑜(𝑖)) be the reward for the 𝑖-th output. DeepSeekMath and DeepSeek R1 compute the group-normalized reward for the 𝑖-th output as

𝐴(𝑖)=𝑟(𝑖)−mean(𝑟(1),𝑟(2),…,𝑟(𝐺))std(𝑟(1),𝑟(2),…,𝑟(𝐺))+advantage_eps(Eq.28)

where advantage_eps is a small constant to prevent division by zero. Note that this advantage 𝐴(𝑖) is the same for each token in the response, i.e. 𝐴𝑡(𝑖)=𝐴(𝑖), so we drop the 𝑡 subscript in the following.

GRPO objective. The GRPO objective combines three ideas:

  1. Off-policy policy gradient;
  2. Computing advantage 𝐴(𝑖) with group normalization;
  3. A clipping mechanism, as in PPO.

The purpose of clipping is to maintain stability when taking many gradient steps on a single batch of rollouts. It works by keeping the policy 𝜋𝜃 from straying too far from the old policy.

The GRPO-Clip objective uses a min function to clip the probability ratio, preventing the policy from deviating too far from the old policy during training. Let us first write out the full GRPO-Clip objective (Eq.29):

𝐽GRPO-Clip(𝜃)=𝔼𝑞∼𝒟︀,{𝑜(𝑖)}𝑖=1𝐺∼𝜋𝜃(⋅|𝑞)[1𝐺∑𝑖=1𝐺1|𝑜(𝑖)|∑𝑡=1|𝑜(𝑖)|min(𝜋𝜃(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖))𝜋𝜃old(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖))𝐴(𝑖),clip(𝜋𝜃(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖))𝜋𝜃old(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖)),1−𝜀,1+𝜀)𝐴(𝑖))]

The hyperparameter 𝜀>0 controls how much the policy can change. To see this, we can rewrite the per-token objective in a more intuitive way. Define the function

𝑔(𝜀,𝐴(𝑖))={(1+𝜀)𝐴(𝑖)if 𝐴(𝑖)≥0(1−𝜀)𝐴(𝑖)if 𝐴(𝑖)<0

We can rewrite the per-token objective as

per-token objective=min(𝜋𝜃(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖))𝜋𝜃old(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖))𝐴(𝑖),𝑔(𝜀,𝐴(𝑖)))

We can now reason by cases. When the advantage 𝐴(𝑖) is positive, the per-token objective simplifies to

per-token objective=min(𝜋𝜃(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖))𝜋𝜃old(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖)),1+𝜀)𝐴(𝑖)

Since 𝐴(𝑖)>0, the objective goes up if the action 𝑜𝑡(𝑖) becomes more likely under 𝜋𝜃, i.e. if 𝜋𝜃(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖)) increases. The clipping with min limits how much the objective can increase. So the policy 𝜋𝜃 is not incentivized to go very far from the old policy 𝜋𝜃old.

Analogously, when the advantage is negative, the model tries to drive down 𝜋𝜃(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖)), but is not incentivized to decrease it below (1−𝜀)𝜋𝜃old(𝑜𝑡(𝑖)|𝑞,𝑜<𝑡(𝑖)).

二、Actor-Critic 架构

TL; DR

PPO 不止在目标函数上优化了策略梯度方法,还引入了新的算法框架 Actor-Critic 架构,用神经网络建模价值函数。

Actor-Critic 架构

Actor-Critic (AC) 架构是一种强化学习 (RL) 算法的通用框架,混合了策略梯度和 Q-learning(价值函数估计)的思想。Actor-Critic 在原始策略梯度架构的基础上,用神经网络建模价值函数(即「价值网络」)。

策略网络(Actor,执行者)负责学习和输出策略 𝜋(𝑎|𝑠),即在给定状态 𝑠 下采取动作 𝑎 的概率分布。训练时,通过 Actor-Critic 架构中 Critic 提供的优势函数或价值估计来更新策略,目标是提高能获得更高奖励的动作的概率:

𝐿CLIP(𝜃)=𝔼̂𝜏[min(𝑟𝑡(𝜃)𝐴̂𝑡,clip(𝑟𝑡(𝜃),1−𝜀,1+𝜀)𝐴̂𝑡)]

价值网络(Critic,评论家)负责估计价值函数,目标是准确地预测给定状态的价值 𝑉(𝑠),用于评估当前 Actor 所采取策略的好坏。这通常是一个回归问题。训练时,通过时间差分(Temporal Difference, TD)学习方法,最小化其价值估计与实际观察到的回报之间的误差:

𝐿(𝜑)=𝔼̂𝑡[(𝑉𝜑(𝑠𝑡)−𝑅̂𝑡)2]

这里,𝑅̂𝑡 是用于训练 Critic 的目标回报(Target Return)。这可以是实际的累积奖励、TD 目标、或广义优势估计(GAE)等。

因此,PPO 算法中的总损失函数即为

Minimize [−𝐿CLIP(𝜃)⏞Policy Term+𝑐1𝐿VF(𝜑)⏞Value Term+−𝑐2𝑆(𝜋𝜃)⏞Entropy Term]

熵 𝐿entropy(对应 𝑆(𝜋𝜃))是可选的正则化项,用于增加策略的探索性。它通过在策略损失中添加一个项来最大化策略 𝜋 的熵。

工作流程简述 Rollout → Reward → Advantage

  1. Actor 在当前状态 𝑠 下根据策略 𝜋 选择一个动作 𝑎。
  2. 执行动作 𝑎,环境返回奖励 𝑟 并转换到下一个状态 𝑠′。
  3. Critic 使用观察到的奖励 𝑟 和下一个状态 𝑠′ 的估计价值 𝑉(𝑠′) 来计算 TD 目标和 TD 误差(或优势函数 𝐴(𝑠,𝑎))。
  4. Critic 使用 TD 误差来更新自己的价值网络参数。
  5. Actor 使用 Critic 提供的优势函数 𝐴(𝑠,𝑎) 作为其策略梯度更新的方向和大小的指导(替代了纯 PG 中需要等到完整 Episode 结束后才能计算的蒙特卡洛回报)。

三、用 Bradley–Terry 建模人类偏好

小测考察内容:RLHF, Reward Model, PPO, DPO

TL; DR

为了把人类反馈作为奖励,我们借鉴经济学的概念,建模人类偏好,在人类偏好数据集上,使用神经网络建模奖励(回报)函数,最终形成了用于 RLHF 的 PPO 框架。

人工设计奖励函数的缺陷

在上文「Actor-Critic 架构」一节中,用于训练 Critic 的目标回报 𝑅̂𝑡 是采用人工设计的 TD 和 GAE 进行估计的。

TD 和 GAE 是人工设计的用于解决信用分配问题和优化价值估计的算法机制,但在处理复杂、主观、或安全目标时,面对这些开放性问题,设计一个很好的奖励函数是很困难的。

稀疏奖励问题(Addressing Sparse Rewards)
在许多任务中,只有在完成任务的终点才能获得奖励(稀疏奖励)。这使得 Critic 很难学习,因为大多数状态的 TD 误差都是零。
好处:奖励模型(RM)可以为每个时间步或每个输出 token 提供一个连续的、密集的奖励信号 𝑟̂,即使这个信号是基于人类对整个轨迹的评价。这个密集的信号能显著提高 Critic 网络的训练效率。

奖励模型

我们可以使用人类反馈来训练一个奖励模型,来替代简单奖励或人工设计价值函数。奖励模型是一个独立的神经网络,它的目标是学习人类偏好的评估函数 𝑟𝜃(𝑥,𝑦)。

奖励模型通常由 LLM 主体和一个价值头(value head)组成。这意味着它复用了 LLM 强大的理解能力来评估文本。

Bradley–Terry 与奖励模型训练

然而,人类反馈反映的是人类的意图,我们无法直接建模意图本身。受到基于偏好的强化学习(Preference-based RL, PbRL)的启发,我们转向建模人类的偏好,并期望将人类的偏好数据转化为一个评分器。

我们需要基于偏好排序数据而非直接的评分,来训练一个需要直接给出分数的奖励模型。训练的目标是要迫使 RM 为人类偏好的回答给出更高的分数,在此情况下,这个目标就可以转化为提高「模型觉得人类偏好的回答更好」事件发生的概率:

𝐿𝑅(𝑟𝜃)=−𝔼(𝑥,𝑦0,𝑦1)∼𝐷[log𝑃(𝑦0≻𝑦1|𝑥)]

Bradley–Terry 模型可以在给定两个对象的效用分数的情况下,计算最终偏好结果的概率分布,从而把人类偏好和效用分数值联系在一起。具体而言,下面的公式表示一个人觉得 𝑖 比 𝑗 好的概率。其中 𝑠𝑖 和 𝑠𝑗 是「效用函数」——在 RM 中,就是模型 𝑟𝜃 的输出(奖励分数):

𝑃(𝑖>𝑗)=exp(𝑠𝑖)exp(𝑠𝑖)+exp(𝑠𝑗)

如果将 Bradley–Terry 模型应用到人类对模型两个输出 A 与 B 的偏好上,我们得到这样一个具体的形式

𝑃(𝐴>𝐵)=11+𝑒𝑟𝜃𝑀(𝐵)−𝑟𝜃𝑀(𝐴)=𝜎[𝑟𝜃𝑀(𝐴)−𝑟𝜃𝑀(𝐵)]

它表示回答 𝐴 比回答 𝐵 好的概率,依赖于两个回答分别的「效用值」。这个值就可以是奖励模型给 𝐴 和 𝐵 打的分数 𝑟𝜃𝑀(𝐴) 和 𝑟𝜃𝑀(𝐵) 了。

从而,「『模型觉得人类偏好的回答更好』事件的概率」就被 Bradley–Terry 模型建模了。由于我们可以显式地计算这个事件的概率,因此我们可以使用负对数似然,从而损失函数可以设计为

𝐿𝑅(𝑟𝜃)=−𝔼(𝑥,𝑦0,𝑦1,𝑖)∼𝐷[log(𝜎(𝑟𝜃(𝑥,𝑦𝑖)−𝑟𝜃(𝑥,𝑦1−𝑖)))](★)

其中:

通过最小化这个损失函数,迫使 RM 为人类偏好的回答 𝑦𝑖 给出更高的分数,从而使其输出的分数差能够准确预测人类的偏好概率。

RLHF Pipeline

上文「策略梯度定理」一节提到,强化学习的最原始的目标是希望一个策略平均来看能够带来更大的总回报,即

𝐽(𝜃)=𝑉𝜋𝜃(𝑠0)=𝔼𝜏∼𝑃𝜃(𝜏)[𝐺(𝜏)]

其中 𝐺(𝜏) 表示轨迹 𝜏 下的累积奖励。在 RLHF 框架下,𝐺(𝜏)≔𝑟𝜑(𝑥,𝑦)。结合 KL-正则化,我们可以设计出下面的 RLHF 损失函数

max𝜋𝜃𝔼𝑥∼𝐷,𝑦∼𝜋𝜃(𝑦|𝑥)[𝑟𝜑(𝑥,𝑦)]−𝛽KL[𝜋𝜃(𝑦|𝑥)‖𝜋ref(𝑦|𝑥)]

其中 𝜋ref 用于约束当前策略 𝜋𝜃 的最终分布,防止模型遗忘,是一个人工构造的正则化项。

整个基于人类反馈的强化学习的流程,即包括:

四、Direct Preference Optimization

TL; DR

PPO 首先基于提示和人类偏好数据集训练一个奖励模型,然后使用强化学习找到最大化该奖励模型的策略。

DPO 通过数学推导证明,最优策略 𝜋*(𝑦|𝑥) 与参考模型 𝜋ref(𝑦|𝑥) 之间的对数比,与奖励 𝑟(𝑥,𝑦) 存在直接的解析关系。DPO 利用这一关系,直接构造了一个损失函数,允许模型 𝜋𝜃 在没有显式奖励模型的情况下,通过最大化高质量回答相对于低质量回答的对数概率比(基于 𝜋ref),一步到位地优化策略,从而规避了训练奖励模型和使用复杂 RL 算法带来的训练不稳定性。

DPO 在优化人类偏好的同时避免了强化学习。DPO 通过一个简单的分类目标,直接优化最符合偏好的策略,拟合一个隐式奖励模型,该模型的最优策略可以通过封闭形式直接提取。

方法训练步骤模型训练方式优点缺点
RLHF先训练奖励模型,再使用 PPO 优化策略𝜋𝜃, 𝜋ref, 𝑟𝜑, 𝑉𝜑强化学习和在线采样充分利用人类偏好,上限潜力较高资源消耗大、训练不稳定、超参数敏感
DPO直接利用偏好数据训练 Actor 模型𝜋𝜃, 𝜋ref类似 SFT 监督学习流程简化、训练稳定、资源消耗低性能提升上限可能低于 RLHF

Derive the DPO Objective

这一节主要讲解 DPO 的推导过程。

Theoretical Analysis of RLHF Objective

在大规模语言模型对齐中,我们希望利用人类反馈强化学习(RLHF)来优化模型输出。输入 𝑥 来自数据集 𝒟︀,模型生成回答 𝑦;待训练的模型记为 𝜋(𝑦|𝑥),而参考模型记为 𝜋ref(𝑦|𝑥)(通常为 SFT 模型),同时引入奖励函数 𝑟(𝑥,𝑦) 衡量回答质量。在上文「RLHF Pipeline」一节中,我们推导了 RLHF 的目标是

max𝜋𝔼𝑥∼𝒟︀,𝑦∼𝜋(𝑦|𝑥)[𝑟(𝑥,𝑦)]−𝛽𝐷KL(𝜋(𝑦|𝑥)‖𝜋ref(𝑦|𝑥))

其中 𝛽 为调节奖励与参考模型偏差的超参数。利用 KL 散度的定义

𝐷KL(𝜋(𝑦|𝑥)‖𝜋ref(𝑦|𝑥))=𝔼𝑦∼𝜋(𝑦|𝑥)(log𝜋(𝑦|𝑥)𝜋ref(𝑦|𝑥))

式 (1) 可重写为

max𝜋𝔼𝑥∼𝒟︀,𝑦∼𝜋(𝑦|𝑥)(𝑟(𝑥,𝑦)−𝛽log𝜋(𝑦|𝑥)𝜋ref(𝑦|𝑥))

将上式转换为最小化问题并除以 𝛽 即得

min𝜋𝔼𝑥∼𝒟︀,𝑦∼𝜋(𝑦|𝑥)(log𝜋(𝑦|𝑥)𝜋ref(𝑦|𝑥)−1𝛽𝑟(𝑥,𝑦))

假设存在一个最优策略分布 𝜋*(𝑦|𝑥) 使 (4) 式全局最优,利用拉格朗日乘子法求得最优策略分布满足如下形式。基于变分法,可令

𝜋*(𝑦|𝑥)=1𝑍(𝑥)𝜋ref(𝑦|𝑥)exp(1𝛽𝑟(𝑥,𝑦))

其中配分函数 𝑍(𝑥) 为了实现最优策略分布的归一化,定义为

𝑍(𝑥)=∑𝑦𝜋ref(𝑦|𝑥)exp(1𝛽𝑟(𝑥,𝑦))

注意到:

对 (5) 式取对数得到

log𝜋*(𝑦|𝑥)=log𝜋ref(𝑦|𝑥)+1𝛽𝑟(𝑥,𝑦)−log𝑍(𝑥)

反推奖励函数,发现其与最优策略的对数比有关

𝑟(𝑥,𝑦)=𝛽(log𝜋*(𝑦|𝑥)𝜋ref(𝑦|𝑥)+log𝑍(𝑥))
Direct Preference Optimization

这一节很重要。在 PPO 等 RL 方法中,我们通过预先训练一个奖励模型 𝑟𝜑,通过梯度方法近似下面的解析解找到该奖励模型条件下的最优策略 𝜋*:

log𝜋𝜃*(𝑦|𝑥)=log𝜋ref(𝑦|𝑥)+1𝛽𝑟𝜑*(𝑥,𝑦)−log𝑍(𝑥)

DPO 引入了对奖励模型的另一种参数化方法。因为我们最终需要的是这个最优策略,那不妨假设我们能够不依赖奖励模型就找到这样一个最优策略。我们先把要优化的策略参数化,通过找到最优化的策略,导出适合这个最优策略的奖励模型22 因为我们最终并不真的需要这样一个奖励模型了,它在这里更多是一个理论分析的概念,所以我们称为「隐式」奖励模型。,即

𝑟𝜃(𝑥,𝑦)=𝛽(log𝜋𝜃(𝑦|𝑥)𝜋ref(𝑦|𝑥)+log𝑍(𝑥))
DPO Loss

将上式代入上文「Bradley–Terry 与奖励模型训练」中标为 ★ 的损失函数,在成对比较中,对于相同输入 𝑥,两个回答 𝑦𝑤 和 𝑦𝑙 均包含相同的 log𝑍(𝑥) 项,因此在计算奖励差值时,该项会被消去。这样,我们就可以把 RLHF 损失函数简化为只与 𝜋𝜃 有关了。

我们最终得到 DPO 的损失函数

minimize 𝐿DPO(𝜋𝜃,𝜋ref)=−𝔼(𝑥,𝑦𝑤,𝑦𝑙)∼𝒟︀(log𝜎(𝛽log𝜋𝜃(𝑦𝑤|𝑥)𝜋ref(𝑦𝑤|𝑥)−𝛽log𝜋𝜃(𝑦𝑙|𝑥)𝜋ref(𝑦𝑙|𝑥)))

该损失函数针对待训练 Actor 模型 𝜋𝜃 而设,通过比较其在高质量回答 𝑦𝑤 与低质量回答 𝑦𝑙 上、相对于参考模型 𝜋ref 的对数概率比来区分好坏回答。

直观地看这个损失函数的合理性:

图 1 DPO 损失的梯度:提高偏好回答的概率、压低不偏好回答的概率。

从 ∇𝐿DPO 来看:

DPO 的理论贡献

Your Language Model Is Secretly a Reward Model.

Instability of Actor-Critic Algorithms.