跳过正文

PPO、DPO 与 GRPO

·11142 字·23 分钟

1. PPO(近端策略优化)
#

​ PPO 是 OpenAI 在 2017 年提出的一种强化学习算法,其设计的初衷是为了解决传统策略梯度算法(Policy Gradient)中训练不稳定、更新步长难以确定的问题。在 RLHF 的背景下,PPO 的稳定性和可靠性使其成为优化语言模型的首选。

1.1 PPO的核心直觉
#

​ 想象一下你在教一个孩子玩一个游戏。如果孩子每次尝试后,你都给予他非常剧烈的反馈(要么是极高的赞扬,要么是严厉的批评),他可能会感到困惑和不知所措,甚至放弃学习。一个更好的方法是,在他当前行为的基础上,温和地引导他向更好的方向改进,每次只做小小的调整。

​ PPO 的核心思想与此类似。它认为,在更新模型的策略(即模型生成文本的方式)时,更新的步伐不应该太大。如果新策略与旧策略相差过大,可能会导致模型性能的急剧下降,即“掉下悬崖”。PPO 通过一个巧妙的机制,将策略更新限制在一个“近端”的、可信赖的区域内,从而保证了学习过程的稳定。

1.2 PPO的关键机制
#

​ PPO 的魔法在于其目标函数的设计。标准的策略梯度算法的目标是最大化期望回报。PPO 在此基础上引入了两个关键概念:概率比(Probability Ratio)和优势函数(Advantage Function)

  • **优势函数A(s,a)A(s, a) **:代表在状态 ss 下,采取动作 aa 相较于平均水平有多好。在 RLHF 中,它通常由奖励模型(RM)的输出减去一个基线(Baseline,通常是另一个叫做“价值模型”的网络的输出)来估计。如果 A>0A>0 ,说明这个回答比预期的要好,我们应该增加生成它的概率;反之则减少。
  • **概率比 rθr_{\theta} **:表示新策略 πθ\pi_{\theta} 和旧策略 πθold\pi_{\theta_{old}} 对于同一个动作的输出概率之比。rθ=πθπθoldr_{\theta}=\frac{\pi_{\theta}}{\pi_{\theta_{old}}}。如果, rθ>1r_{\theta}>1 说明新策略更倾向于采取这个动作。

PPO 的目标函数(简化版)如下:

LCLIP(θ)=Et[min(rt(θ)A^t,  clip(rt(θ),1ϵ,1+ϵ)A^t)] L^{CLIP}(\theta) = \mathbb{E}_{t}\left[ \min\Big( r_t(\theta)\hat{A}_t, \; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t \Big) \right]

让我们来解读这个公式:

  • 我们希望最大化概率比 rθr_{\theta} 和优势函数 A^t\hat{A}_t 的乘积。当优势 A^t\hat{A}_t 为正时(好回答),我们希望增大 rθr_{\theta} ;当优势为负时(坏回答),我们希望减小 rθr_{\theta} 。这很直观。
  • 关键在于 clip 函数clip(x, min, max) 会将 x 限制在 [min, max] 区间内。这里的 ϵ\epsilon 是一个超参数(通常取 0.1 或 0.2),它定义了一个“信任区域”。
  • min 函数的作用
    • 当优势 A^t>0\hat{A}_t>0:我们希望增大 rθr_{\theta} ,但 clip 函数将其上界限制在 。这意味着,即使某个回答非常好,我们对策略的更新也不会过于激进,防止“一步走得太大扯着蛋”。
    • 当优势 A^t<0\hat{A}_t<0:我们希望减小 rθr_{\theta}clip 函数将其下界限制在 。这意味着,我们也不会因为一个糟糕的回答而过度惩罚模型,给了模型“改过自新”的机会。

​ 通过这种方式,PPO 像一个温和而有耐心的老师,确保模型在每次学习后都能稳定进步,而不会因为某次剧烈的更新而崩溃。

1.3 PPO在RLHF中的角色
#

