# 概述

近年来,大语言模型 LLM 经历了飞速发展。从早期以语言建模为核心的预训练范式,到指令微调(Instruction Tuning)、人类偏好对齐(Alignment),再到面向复杂任务的推理能力强化,模型能力的边界不断被拓展。如今,大模型的目标已经不再局限于预测下一个 Token,而是在真实场景中展现出更强的指令遵循能力、推理能力、安全性以及与人类价值观的一致性。

随着模型能力需求的不断提升,仅依赖监督微调(SFT)已难以充分优化模型行为。相比于关注 “正确答案是什么” 的监督学习,强化学习更加关注 “模型生成结果是否足够好”,并通过奖励信号持续优化策略。因此,强化学习逐渐成为大模型后训练阶段的重要组成部分。

从基于人类反馈的强化学习,到直接偏好优化、基于规则奖励的推理强化学习,以及近年来推动推理模型发展的各类 RL 算法,其核心目标始终一致:利用偏好或奖励信号,引导模型朝着更符合任务目标和人类期望的方向持续优化。

回顾博客,我们介绍了 PPO 在 RLHF 中的基本原理及应用。本文将在此基础上,对近年来大模型训练与对齐过程中具有代表性的强化学习算法进行系统梳理,分析其核心思想、优化目标、优缺点及适用场景,并讨论其在当前大模型训练体系中的发展脉络与演进趋势。

本文并不以严格的数学推导为主线,而是更关注算法背后的核心思想、计算流程和工程实现。希望读者能够从 “大模型为什么需要这个算法、它解决了什么问题、实际如何落地” 三个角度理解近年来强化学习技术的发展脉络。


# PPO 近端策略优化

作为大模型强化学习对齐技术的开山之作,PPO(Proximal Policy Optimization)算法在大模型后训练中具有里程碑意义,在很长一段时间内都是工业界的标准范式。

关于 PPO 的原理、推导,读者可以参考之前的博客。强烈建议读者在阅读本文前,先完整阅读该博客,以便更好地理解 PPO 在大模型训练中的应用。

# 模型架构

标准的 PPO 实现中,采用了 Actor-Critic 结构,包含一个策略网络(Actor)和一个价值网络(Critic)。在每轮训练中,Actor 负责根据当前策略生成动作(在大模型中就是生成回答),Critic 则负责评估当前状态的价值,并计算 Advantage,用于指导策略更新。

PPO 的核心思想是在优化目标中引入对新旧策略差异的约束,通过限制策略更新幅度(通常体现为对 KL 散度或概率比值的约束),避免策略在单次更新中发生过大的变化,从而提升训练的稳定性和样本利用效率。

而在大模型 PPO 训练中,系统通常需要同时维护四个模型,这带来了巨大的计算开销和工程复杂度:

模型 说明 描述 是否更新
策略模型 当前正在训练的大语言模型,记为 πθ\pi_\theta 负责根据提示词生成回答
参考模型 一般是冻结的 SFT 模型,记为 πref\pi_{\text{ref}} 用于计算 KL 惩罚,防止策略模型偏离原始语言模型太远
奖励模型 由人类偏好数据训练得到,记为 rψ(x,y)r_\psi(x,y) 对生成结果进行质量评估并输出奖励分数
价值模型 用于估计当前状态的价值 Vϕ(st)V_\phi(s_t) 负责使用 GAE 估计价值,计算动作优势

此外,从算法实现角度来看,PPO 在训练过程中通常还需要维护一个旧策略模型,记为 πθold\pi_{\theta_{\text{old}}}。该模型保存策略更新前的参数,用于生成训练数据,并在优化阶段计算新旧策略之间的概率比值。通过对该比值进行裁剪,PPO 能够有效限制策略更新幅度,防止训练过程出现不稳定现象。

需要注意的是,旧策略模型通常不是一个长期独立维护的模型,而是在每轮 PPO 更新开始时由当前策略模型复制得到。

# 训练目标

PPO 论文中提出两种对 TRPO 进行近似的优化目标:PPO-Clip 和 PPO-Penalty。前者通过裁剪概率比值来限制策略更新,后者则通过添加 KL 惩罚项来约束新旧策略之间的差异。在大模型强化学习中,PPO-Clip 由于其简单高效的实现方式,成为工业界的首选。

如下是 PPO 中策略模型的优化目标函数:

JPPO(θ)=E[min(rt(θ)A^t, clip(rt(θ),1ε,1+ε)A^t)]J_{PPO}(\theta) = \mathbb{E}\left[ \min\left( r_t(\theta)\hat{A}_t,\ \operatorname{clip}\left( r_t(\theta), 1-\varepsilon, 1+\varepsilon \right)\hat{A}_t \right) \right]

其中,rt(θ)r_t(\theta) 是新旧策略在当前状态下生成动作的概率比值,A^t\hat{A}_t 是 Advantage 的估计值,ε\varepsilon 是裁剪参数。$$\hat {A}_t$$ 通过 GAE 公式,结合实际奖励和价值模型估计,计算出每个时间步的优势。

在 Actor-Critic 框架下,PPO 还需要同时训练价值模型:

LV(ϕ)=Et[(Vϕ(st)R^t)2]L_V(\phi) = \mathbb{E}_t \left[ \left( V_\phi(s_t) - \hat{R}_t \right)^2 \right]

其中,Vϕ(st)V_\phi(s_t) 是价值模型对状态 sts_t 的价值估计,R^t\hat{R}_t 是由奖励信号和 GAE 计算得到的目标回报。

综上,实际训练时 PPO 通常会联合优化策略损失和价值损失:

L(θ,ϕ)=JPPO(θ)+cvLV(ϕ)ceH(πθ)L(\theta,\phi) = -J_{PPO}(\theta) + c_v L_V(\phi) - c_e \mathcal{H}(\pi_\theta)

其中,cvc_v 用于控制价值损失的权重,H(πθ)\mathcal{H}(\pi_\theta) 是熵奖励项,用于鼓励策略保持一定探索性。

# 训练流程

PPO 算法流程示意图

上图展示了大模型 PPO 训练的整体流程。每个训练循环主要包含以下几个步骤:

  1. 采样 Prompt 并生成回答:从 Prompt 数据集中采样一批输入,利用当前策略模型生成 Response。在生成过程中,需要保存每个 Token 对应的 log probability,作为后续 PPO 更新时的旧策略概率。
  2. 奖励模型打分:将 Prompt 和生成的 Response 输入奖励模型,得到一个奖励分数,用于衡量回答与人类偏好的匹配程度。奖励通常作用于整个回答,而非单个 Token。因此工程实现中常见的做法是:将奖励模型分数主要加在序列最后一个 token 上,再结合 KL 惩罚构造每个时间步的奖励。
  3. 计算 KL 惩罚:为了防止模型过度追求奖励模型分数而偏离原有能力,需要引入参考模型。通过比较当前策略与参考模型在生成序列上的概率差异,计算 KL 惩罚,并将其加入奖励中形成最终优化目标。
  4. 计算 Advantage:利用价值模型估计序列每一步的状态价值,并结合奖励信号通过 GAE 等方法计算动作优势,衡量各生成动作的相对优劣。
  5. PPO 更新模型:根据生成时保存的旧策略概率、奖励信号以及 Advantage,利用 PPO-Clip 目标更新策略模型,同时更新价值模型。PPO 通过裁剪机制限制策略变化幅度,保证训练过程稳定。

算法流程伪代码如下:

算法:PPO(RLHF 语境)
输入:策略模型 π_θ,参考模型 π_ref(冻结),奖励模型 R(冻结),价值模型 V_φ
超参:clip_ratio ε,γ,λ(GAE),β_KL
for iteration = 1, 2, ... do
    从 prompt 数据集中采样一批 prompt
    使用当前策略模型生成 response,并记录每个 token 的 log probability
    使用奖励模型给每个 prompt-response pair 打分
    使用参考模型计算同一批 response 的 log probability,并构造 KL 惩罚
    使用价值模型估计每个 token 位置的状态价值
    根据奖励和价值估计计算 Advantage
    for epoch = 1 to K do
        使用 PPO-Clip 更新策略模型
        更新价值模型
        如果平均 KL 过大,则提前停止本轮更新
    end for
    将当前策略作为下一轮采样的旧策略
end for

# 大模型 KL 惩罚

上述训练流程中,有一个与传统 PPO 算法不同的关键点:即除了当前策略与采样旧策略之间的概率比值约束外,还引入了一个额外的 KL 惩罚项,用于约束当前策略与参考模型之间的差异。这个参考模型通常是 PPO 训练前初始化的 SFT 模型。