在 RLHF 流程中,PPO 的工作流程如下:

  1. 初始化:用 SFT 模型的权重初始化策略模型(Policy Model),并通常也用它来初始化价值模型(Value Model)。
  2. 采样:从一个指令数据集中随机抽取一个指令(Prompt)。
  3. 生成:策略模型根据指令生成一个回答。
  4. 评估:奖励模型(RM)对“指令-回答”对打分,得到奖励(Reward)。价值模型(Value Model)对指令进行评估,得到价值(Value)。
  5. 计算优势:根据奖励和价值计算优势函数。
  6. 更新:使用 PPO 的 Clipped Surrogate Objective 计算损失,并更新策略模型和价值模型的参数。
  7. 循环:重复步骤 2-6,直到模型收敛。

​ 同时,为了防止模型在优化过程中“忘记”SFT 阶段学到的知识,或者为了防止模型生成一些虽然奖励高但内容乱七八糟的文本,PPO 的损失函数中通常还会加入一个 KL 散度惩罚项。这个惩罚项用来衡量当前策略与初始 SFT 策略的差异,差异越大,惩罚越重,确保模型在追求高奖励的同时,不会偏离其原始的语言能力。

1.4 PPO算法工作流程
#

损失函数推导过程见:零基础学习强化学习算法:PPO

1.4.1 阶段 1:收集数据
#

  1. 从旧策略 πold\pi_\text{old}(固定参数)采样生成样本

    • 给定一个 prompt(输入),用当前策略(语言模型)生成一段文本(token 序列)。
    • 这一过程就形成了一条 trajectory:
    τ={(s0,a0,r0),(s1,a1,r1),,(sT,aT,rT)} \tau = \{(s_0, a_0, r_0), (s_1, a_1, r_1), \dots, (s_T, a_T, r_T)\}

    其中:

    • sts_t:状态(当前上下文)
    • ata_t:当前生成的 token
    • rtr_t:该 token 或整个序列的奖励(来自奖励模型)
  2. 记录以下数据:

    • 每个 token 的 log 概率:logπold(atst)\log π_{\text{old}}(a_t|s_t)
    • 价值网络预测:Vold(st)V_{\text{old}}(s_t)
    • 奖励:rtr_t
  3. 得到一批样本(batch of trajectories)

1.4.2 计算优势函数和目标回报
#

  1. 计算时序差分 δₜ

    δt=rt+γVold(st+1)Vold(st) \delta_t = r_t + \gamma V_{\text{old}}(s_{t+1}) - V_{\text{old}}(s_t)
  2. 使用广义优势估计(GAE)计算优势 Aₜ

    At=l=0(γλ)lδt+l A_t = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}

    GAE 的作用:平衡偏差与方差,获得平滑稳定的优势估计。

  3. 计算价值网络的目标值(标签)

    V^ttarget=At+Vold(st) \hat{V}_t^{target} = A_t + V_{\text{old}}(s_t)

    这是我们训练 value network 的监督信号。

  4. 对优势进行标准化(稳定训练)

    AtAtmean(At)std(At)+ϵ A_t \leftarrow \frac{A_t - \text{mean}(A_t)}{\text{std}(A_t) + \epsilon}

1.4.3 策略与价值网络的联合训练
#

我们通常会重复多个 epoch,每次从采样数据中取多个 minibatch 来更新。


策略网络更新

  1. 重新计算当前策略的 log 概率logπθ(atst)\log π_{\theta}(a_t|s_t)

  2. 计算概率比

    rt(θ)=πθ(atst)πold(atst)=exp(logπθlogπold) r_t(\theta) = \frac{π_\theta(a_t|s_t)}{π_{\text{old}}(a_t|s_t)} = \exp(\log π_{\theta} - \log π_{\text{old}})
  3. 计算剪切(Clipped)目标函数

    Ltpolicy(θ)=min[rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At] L^{policy}_t(\theta) = \min \left[ r_t(\theta) A_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) A_t \right]
    • 当策略改变过大(ratio 超出 [1−ε,1+ε])时,梯度被截断;
    • 保证更新“近端”稳定。
  4. 取 batch 的平均作为策略损失

    Lpolicy=Et[Ltpolicy(θ)] L^{policy} = -\mathbb{E}_t[L^{policy}_t(\theta)]

    (负号是因为我们希望最大化优势)


价值网络更新

  1. 使用 MSE 损失

    • Lvalue=12Et[(Vθ(st)V^ttarget)2] L^{value} = \frac{1}{2} \mathbb{E}_t \left[ (V_\theta(s_t) - \hat{V}_t^{target})^2 \right]

      Vθ(st)V_\theta(s_t):当前价值网络输出

    • V^ttarget\hat{V}_t^{target}:由 GAE 得到的回报估计


熵正则(Entropy)项(可选)

Lentropy=Et[H(πθ(st))] L^{entropy} = -\mathbb{E}_t [ H(π_\theta(\cdot|s_t)) ]

鼓励策略保持一定的随机性,避免过早收敛。


总损失函数

Ltotal=Lpolicy+c1Lvaluec2Lentropy L^{total} = L^{policy} + c_1 L^{value} - c_2 L^{entropy}

然后对该损失反向传播,更新网络参数 θ。

1.4.4 迭代更新
#

  • 重复执行:
    1. 用新策略采样(rollout);
    2. 计算 A、V、R;
    3. 多 epoch、小 batch 训练;
    4. 更新策略和价值网络;
  • 直到收敛或性能达到要求。

1.5 PPO的挑战
#

​ 尽管 PPO 非常成功,但 RLHF 中的 PPO 流程相当复杂。它需要同时维护和训练多个模型(策略模型、价值模型、奖励模型、SFT 参考模型),这使得训练过程非常消耗计算资源和内存,且超参数调整也颇具挑战。正是这些挑战,催生了更简洁的替代方案——DPO。

2. DPO(直接偏好优化)
#

​ DPO 由斯坦福大学的研究者于 2023 年提出,它以一种惊人的简洁性,对传统的 RLHF 流程发起了挑战。DPO 的核心洞见是:我们完全可以绕过奖励模型建模这一中间步骤,直接利用人类的偏好数据来优化语言模型

2.1 DPO的核心直觉
#

​ 传统 RLHF 是一个“两步走”的过程:先用偏好数据(A 比 B 好)训练一个能给绝对分数(A 得 90 分,B 得 60 分)的奖励模型,然后再用这个分数去指导强化学习。

​ DPO 的提出者反思道:我们最终的目标不就是让模型知道“A 比 B 好”吗?为什么非要先把它变成“A=90分,B=60分”,再回头去学习这个偏好呢?这个中间的奖励建模步骤不仅复杂,还可能引入误差。我们能不能直接建立一个从“偏好”到“策略更新”的数学桥梁?

​ DPO 做到了这一点。它巧妙地将偏好数据和语言模型的策略联系起来,推导出了一个简单的、可以用分类损失函数直接优化的目标。

2.2 从偏好到损失
#

​ DPO 的理论推导略显复杂,但其最终的损失函数却异常优雅。它始于一个名为 Bradley-Terry 的模型,该模型常用于根据成对比较来估计事物的排名。DPO 假设人类的偏好概率 pp^* 可以用一个潜在的奖励模型 r(y,x)r^*(y, x) 来建模:

P(ywylx)=11+exp((r(ylx)r(ywx)))=σ(r(ywx)r(ylx)) P(y_w \succ y_l \mid x) = \frac{1}{1 + exp((r(y_l|x) - r(y_w|x)))}=\sigma\big(r(y_w|x) - r(y_l|x)\big)

​ 这里 ywy_w 是被偏好的回答(winner),yly_l 是不被偏好的回答(loser),xx 是指令。这个公式本质上是一个 Sigmoid 函数,表示 ywy_w 的奖励比 yly_l 高得越多,人类偏好 ywy_w 的概率就越大。

​ 接下来是 DPO 最关键的一步。它通过一系列精妙的数学变换,证明了优化语言模型 πθ\pi_{\theta} 以最大化这个奖励,等价于最小化以下损失函数:

LDPO(θ)=E(x,yw,yl)[logσ(βlogπθ(ywx)πθ(ywx)βlogπref(ylx)πref(ylx))] L_{\text{DPO}}(\theta) = -\mathbb{E}_{(x,y_w,y_l)} \Big[ \log \sigma\big( \beta \log \frac{\pi_\theta(y_w|x)} {\pi_\theta(y_w|x)} - \beta \log \frac{\pi_{\text{ref}}(y_l|x)} {\pi_{\text{ref}}(y_l|x)} \big) \Big]