传统 PPO 训练中,主要关注当前策略与旧策略之间的差异,引入早停机制来防止策略更新过大。而在大模型训练中,除了关注新旧策略之间的变化,还需要额外关注当前策略与原始 SFT 模型之间的差异。这是因为:

  • 防止 Reward Hacking:训练中的奖励模型仅仅是真实人类偏好的近似拟合。如果任由策略模型无约束地最大化奖励分数,模型极易找到奖励模型的漏洞,生成表面上得分极高,但实际包含逻辑错误、语无伦次或过度迎合的回答。
  • 避免基础能力退化: 初始的 SFT 模型已经具备了扎实的语言表达、指令跟随和基础世界知识。如果 PPO 更新幅度过大,模型会为了迎合特定的对齐偏好而产生灾难性遗忘,破坏原有的通用能力。

为了实现这一约束,常见的引入方案有:第一种是在 PPO 目标函数中直接添加 KL 惩罚项。第二种将 KL 散度作为一种动态的负向奖励,与奖励模型的评分合并,形成最终的奖励信号。这是目前最主流且更符合强化学习逻辑的方案。


# DPO 直接偏好优化

# 概述

标准 RLHF-PPO 流程通常包含三个阶段:首先使用高质量指令数据进行监督微调,得到 SFT 模型;随后利用人类偏好数据训练奖励模型;最后使用 PPO 让策略模型最大化奖励模型给出的分数,并通过 KL 约束限制策略模型相对 SFT 参考模型的偏移。

上述流程虽然直观,但工程成本较高。在 PPO 阶段,训练系统通常需要同时维护策略模型、参考模型、奖励模型和价值模型,还需要执行在线采样、奖励打分、KL 惩罚计算、Advantage 估计以及多轮策略更新。对于参数规模较大的语言模型而言,这不仅带来显著的显存和计算开销,也提高了训练系统的实现复杂度。

DPO(Direct Preference Optimization,直接偏好优化)是近年来大模型偏好对齐中较有代表性的方法之一。与 RLHF-PPO 相比,DPO 的核心变化在于:它不再显式训练奖励模型,也不引入价值模型和在线强化学习采样,而是直接利用成对偏好数据更新语言模型参数

所谓人类偏好数据,通常是指在同一个 prompt 下,给定两条候选回答:其中一条是人类更偏好的回答,记为 chosen response;另一条是不被偏好的回答,记为 rejected response。

RLHF VS DPO

从思想上看,DPO 仍然保留了 RLHF 中最大化偏好奖励的基本思想,只是将奖励函数与最优策略之间的关系解析化,从而把原本需要奖励模型和 PPO 求解的问题,改写为一个可以直接训练语言模型的监督式目标。

# 数学推导

# Bradley-Terry 模型

Bradley-Terry 模型是一个用于分析配对比较数据的概率模型,即基于成对比较的结果来估计对象的能力值。它最初用于体育比赛中对选手或队伍的能力进行建模,但在机器学习中也被广泛应用于偏好学习和排序问题。

例如下面的表格有 3 个对象 A、B、C,它们之间的比较结果如下:

结果 A 对 B B 对 C A 对 C
4 6 3
7 5 4

Bradley-Terry 模型假设每个对象 ii 都有一个正的能力参数 θi\theta_i。对于任意两个对象 iijj,模型定义它们之间的胜率为:

P(ij)=θiθi+θjP(i \succ j) = \frac{\theta_i}{\theta_i + \theta_j}

我们的目标是根据配对数据来估计每个对象的能力参数 θi\theta_i。因此需要最大化上述配对胜负情况的对数似然函数,公式如下:

maxθlogP(dataθ)=maxθ[ijnijlogPθ(ij)+jinjilogPθ(ji)]\max_{\theta} \log P(\mathrm{data}\mid \theta)=\max_{\theta}\left[\sum_{i \succ j} n_{ij}\log P_{\theta}(i \succ j)+\sum_{j \succ i} n_{ji}\log P_{\theta}(j \succ i)\right]

其中 nijn_{ij} 表示对象 ii 在与对象 jj 的比较中获胜的次数,njin_{ji} 表示对象 jj 在与对象 ii 的比较中获胜的次数。

# 奖励模型的优化目标

大模型强化学习训练中的奖励模型设计,实际上可以理解为 Bradley-Terry 模型的一个特例。给定 prompt xx,奖励模型 rψ(x,y)r_\psi(x,y) 对回答 yy 进行打分。对于同一个 prompt 下的两个回答 ywy_wyly_l,按照 Bradley-Terry 模型,ywy_w 优于 yly_l 偏好概率可以写成:

Pψ(ywylx)=exp(rψ(x,yw))exp(rψ(x,yw))+exp(rψ(x,yl))=11+exp(rψ(x,yl)rψ(x,yw))=11+exp((rψ(x,yw)rψ(x,yl)))=σ(rψ(x,yw)rψ(x,yl)).\begin{aligned} P_\psi(y_w \succ y_l \mid x) &= \frac{\exp(r_\psi(x,y_w))}{\exp(r_\psi(x,y_w))+\exp(r_\psi(x,y_l))} \\ &= \frac{1}{1+\exp(r_\psi(x,y_l)-r_\psi(x,y_w))} \\ &= \frac{1}{1+\exp(-(r_\psi(x,y_w)-r_\psi(x,y_l)))} \\ &= \sigma(r_\psi(x,y_w)-r_\psi(x,y_l)). \end{aligned}

exp\exp 函数用于确保奖励分数为正数,而 σ()\sigma(\cdot) 是 sigmoid 函数。基于偏好数据集 D\mathcal{D},奖励模型的优化目标是最大化偏好概率的对数似然:

maxψE(x,yw,yl)D[logPψ(ywylx)]=maxψE(x,yw,yl)D[logσ(rψ(x,yw)rψ(x,yl))]\max_\psi\mathbb{E}_{(x,y_w,y_l)\sim \mathcal{D}}\left[\\log P_\psi(y_w \succ y_l \mid x)\right] =\max_\psi\mathbb{E}_{(x,y_w,y_l)\sim \mathcal{D}}\left[\log \sigma(r_\psi(x,y_w)-r_\psi(x,y_l))\right]

或许有人会疑惑,DPO 不是直接优化偏好数据吗?为什么还要引入奖励模型?事实上,DPO 将对奖励模型的显示训练,转化为对策略模型的直接优化。这里我们只需要记住奖励模型优化目标的表达式,接下来继续推导 DPO 策略模型的优化目标。

# 策略模型的优化目标

回到 RLHF 中常见的 KL 约束优化目标。给定 prompt xx,策略模型 π(yx)\pi(y\mid x) 生成回答 yy,参考模型为 πref(yx)\pi_{\mathrm{ref}}(y\mid x),奖励函数为 r(x,y)r(x,y)。优化目标可以写成:

maxπ ExD,yπ[r(x,y)]βDKL[π(yx)πref(yx)]\max_{\pi}\ \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi}\left[r(x,y)\right] -\beta D_{\mathrm{KL}}\left[\pi(y\mid x)\,\|\,\pi_{\mathrm{ref}}(y\mid x)\right]

其中,β\beta 是 KL 惩罚系数,用于控制策略模型偏离参考模型的程度。β\beta 越大,策略更新越保守;β\beta 越小,模型越倾向于追求奖励函数给出的高分回答。

代入 KL 散度的表达式,逐步推导可得:

maxπ ExD,yπ[r(x,y)βlogπ(yx)πref(yx)]=minπ ExD,yπ[logπ(yx)πref(yx)1βr(x,y)]=minπExD,yπ[logπ(yx)πref(yx)logexp(1βr(x,y))]=minπExD,yπ[logπ(yx)πref(yx)exp(1βr(x,y))]\max_{\pi}\ \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi}\left[ r(x,y)-\beta \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}\right]\\ = \min_{\pi}\ \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi}\left[ \log \frac{\pi(y \mid x)}{\pi_{\mathrm{ref}}(y \mid x)}-\frac{1}{\beta}r(x,y)\right]\\ = \min_{\pi} \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi} \left[ \log \frac{\pi(y|x)}{\pi_{\mathrm{ref}}(y|x)} - \log \exp\left(\frac{1}{\beta} r(x,y)\right) \right]\\ = \min_{\pi} \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi} \left[ \log \frac{\pi(y|x)}{\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta} r(x,y)\right)} \right]

接下来,我们引入一个归一化量 Z(x)Z(x),它是对所有可能回答的加权和,仅与 prompt xx 与参考模型 πref\pi_{\mathrm{ref}} 相关:

Z(x)=yπref(yx)exp(1βr(x,y))Z(x) = \sum_y \pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta} r(x,y)\right)

代入上述目标表达式后,可得到:

minπExD,yπ[logπ(yx)1Z(x)πref(yx)exp(1βr(x,y))logZ(x)]\min_{\pi} \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi} \left[ \log \frac{\pi(y|x)}{\frac{1}{Z(x)} \pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta} r(x,y)\right)} - \log Z(x) \right]