让我们来解读这个“天书般”的公式:

  • E(x,yw,yl)\mathbb{E}_{(x,y_w,y_l)} 是我们的偏好数据集,包含了大量的 (x,yw,yl)(x, y_w, y_l) 三元组。
  • πθ\pi_\theta 是我们正在训练的模型。
  • πref\pi_{ref} 是一个参考模型,通常就是 SFT 阶段得到的模型。它的作用和 PPO 中的 KL 散度惩罚项类似,是为了防止模型“跑偏”。
  • πθ(yx)πref(yx)\frac{\pi_\theta(y|x)} {\pi_{\text{ref}}(y|x)} 衡量了当前模型相对于参考模型,生成回答 yy 的概率增加了多少。我们可以把 logπθ(yx)πref(yx)\log \frac{\pi_\theta(y|x)} {\pi_{\text{ref}}(y|x)} 看作是模型对回答 yy 的“隐式奖励”。
  • 核心部分是括号里的差值: (隐式奖励w隐式奖励l)(\text{隐式奖励}_w-\text{隐式奖励}_l) 。DPO 的目标就是最大化这个差值。也就是说,它希望当前模型生成“获胜”回答的概率相对于参考模型的增幅,要远大于生成“失败”回答的概率的增幅
  • 最外层的 logσ\log \sigma (log-sigmoid) 结构,使得这个目标变成了一个标准的二元交叉熵损失。这正是 DPO 的绝妙之处,它将复杂的强化学习问题,转化为了一个我们非常熟悉的分类问题。

2.3 推导过程
#

  • 符号约定:
    • πθ(yx)\pi_\theta(y|x):待优化策略(语言模型)
    • πref(yx)\pi_{\text{ref}}(y|x):参考策略(通常是 SFT 模型)
    • r(yx)r(y|x):奖励函数(reward)
    • β>0\beta>0:温度/平衡参数
    • σ(s)=11+es\sigma(s) = \frac{1}{1+e^{-s}}:Sigmoid 函数

推导过程见:DPO算法讲解

2.4 DPO的工作流程
#

相比 PPO,DPO 的流程大大简化:

2.4.1 准备数据
#

  1. 收集人类偏好数据集 D={(x,yw,yl)}D = \{(x, y_w, y_l)\}
    • 每个样本包含一个输入 prompt xx
    • 两个模型输出:一个被偏好 (winner),一个被拒绝 (loser)
  2. 训练一个SFT(Supervised Fine-Tuned)参考模型
    • 记作 πref(yx)\pi_{ref}(y|x)
    • 它在高质量文本上训练,用作“原始分布约束”。

2.4.2 计算损失
#

对于每个样本 (x,yw,yl)(x, y_w, y_l)

  1. 计算当前模型的 log 概率:logπθ(ywx),logπθ(ylx)\log \pi_\theta(y_w|x), \quad \log \pi_\theta(y_l|x)

  2. 计算参考模型的 log 概率:logπref(ywx),logπref(ylx)\log \pi_{ref}(y_w|x), \quad \log \pi_{ref}(y_l|x)

  3. 构造相对对比项:

    Δ=β[(logπθ(ywx)logπref(ywx))(logπθ(ylx)logπref(ylx))] \Delta = \beta \left[ (\log \pi_\theta(y_w|x) - \log \pi_{ref}(y_w|x)) - (\log \pi_\theta(y_l|x) - \log \pi_{ref}(y_l|x)) \right]
  4. 计算 DPO 损失:LDPO=logσ(Δ)L_{DPO} = -\log \sigma(\Delta)

2.4.3 优化
#

  1. 对整个 batch 求平均损失:Lbatch=1NiLDPO(i)L_{batch} = \frac{1}{N} \sum_i L_{DPO}^{(i)}
  2. 反向传播更新策略模型参数 θ。
  3. 参考模型 πrefπ_ref 固定不变(不参与更新)。
  4. 重复多个 epoch 直到收敛。

​ 整个过程不需要训练一个独立的奖励模型,也不需要复杂的采样和优势计算,更没有价值模型。这使得 DPO 在实现上更简单,训练更稳定,也更节省计算资源。

2.5 DPO的权衡
#

​ DPO 虽然简洁高效,但也有其适用场景和潜在的局限。DPO 强依赖于高质量的成对偏好数据。如果偏好数据的质量不高,或者标注不一致,DPO 的效果可能会受到影响。此外,由于其直接优化的特性,它对于数据分布的变化可能比 PPO 更敏感。在某些需要精细控制奖励函数的复杂场景下,PPO 的灵活性可能依然具有优势。

3. GRPO(组别相对策略优化)
#

​ 就在 PPO 和 DPO 的讨论如火如荼之时,DeepSeek-AI 在其模型(如 DeepSeekMath 和 DeepSeek-R1)的训练中,提出并使用了一种名为 GRPO 的新方法,为 RLHF 带来了新的视角。GRPO 可以看作是 PPO 的一个变种,它通过一种新颖的方式来估计优势函数,从而省去了 PPO 中昂贵的价值模型(Critic Model)

3.1 GRPO核心直觉
#

​ PPO 的核心是优势函数 A(s,a)=R(s,a)V(s)A(s,a)=R(s,a)-V(s) ,它需要一个奖励模型 R(s,a)R(s,a) 来提供奖励,还需要一个价值模型 V(s)V(s) 来提供基线(Baseline),即在状态 ss 下的平均期望回报。训练和维护这个价值模型是 PPO 流程中主要的复杂性和成本来源之一。

​ GRPO 的提出者思考:我们能不能找到一种更简单的方式来估计这个“平均水平”呢?

​ 他们的答案是:利用群体智慧。对于同一个指令,我们不只生成一个回答,而是生成一组(Group)回答。然后,我们假设这组回答的平均奖励,就可以近似地作为当前策略下的“平均水平”,也就是价值 的一个估计。

​ 这个想法非常直观。想象一下,要评价一个学生这次考试的成绩(某个回答的奖励)是好是坏(优势),我们不需要知道他历史上的平均分(价值模型的输出),我们可以直接看他这次在班级里(一组回答中)的排名。如果他的分数远高于班级平均分,那么他的优势就是正的,反之亦然。

3.2 GRPO关键机制:组内优势估计
#

GRPO 的核心是对 PPO 中优势函数的计算方式进行了修改。其步骤如下:

  1. 组采样 (Group Sampling):对于一个给定的指令 qq ,使用当前的策略模型 πθ\pi_\theta 生成一个包含 GG 个回答的组 o1,o2,,oGo_1,o_2,\dots,o_G

  2. 组评估 (Group Evaluation):使用一个奖励函数(可以是一个训练好的奖励模型,也可以是某种可计算的启发式规则,例如代码的执行结果、数学题的答案是否正确等)为组内的每一个回答 oio_i 打分,得到奖励 rir_i

  3. 组内优势计算 (Group-Relative Advantage Estimation)*:计算组内所有回答的平均奖励 rˉ=1Gi=1Gri\bar{r}=\frac1G \sum_{i=1}^{G} r_i 和标准差 σr\sigma_r 。对于组内的每一个回答 oio_i ,其优势被定义为其归一化后的奖励

    Ai=rirˉσr A_i=\frac{r_i-\bar{r}}{\sigma_r}

    这种方法被称为组内奖励归一化(Group-wise Reward Normalization)。它直接用组内的统计量(均值和标准差)来替代了 PPO 中需要专门训练的价值模型所扮演的角色。

  4. 策略更新:一旦计算出了每个样本的优势 AiA_i,接下来的步骤就和 PPO 非常相似了。GRPO 同样使用 Clipped Surrogate Objective 来更新策略模型。

LGRPO=E^q,oi[i=1Gmin(ri(θ)Ai,clip(ri(θ),1ϵ,1+ϵ)Ai)] L^{\text{GRPO}}=\hat{\mathbb{E}}_{q,o_i} \Big [ \sum_{i=1}^G \text{min} \big(r_i(\theta)A_i, \text{clip}(r_i(\theta),1-\epsilon,1+\epsilon)A_i \big) \Big ]

​ 其中 rt(θ)=πθ(oiq)πold(oiq)r_t(\theta) = \frac{π_\theta(o_i|q)}{π_{\text{old}}(o_i|q)} 是概率比,AiA_i 是上面计算出的组内相对优势。

3.3 GRPO工作流程
#

3.3.1 采样阶段:生成多样回答
#