其中分母部分展开后记作 π(yx)\pi^*(y|x),仅与 prompt xx 和参考模型 πref\pi_{\mathrm{ref}} 相关:

1Z(x)πref(yx)exp(1βr(x,y))=πref(yx)exp(1βr(x,y))yπref(yx)exp(1βr(x,y))=π(yx)\frac{1}{Z(x)}\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)= \frac{\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)} {\sum_y \pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}=\pi^*(y|x)

因此上述表达式可以简化为:

minπExD,yπ[logπ(yx)π(yx)logZ(x)]\min_{\pi} \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi} \left[\log \frac{\pi(y|x)}{\pi^*(y|x)} - \log Z(x)\right]

由于 Z(x)Z(x) 仅与 prompt xx 和参考模型 πref\pi_{\mathrm{ref}} 相关,而不依赖于当前策略模型 π\pi,因此在优化过程中可以忽略它。最终,DPO 的优化目标可以简化为:

minπExD,yπ[logπ(yx)π(yx)]\min_{\pi} \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi} \left[\log \frac{\pi(y|x)}{\pi^*(y|x)}\right]

不难发现,这个表达式可以看成是一个 KL 散度的形式,因此该目标的最优解是:

π(yx)=π(yx)=1Z(x)πref(yx)exp(1βr(x,y))\pi(y|x) = \pi^*(y|x) = \frac{1}{Z(x)}\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)

上述式子移项处理后,得到:

r(x,y)=βlnπ(yx)πref(yx)+βlnZ(x)r(x,y) = \beta \ln \frac{\pi(y|x)}{\pi_{\mathrm{ref}}(y|x)} + \beta \ln Z(x)

这一等式是 DPO 推导的关键。它表明,在 KL 约束 RLHF 目标下,一个策略模型相对于参考模型的概率变化,可以被解释为一种隐式奖励。因此,将训练奖励模型所用到的损失函数代入到上述公式,可以得到 DPO 策略函数训练的损失函数:

lnσ(r(x,yw)r(x,yl))=lnσ(βlnπ(ywx)πref(ywx)+βlnZ(x)βlnπ(ylx)πref(ylx)βlnZ(x))-\ln \sigma\left(r(x,y_w) - r(x,y_l)\right) = -\ln \sigma\left(\beta \ln \frac{\pi(y_w|x)}{\pi_{\mathrm{ref}}(y_w|x)}+ \beta \ln Z(x)- \beta \ln \frac{\pi(y_l|x)}{\pi_{\mathrm{ref}}(y_l|x)}- \beta \ln Z(x)\right)

简化后得到最终的损失函数为:

LDPO=lnσ(βlnπ(ywx)πref(ywx)βlnπ(ylx)πref(ylx))L_{DPO} = -\ln \sigma\left(\beta \ln \frac{\pi(y_w|x)}{\pi_{\mathrm{ref}}(y_w|x)} - \beta \ln \frac{\pi(y_l|x)}{\pi_{\mathrm{ref}}(y_l|x)}\right)

如此,就将奖励模型的训练嵌入到策略模型训练过程中,直接利用偏好数据优化策略模型,而不需要再显式训练奖励模型。

# 训练流程

DPO 的训练流程比 PPO 更接近监督微调。训练数据不需要由当前策略在线采样,而是直接使用静态偏好数据集 D={(x,yw,yl)}\mathcal{D}=\{(x,y_w,y_l)\}。训练过程中通常只需要两个模型:一个是待更新的策略模型 πθ\pi_\theta,另一个是冻结的参考模型 πref\pi_{\mathrm{ref}}。参考模型一般由 SFT 模型复制得到,并在训练过程中保持参数不变。

具体而言,DPO 的训练过程可以概括为以下步骤:

  1. 构造偏好样本:从偏好数据集中读取三元组 (x,yw,yl)(x,y_w,y_l),其中 ywy_w 表示更优回答,yly_l 表示较差回答。
  2. 计算策略模型概率:将 (x,yw)(x,y_w)(x,yl)(x,y_l) 分别输入当前策略模型,计算两段回答的序列 log probability。
  3. 计算参考模型概率:使用冻结参考模型计算同样两段回答的序列 log probability。
  4. 计算损失函数:根据 DPO 损失函数公式,计算偏好间隔 Δθ\Delta_\theta 并求得损失 LDPOL_{DPO}
  5. 更新策略模型:最小化 DPO 损失函数,仅更新策略模型参数。参考模型始终保持冻结。

算法流程伪代码如下:

算法:DPO(Direct Preference Optimization)
输入:策略模型 π_θ,参考模型 π_ref(冻结),偏好数据集 D={(x, y_w, y_l)}
超参:KL 系数 β
for epoch = 1, 2, ... do
    从偏好数据集 D 中采样一批三元组 (x, y_w, y_l)
    使用策略模型 π_θ 计算 log π_θ(y_w|x) 和 log π_θ(y_l|x)
    使用参考模型 π_ref 计算 log π_ref(y_w|x) 和 log π_ref(y_l|x)
    计算偏好间隔 Δ_θ = β[(log π_θ(y_w|x)-log π_ref(y_w|x))-(log π_θ(y_l|x)-log π_ref(y_l|x))]
    计算损失 L_DPO = -log σ(Δ_θ)
    反向传播并更新策略模型 π_θ
end for

# 比较分析

DPO 把 KL 约束下的 RLHF 目标转化为一个可直接优化的偏好学习目标。相比 PPO,DPO 不需要显式奖励模型、价值模型和在线 rollout,因此训练链路更短,实现难度更低,也更容易在已有 SFT 训练框架上复用。

二者的差异可以概括如下:

对比维度 PPO-RLHF DPO
训练信号 奖励模型输出的标量奖励 成对偏好数据
奖励模型 需要显式训练并在 PPO 阶段调用 不需要显式训练
价值模型 需要,用于估计 Advantage 不需要
数据来源 通常依赖当前策略在线采样 使用静态偏好数据集
工程复杂度 较高,需要维护多模型和 rollout 流程 较低,接近 SFT 训练流程
训练稳定性 对超参、奖励模型和采样分布较敏感 通常更稳定,复现难度较低

DPO 显著降低了训练成本,避免了 PPO 中复杂的 Actor-Critic 架构,也不需要维护奖励模型和价值模型,训练过程可以直接建立在常规语言模型监督微调框架之上。其次,DPO 使用静态偏好数据进行优化,不涉及在线采样带来的分布漂移,也不需要进行 Advantage 估计,因此训练过程通常更加稳定。再次,DPO 直接最大化偏好数据的似然,减少了偏好数据到奖励模型,再由奖励模型到策略模型的中间误差。

不过,DPO 的简洁性也意味着它存在一定边界。首先,DPO 本质上是离线偏好优化方法,其训练效果高度依赖已有偏好数据的覆盖范围。如果数据集中缺少某类任务、推理路径或高质量回答模式,模型很难通过训练主动探索这些行为。相比之下,PPO 可以在训练过程中不断从当前策略采样新回答,并利用奖励模型对新样本进行评价。

其次,DPO 对偏好数据质量较为敏感。如果 chosen 与 rejected 的差异较弱,或者标注偏好本身存在系统性偏差,DPO 会直接把这些偏差写入策略模型。特别是在偏好数据规模较小或来源单一的情况下,模型可能过拟合局部偏好模式,表现为回答风格趋同、过度迎合或泛化能力下降。

总体而言,DPO 更适合用于已有较高质量偏好数据、希望低成本稳定提升模型对齐能力的场景。PPO 则更适合需要在线探索、奖励可持续更新或任务反馈较复杂的场景。二者并非简单的替代关系,代表了大模型对齐中两种不同的优化路线。


# GRPO 组相对策略优化

# 概述

标准 PPO 在大模型 RLHF 中通常需要维护策略模型、参考模型、奖励模型和价值模型。其中,价值模型用于估计每个状态(通常是每个 token 位置)的价值,并进一步计算 Advantage。然而在大语言模型场景中,价值模型会带来两个问题:

  • 价值模型通常与策略模型规模接近,如果策略模型是个几十亿甚至上百亿参数的大模型,那么额外训练和维护一个价值模型会显著增加显存占用、通信成本和训练复杂度。
  • 大模型生成任务中的奖励通常是序列级别的。例如在数学推理任务中,一个回答往往只有在最终答案生成之后才能判断对错。在人类偏好对齐任务中,奖励模型通常也是对完整 prompt-response pair 给出一个分数。这意味着奖励信号并不天然分布在每个 token 上的,会导致价值模型训练变得困难,可能会引入不稳定的优势估计。