对于同一个输入 prompt xx,模型采样多条回答:{y1,y2,...,yN}\{y_1, y_2, ..., y_N\}(例如生成 N=4 条不同回答)


3.3.2 奖励评估阶段:整体打分
#

使用奖励模型人类偏好模型对每个回答整体打分:ri=R(x,yi)r_i = R(x, y_i)

这时每条回答只对应一个整体奖励


3.3.3 群体标准化(计算相对优势)
#

我们并不再去估计状态价值 VtV_t,而是直接使用群体内部的相对得分作为优势:

Ai=rimean(r1,...,rN)std(r1,...,rN)+ϵ A_i = \frac{r_i - \text{mean}(r_1, ..., r_N)}{\text{std}(r_1, ..., r_N) + \epsilon}

即:

  • 如果回答 yiy_i 比平均好 → 优势 Ai>0A_i > 0
  • 如果比平均差 → 优势 Ai<0A_i < 0

这样我们直接得到每条回答的“相对优势”。 这一过程本质上用群体平均值代替了价值函数 V(s)V(s)


3.3.4 广播优势到 token 层
#

虽然每个回答 yiy_i 只有一个优势 AiA_i,但我们仍要更新生成该回答的每个 token的策略参数。

因此:At(i)=Ai,ttokens of yiA_{t}^{(i)} = A_i, \quad \forall t \in \text{tokens of } y_i

也就是:

整个回答的优势平均分配到每个 token 上。


3.3.5 策略更新
#

使用和 PPO 相同的 clipped policy loss:

LGRPOpolicy=E[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)] L_{GRPO}^{policy} = -\mathbb{E}\left[ \min\left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) A_t \right) \right]

其中:

rt(θ)=πθ(atst)πold(atst) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\text{old}}(a_t|s_t)}

区别仅在于:

  • PPO 中的 AtA_t 来源于 GAE;
  • GRPO 中的 AtA_t来源于群体相对归一化得分。

3.4 GRPO优势与特点
#

  • 高效性:GRPO 最显著的优势是无需价值模型。价值模型通常和策略模型一样大,去掉它可以节省近一半的训练内存和计算量,这对于训练超大规模模型来说意义重大。
  • 灵活性:GRPO 对奖励函数的定义非常灵活。它不一定需要一个端到端训练的神经网络奖励模型。在某些任务中(如代码生成、数学推理),我们可以设计出可验证的奖励函数(Verifiable Reward Functions)。例如,如果生成的代码能成功运行并通过所有单元测试,就给予高奖励;如果数学题的最终答案正确,也给予高奖励。这种方式使得奖励信号更客观、更廉价。
  • 稳定性:通过组内归一化,GRPO 使得优势函数的尺度保持在一个稳定的范围内,这有助于稳定训练过程,减少了对超参数的敏感性。

3.5 GRPO的适用场景
#

GRPO 特别适用于以下场景:

  • 计算资源受限:当你希望以更低的成本进行 RLHF 训练时,GRPO 是一个极具吸引力的选择。
  • 存在客观评价标准:在代码、数学、科学等领域,可以通过程序化、确定性的方式来评估生成内容的质量,GRPO 可以充分利用这种廉价而准确的奖励信号。
  • 需要提升模型推理能力:DeepSeek 的实践表明,通过精心设计的奖励函数和 GRPO 训练,可以显著提升模型在复杂推理任务上的表现。

4. PPO、DPO 与 GRPO 的全方位对比
#