GRPO(Group Relative Policy Optimization,组相对策略优化)正是为了简化这一过程,在保留 PPO 在线采样和策略约束优势的同时,去掉价值模型,从而降低训练显存开销和工程复杂度。具体来说,GRPO 在同一个 prompt 下采样多条回答,通过比较这些回答的奖励高低来构造相对优势。这样既保留了强化学习中的在线探索能力,又避免了 Critic 带来的额外开销。

从算法定位上看,GRPO 介于 PPO 和 DPO 之间。它不像 DPO 那样完全依赖静态偏好数据,而是仍然通过当前策略模型在线采样回答,并根据奖励信号进行策略更新;但它也不像 PPO 那样需要额外训练一个 Critic 价值模型,而是利用同一个 prompt 下多条回答之间的相对奖励来估计优势。

# 核心思想

GRPO 的核心思想可以概括为:对同一个问题生成一组回答,用组内奖励的均值作为 baseline,再根据每条回答相对组内平均水平的好坏来计算 Advantage

GRPO 算法流程示意图

给定一个 prompt qq,策略模型一次性采样 GG 条回答:

o1,o2,,oGπθold(x){o_1,o_2,\dots,o_G}\sim \pi_{\theta_{\mathrm{old}}}(\cdot|x)

随后,使用奖励模型或规则奖励函数对每条回答进行打分,同时基于 KL 散度进行奖励约束,得到:

r1,r2,,rG{r_1,r_2,\dots,r_G}

对于这一组回答,计算组内奖励均值和标准差:

rˉ=1Gi=1Gri,sr=1Gi=1G(rirˉ)2\bar r=\frac{1}{G}\sum_{i=1}^{G}r_i,\quad s_r=\sqrt{\frac{1}{G}\sum_{i=1}^{G}(r_i-\bar r)^2}

然后将每条回答的奖励进行标准化,得到组相对 Advantage:

A^i=rirˉsr+ϵ\hat A_i=\frac{r_i-\bar r}{s_r+\epsilon}

其中,ϵ\epsilon 是一个很小的常数,用于避免标准差为 0 时出现除零问题。可以看到,GRPO 中的 Advantage 不再依赖价值模型,而是完全由同一个 prompt 下多条回答的相对奖励决定。如果某条回答的奖励高于组内平均水平,则 A^i>0\hat A_i>0,训练时会提高模型生成这类回答的概率;如果某条回答的奖励低于组内平均水平,则 A^i<0\hat A_i<0,训练时会降低模型生成这类回答的概率。

此外,有个细节是,在 GRPO 算法中,通常一条回答的 Advantage 会传播到该回答中每个 token 的 log probability 上,从而指导策略模型的更新,这一点与 PPO 的实现略有不同。

# 训练目标

GRPO 仍然保留了 PPO 中的新旧策略概率比值约束。对于第 ii 条回答中的第 tt 个 token,定义概率比值为:

ρi,t(θ)=πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)\rho_{i,t}(\theta)=\frac{\pi_\theta(y_{i,t}|x,y_{i,<t})}{\pi_{\theta_{\mathrm{old}}}(y_{i,t}|x,y_{i,<t})}

其中,πθ\pi_\theta 表示当前正在更新的策略模型,πθold\pi_{\theta_{\mathrm{old}}} 表示采样时使用的旧策略模型。

GRPO 的策略优化目标可以写成:

JGRPO(θ)=E[1Gi=1G1yit=1yi(min(ρi,t(θ)A^i,clip(ρi,t(θ),1ε,1+ε)A^i)βDKL(πθπref))]J_{\mathrm{GRPO}}(\theta)=\mathbb{E}\left[\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|y_i|}\sum_{t=1}^{|y_i|}\left(\min\left(\rho_{i,t}(\theta)\hat A_i,\operatorname{clip}(\rho_{i,t}(\theta),1-\varepsilon,1+\varepsilon)\hat A_i\right)-\beta D_{KL}(\pi_\theta|\pi_{\mathrm{ref}})\right)\right]

其中,ε\varepsilon 是 PPO 中的裁剪参数,用于限制策略更新幅度;β\beta 是 KL 惩罚系数,用于约束当前策略模型不要偏离参考模型太远;πref\pi_{\mathrm{ref}} 通常是冻结的 SFT 模型。

与 PPO 类似,GRPO 也通过 clip\operatorname{clip} 操作限制新旧策略之间的概率比值。如果某个 token 的概率变化过大,即使它对应的优势较高,裁剪机制也会限制它对目标函数的贡献,从而避免策略更新过猛。