特性维度PPO (Proximal Policy Optimization)DPO (Direct Preference Optimization)GRPO (Group Relative Policy Optimization)
核心思想在可信区域内小步更新策略,以最大化奖励模型给出的分数。直接将成对的偏好数据转化为一个分类损失,绕过奖励建模。通过组内回答的相对好坏来估计优势,从而指导策略更新。
方法论On-policy 强化学习Off-policy 偏好学习 (类似于分类)On-policy 强化学习
所需模型4个:策略模型、价值模型 (Critic)、奖励模型 (RM)、SFT 参考模型。2个:策略模型、SFT 参考模型。3个 (通常):策略模型、奖励函数/模型、SFT 参考模型。无价值模型
数据需求需要奖励模型能给出的绝对分数。需要成对的偏好数据 。需要奖励函数/模型能给出的分数 (可以是相对的)。
计算成本最高。需要维护和训练多个大型模型,且有复杂的采样循环。最低。流程类似监督微调,非常简洁高效。中等。比 PPO 成本低(省去了价值模型),但比 DPO 复杂(仍有 RL 循环)。
主要优势灵活、鲁棒。适用于各种复杂的奖励函数,是久经考验的工业标准。简洁、高效。训练稳定,实现简单,大大降低了 RLHF 的门槛。高效、灵活。显著降低了 PPO 的成本,且能灵活利用可验证奖励。
主要挑战复杂、昂贵。实现和调试难度大,对资源消耗极高。依赖数据质量。对偏好数据的一致性和质量要求高。组采样开销。需要为每个指令生成多个样本,会增加推理开销。
适用场景需要精细控制奖励函数、追求极限性能的通用场景。数据集是成对偏好形式,希望快速、低成本地进行模型对齐的场景。计算资源受限,或任务存在客观、可程序化验证的奖励标准的场景 (如代码、数学)。

一个生动的比喻
#

  • PPO 像是一位经验丰富的全科医生。他会给你做全面的检查(奖励模型评估),参考你的历史病历(价值模型),然后非常谨慎地给你开药方(Clipped Update),确保疗效的同时将副作用降到最低。这个过程非常完备,但也最耗时耗力。
  • DPO 像是一位专攻“比对诊断”的专家。你不需要告诉他你的具体指标,你只需要告诉他“相比于昨天,我今天感觉更好了”(偏好数据)。他就能直接根据这些“比对”信息,调整你的治疗方案。这个过程非常直接,省去了很多中间化验环节。
  • GRPO 像是一位组织“专家会诊”的医生。他把你的情况(指令)告诉一群实习医生(生成一组回答),让他们各自给出诊断方案和信心度(奖励)。然后他根据这些方案在“会诊”中的相对好坏(组内归一化),来决定最终采纳哪个方向的治疗思路。他自己不需要对你的历史情况了如指掌(无需价值模型),而是依赖“集体智慧”做决策。

5.总结
#

​ 从 PPO 的稳定可靠,到 DPO 的简洁直接,再到 GRPO 的高效灵活,我们看到了大模型对齐技术在“效果”、“效率”和“成本”这个不可能三角中的不断探索与演进。

  • PPO 作为 RLHF 的开创性和基准性方法,其地位在短期内难以被完全撼动。它强大的灵活性和鲁棒性使其在许多前沿研究和工业应用中依然是首选。
  • DPO 则成功地为 RLHF “祛魅”,它证明了在许多场景下,我们并不需要复杂的强化学习框架,一个巧妙的损失函数设计就能达到甚至超越 PPO 的效果。它的出现极大地推动了 RLHF 技术的普及和民主化。
  • GRPO 则在 PPO 的框架内进行了精妙的“减负”,它在保持 PPO 核心优势的同时,显著降低了训练成本,并为利用非传统奖励信号(如可验证奖励)开辟了新的道路,尤其在逻辑推理等领域展现出巨大潜力。

未来何去何从?

​ 这三种算法并非简单的替代关系,而更可能是一种共存与融合的关系。未来的研究可能会探索:

  1. 混合方法:是否可以将 DPO 的直接偏好学习思想与 PPO/GRPO 的探索性优势结合起来?
  2. 自适应算法:模型是否可以根据任务的特性,自动选择或切换最合适的对齐策略?
  3. 超越偏好对:除了简单的“A>B”偏好,我们如何利用更丰富的反馈信号,例如用户的修改意见、多维度评分等?
  4. 对齐的理论边界:这些算法在多大程度上能真正理解和内化人类的价值观,而不是仅仅在表面上拟合偏好数据?

​ 毫无疑问,PPO、DPO 和 GRPO 的发展,只是人类探索如何与超强人工智能和谐共舞的序章。理解它们的原理,掌握它们的应用,不仅是每一位 AI 从业者的必备技能,也是我们洞察未来技术走向的一扇重要窗口。

参考:

从 PPO、DPO 到 GRPO:万字长文详解大模型训练中的三大关键算法

零基础学习强化学习算法:PPO

DPO算法讲解

DPO—直接偏好优化(DPO):你的语言模型实际上是一个奖励模型

DeepSeek-GRPO