注意,GRPO 的训练目标中没有 Critic,也不需要通过 GAE 估计每个 token 的优势。它直接使用组内相对奖励构造 A^i\hat A_i,并将该优势分配给回答中的各个 token。

# 训练流程

GRPO 的训练流程与 PPO 类似,仍然是一个在线强化学习过程。但由于去掉了价值模型,整体训练链路更加简洁。具体而言,GRPO 每轮训练主要包含以下几个步骤:

  1. 采样 Prompt:从训练数据中采样一批 prompt,例如数学题、代码题或指令任务。
  2. 组内生成回答:对于每个 prompt,使用旧策略模型生成 GG 条不同回答,并记录旧策略生成每处 token 的概率。
  3. 奖励打分:使用奖励模型、规则函数或自动验证器对每条回答打分。
  4. 计算组相对 Advantage:对同一个 prompt 下的 GG 个奖励进行归一化,得到每条回答的相对优势。
  5. 计算 KL 惩罚:使用参考模型计算当前回答的 token 概率,并与当前策略模型进行比较,算出策略模型与参考模型的 KL 散度。
  6. 更新策略模型:根据 GRPO 裁剪目标和 KL 散度约束 Loss 更新策略模型。
  7. 同步旧策略模型:在下一轮采样前,将当前策略模型作为新的旧策略模型进行 roll out。

算法流程伪代码如下:

算法:GRPO(Group Relative Policy Optimization)
输入:策略模型 π_θ,参考模型 π_ref(冻结),奖励函数 R,Prompt 数据集 D
超参:组大小 G,裁剪系数 ε,KL 系数 β

for iteration = 1, 2, ... do
    从 Prompt 数据集 D 中采样一批 prompt
    将当前策略模型复制为旧策略模型 π_old

    for 每个 prompt x do
        使用旧策略模型 π_old 采样 G 条回答 {y_1, y_2, ..., y_G}
        使用奖励函数 R 对每条回答打分,得到 {r_1, r_2, ..., r_G}
        计算组内奖励均值 r_mean 和标准差 r_std
        对每条回答计算组相对 Advantage:A_i = (r_i - r_mean) / (r_std + ε)
    end for

    for epoch = 1 to K do
        计算当前策略与旧策略的概率比值
        计算当前策略与参考模型之间的 KL 惩罚
        使用 GRPO-Clip 目标更新策略模型 π_θ
    end for
end for

从流程上看,GRPO 相比 PPO 少了价值模型前向、价值损失计算和 GAE 估计,因此实现上更加轻量。但相比 DPO,GRPO 仍然保留了在线采样和奖励反馈,因此具备一定的探索能力。

# Outcome Supervision 与 Process Supervision

在 GRPO 中,奖励信号可以分为两类:

  • 结果监督是最常见的形式。对于一条完整回答,奖励函数只在最终结果处给出一个分数。例如在数学任务中,如果最终答案正确,则奖励较高;如果最终答案错误,则奖励较低。此时,GRPO 会将标准化后的回答级 Advantage 分配给该回答中的所有 token。这种方式实现简单,非常适合答案可自动验证的任务,例如数学题、代码题、选择题等。但它的问题在于奖励较为稀疏。模型只知道整条回答最终是好是坏,却不知道中间哪一步推理真正贡献了正确答案。
  • 过程监督则更加细粒度。它会对推理过程中的每一步进行打分,例如数学解题中的每一个推导步骤、代码生成中的每一个中间判断等。此时,模型不仅可以知道最终答案是否正确,还可以知道中间推理路径是否合理。这类奖励能够提供更密集的训练信号,但也需要更复杂的奖励模型或验证机制。对于很多任务而言,最终答案容易验证,但中间推理步骤是否正确却更难自动判断。

因此在实际工程中,结果监督更容易落地,而过程监督通常依赖更高质量的标注数据、过程奖励模型或专门设计的验证器。


# 参考文献

[1] Ouyang L, Wu J, Jiang X, et al. Training language models to follow instructions with human feedback[C]//Advances in Neural Information Processing Systems. 2022, 35: 27730-27744.

[2] Rafailov R, Sharma A, Mitchell E, et al. Direct preference optimization: Your language model is secretly a reward model[C]//Advances in Neural Information Processing Systems. 2023, 36: 53728-53741.

[3] Shao Z, Wang P, Zhu Q, et al. DeepSeekMath: Pushing the limits of mathematical reasoning in open language models[EB/OL]. arXiv:2402.03300, 2024.