直接偏好优化 (DPO)

传统的RLHF(基于人类反馈的强化学习)通常采用“三阶段”流程:SFT(监督微调) -> 奖励模型(RM)训练 -> PPO(近端策略优化)。尽管该方法行之有效,但其流程复杂、训练不稳定的问题不容忽视。训练独立的奖励模型可能引入校准偏差,而PPO作为一种在线强化学习算法,对超参数极为敏感且容易导致训练发散。

直接偏好优化(Direct Preference Optimization, DPO) 作为一种革新性的替代方案,通过重新定义对齐问题,绕过了显式的奖励模型建模和复杂的在线PPO优化,直接在偏好数据上对语言模型进行优化,显著简化了对齐流程。


一、 核心理念:从偏好到策略

为了理解DPO的突破,回顾RLHF的数学本质,展示DPO如何将中间步骤“短路”。

1.1 传统RLHF的目标函数

RLHF旨在寻找一个策略 $\pi_{\theta}$,在生成人类偏好响应的同时,保持与初始参考策略 $\pi_{ref}$(通常是SFT模型)的接近,以维持模型能力并规避模式坍塌。其目标函数通常表示为:

$$ \max_{\pi_{\theta}} \mathbb{E}_{x \sim D, y \sim \pi_{\theta}(\cdot|x)} [r^*(x, y)] - \beta \mathbb{D}_{KL}(\pi_{\theta} || \pi_{ref}) $$

其中:

  • $r^*(x, y)$:反映人类偏好的(未知)真实奖励函数。
  • $D$:提示(Prompt)的分布。
  • $\beta$:控制KL散度惩罚力度的超参数。
  • $\mathbb{D}_{KL}$:衡量优化策略 $\pi_{\theta}$ 与参考策略 $\pi_{ref}$ 差异的散度。

1.2 标准方法的局限

标准方法首先在偏好对 $(x, y_w, y_l)$ 上训练一个奖励模型 $r_{\phi}(x, y)$ 来逼近 $r^*$,其中 $y_w$ 为胜出项,$y_l$ 为失败项。该过程通常基于 Bradley-Terry 模型,假设偏好概率与奖励差值成正比:

$$ P(y_w \succ y_l | x) = \sigma(r^*(x, y_w) - r^*(x, y_l)) $$

在此之后,必须使用PPO算法,以 $r_{\phi}$ 为信号来更新策略。这一过程涉及复杂的采样和价值估计。

1.3 DPO的洞见

DPO的巧妙之处在于数学上的等价转换。它证明了RLHF目标的最优解可以用偏好概率直接表示。这意味着可以推导出一个损失函数,仅依赖策略 $\pi_{\theta}$、参考策略 $\pi_{ref}$ 和偏好数据,从而无需拟合显式的中间奖励模型 $r_{\phi}$

为什么 RLHF 的最优解可以用偏好概率表示?

这是 DPO 最核心的数学“魔法”。分三步来看这个推导过程,去掉了复杂的微积分,只保留核心逻辑:

第一步:RLHF 目标函数的“解析解”

传统的 RLHF 试图最大化奖励,同时通过 KL 散度限制策略不要偏离参考模型太远。 数学家们早已证明,这种形式的优化问题(KL 正则化奖励最大化)其实有一个封闭形式的解析解(Closed-form solution)

最优策略 $\pi^*(y|x)$ 的形式必然如下:

$$ > \pi^*(y|x) = \frac{1}{Z(x)} \pi_{ref}(y|x) e^{\frac{1}{\beta} r(x, y)} > $$
  • 这里 $Z(x)$ 是一个归一化常数(配分函数),为了保证概率之和为 1。虽然不知道 $Z(x)$ 具体是多少,但它只跟 $x$ 有关,跟具体的 $y$ 无关。
第二步:反解奖励函数(Re-parameterization)

DPO 的作者做了一个逆向思维:既然最优策略 $\pi^*$ 和奖励 $r$ 存在上述的等式关系,那能不能把 $r$ 反解出来

通过简单的对数变换可以得到:

$$ > r(x, y) = \beta \log \frac{\pi^*(y|x)}{\pi_{ref}(y|x)} + \beta \log Z(x) > $$

这一步非常关键!它表明:奖励函数完全可以由“最优策略”和“参考策略”的比值来定义

第三步:代入偏好模型与“消去魔法”

现在把第二步推导出来的 $r(x, y)$ 代入到第一节提到的 偏好概率(Bradley-Terry 模型) 中:

$$ > P(y_w \succ y_l | x) = \sigma \left( \underbrace{r(x, y_w)}_{\text{含 } Z(x)} - \underbrace{r(x, y_l)}_{\text{含 } Z(x)} \right) > $$

当你把具体的 $r$ 表达式放进去相减时,奇迹发生了:那个极其难算的归一化常数 $\beta \log Z(x)$ 在相减过程中被直接抵消掉了!

最终剩下的只有:

$$ > P(y_w \succ y_l | x) = \sigma \left( \beta \log \frac{\pi^*(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi^*(y_l|x)}{\pi_{ref}(y_l|x)} \right) > $$

结论: 因为 $Z(x)$ 被消去了,发现偏好概率完全可以只用“策略”来表示,而不需要中间那个显式的“奖励函数 $r$”。这就是为什么可以跳过奖励模型,直接优化策略。


为什么以前没人这么做?(历史局限性)

既然推导看起来只有高中代数水平,为什么直到 2023 年 DPO 才出现?主要原因在于思维定势技术路径依赖

1. 强化学习(RL)的传统范式

在 LLM 爆发之前,强化学习主要用于打游戏(Atari, AlphaGo)或机器人控制。在这些领域:

  • 环境和奖励是外部给定的(比如赢了得1分,输了得0分)。
  • 智能体(Agent)必须去适应这个外部奖励。
  • 思维惯性:当研究人员开始做 RLHF 时,他们下意识地认为必须先拟合一个“人类奖励模型”(模拟外部环境),然后再用 RL 算法(PPO)去优化策略。这是教科书式的 RL 流程。
2. PPO 的统治地位

OpenAI 在 InstructGPT (2022) 中证明了 “SFT + RM + PPO” 这套流程效果极好。PPO 是当时最先进的 RL 算法。

  • 当一个方法被证明行之有效(SOTA)时,大多数研究者的精力会集中在“如何调优这个方法”上,而不是“彻底推翻它”。
  • 大家默认 RLHF 就是一个典型的 RL 问题,必须用 Actor-Critic 架构来解。
3. 数学连接的盲点

虽然 KL 正则化的解(第一步推导)在数学界是已知的(与最大熵原理相关),但将其与 Bradley-Terry 偏好模型结合,并意识到配分函数 $Z(x)$ 可以完美消去,这需要极其敏锐的数学直觉。 在 DPO 之前,大家更多关注的是“如何训练更好的奖励模型”,而不是“能不能不要奖励模型”。


什么原因导致人们最终推导出 DPO?

DPO 的诞生(Rafailov et al., NeurIPS 2023)主要是为了解决 PPO 的痛点

1. PPO 实在是太难训了

任何训练过 PPO-RLHF 的工程师都知道这是噩梦:

  • 资源消耗大:需要同时在显存里加载 4 个模型(Actor, Critic, Ref, Reward)。
  • 极不稳定:超参数稍微不对,模型就会产生乱码或者模式坍塌。
  • 流程复杂:涉及到采样(Sampling)、价值估计(Value Estimation)、优势函数计算(Advantage),代码极其复杂。
2. “奥卡姆剃刀”的呼唤

研究人员开始反思:真的需要那么复杂的机制吗?

  • 如果能把强化学习问题转化成一个监督学习(分类)问题,就像训练 SFT 那样简单,岂不是美哉?
  • 这种对**“简洁性”和“稳定性”**的渴望,促使斯坦福的研究团队(Rafailov, Archit 等人)回到了数学原点。
3. 理论突破:从 Explicit 到 Implicit

作者们意识到,奖励函数只是一个中间变量。如果把最优策略本身看作是对奖励的一种隐式(Implicit)表达,就可以把中间商(奖励模型)踢出局。


二、 DPO 损失函数解析

DPO的核心贡献在于其损失函数。通过将KL约束下的奖励最大化问题的解析解代入 Bradley-Terry 模型,可以直接针对偏好数据优化模型。

2.1 损失函数公式

$$ L_{DPO}(\pi_{\theta}; \pi_{ref}) = -\mathbb{E}_{(x, y_w, y_l) \sim D} \left[ \log \sigma \left( \beta \log \frac{\pi_{\theta}(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi_{\theta}(y_l|x)}{\pi_{ref}(y_l|x)} \right) \right] $$

2.2 关键项拆解

  • $(x, y_w, y_l) \sim D$:从人类偏好数据集中采样,包含提示 $x$、偏好回复 $y_w$ 和非偏好回复 $y_l$。
  • $\log \frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)}$对数概率比(Log-probability Ratio)。它衡量了当前策略相对于参考策略生成某回复的概率变化。这实际上充当了“隐含奖励”的角色。
  • $\beta$:温度参数(类似于PPO中的KL系数)。
    • 较高的 $\beta$ 意味着对参考模型的偏离受到更严厉的控制。
    • 该参数直接缩放了模型对偏好数据的响应强度。
  • $\log \sigma(...)$:逻辑回归损失。该项促使模型最大化偏好回复 $y_w$ 与非偏好回复 $y_l$ 之间的“隐含奖励”差值。

2.3 隐含奖励建模

虽然DPO没有显式的奖励模型,但该公式实际上在优化一个隐含奖励函数

$$ r_{\hat{\theta}}(x, y) = \beta \log \frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} $$

优化 $L_{DPO}$ 本质上是在调整策略,使得对于偏好回复 $y_w$,其相对于参考模型的概率提升幅度,大于非偏好回复 $y_l$ 的提升幅度。


三、 工作流对比:DPO vs. PPO-RLHF

DPO最大的优势在于将复杂的“三阶段”流程简化为“两阶段”,去除了不稳定的强化学习环节。

3.1 流程图示 (Mermaid)

graph TD subgraph "传统 PPO-RLHF 流程 (三阶段)" direction TB %% 修复点:在标签内容周围加上双引号 "" SFT1["1. 监督微调 (SFT)"] --> RM["2. 训练奖励模型 (RM)"] RM -->|提供奖励信号 r_φ| PPO["3. 强化学习微调 (PPO)"] SFT1 -->|作为参考策略 π_ref| PPO Data1[("人类偏好数据")] --> RM subgraph PPO_Loop [PPO 内部循环] Gen[在线采样生成] --> CalcRw[计算奖励与优势] CalcRw --> Update[策略更新 π_θ] end PPO --- PPO_Loop end subgraph "DPO 流程 (两阶段)" direction TB %% 修复点:同样加上双引号 SFT2["1. 监督微调 (SFT)"] --> DPO_Train["2. DPO 直接偏好优化"] SFT2 -->|作为参考策略 π_ref| DPO_Train Data2[("人类偏好数据")] --> DPO_Train subgraph DPO_Internal [DPO 优化机制] LogProb[计算对数概率比] --> Loss[计算 DPO 损失] Loss --> BP[反向传播更新 π_θ] end DPO_Train --- DPO_Internal end style SFT1 fill:#e1f5fe,stroke:#01579b style RM fill:#fff9c4,stroke:#fbc02d style PPO fill:#fce4ec,stroke:#880e4f style SFT2 fill:#e1f5fe,stroke:#01579b style DPO_Train fill:#e8f5e9,stroke:#1b5e20

3.2 关键差异对照

特性基于 PPO 的 RLHF直接偏好优化 (DPO)
阶段数量3个 (SFT -> RM -> PPO)2个 (SFT -> DPO)
奖励模型需要显式训练并维护一个独立的 RM不需要 (策略本身即隐含奖励)
优化方式在线强化学习 (需采样生成)类似监督学习 (基于静态数据)
计算开销高 (需推理生成、计算奖励、更新策略)较低 (仅需前向传播计算概率)
稳定性低 (对超参数敏感,易发散)高 (训练曲线更平滑)

四、 实现细节与评估

4.1 实现步骤

实现DPO的逻辑更接近于标准的监督学习,主要包含以下步骤:

  1. 初始化:加载参考模型 $\pi_{ref}$(通常冻结参数)和待优化模型 $\pi_{\theta}$(从 $\pi_{ref}$ 复制)。
  2. 数据准备:加载偏好数据集 $D = \{(x, y_w, y_l)\}$。
  3. 训练循环
    • 前向传播:分别通过 $\pi_{\theta}$ 和 $\pi_{ref}$ 计算 $y_w$ 和 $y_l$ 的对数概率。
    • 计算比率:得出 $\log \pi_{\theta}(y|x)$ 与 $\log \pi_{ref}(y|x)$ 的差值。
    • 计算损失:应用带有温度系数 $\beta$ 的 Sigmoid 损失函数。
    • 反向传播:更新 $\pi_{\theta}$ 参数。

主流库如 Hugging Face 的 TRL (DPOTrainer) 已对上述过程进行了封装,极大地降低了实现门槛。

4.2 优劣势分析

简单直接的回答是:DPO 并没有完全取代 PPO-RLHF,两者的优缺点非常互补。目前在业界,开源社区和中小规模训练偏向 DPO,但顶尖的“前沿模型”(如 GPT-4, Llama 3, DeepSeek 系列)依然大量使用 PPO 或其变体(如 GRPO),尤其是在涉及到逻辑推理和“在线探索”能力的场景下。

4.2.1. DPO 的优势(为什么大家爱用它)

  • 极高的训练稳定性
    • 这是 DPO 最大的杀手锏。PPO 对超参数(如 KL 系数、学习率、优势估算参数)极其敏感,容易出现“模式坍塌”或训练发散。
    • DPO 本质上是带权重的监督学习,损失函数平滑,几乎不需要复杂的调参。
  • 资源消耗低(显存更省)
    • PPO 训练通常需要在显存中同时加载 4 个模型:Actor(策略)、Critic(价值)、Ref(参考)、Reward(奖励)。
    • DPO 只需要加载 2 个模型:Policy(策略)和 Ref(参考)。显存需求减半,训练速度更快。
  • 实现简单
    • 无需构建复杂的采样(Sampling)和优势估算(Advantage Estimation)流程,代码量少,容易集成到现有的 SFT 训练管线中。
4.2.2. DPO 的劣势(为什么它不能完全取代 PPO)
  • 缺乏“在线探索”能力(最大的短板)
    • DPO 是 Off-policy(离线) 算法。它只能根据静态数据集里的 $(y_w, y_l)$ 学习。如果模型已经比数据集里的 $y_w$ 更聪明了,DPO 很难进一步提升模型,因为它没有去尝试生成“更好”的回答。
    • PPO 是 On-policy(在线) 算法。模型在训练过程中会实时生成新的回答,奖励模型会给这些新回答打分。这意味着 PPO 允许模型探索出比训练数据更好的解路径(Explore),从而突破数据的天花板。
  • 对数据分布极其敏感
    • DPO 假设偏好数据中的 $y_l$ 是真的差,$y_w$ 是真的好。如果数据集中包含大量噪声(例如 $y_w$ 其实只比 $y_l$ 好一点点,或者两者都很好/很差),DPO 容易过拟合这些噪声,导致模型学坏。
    • PPO 依靠奖励模型打分,奖励模型可以输出一个标量(比如 4.9 分 vs 4.8 分),比 DPO 的非黑即白(0 或 1)包含更多信息粒度。
  • 泛化能力(OOD)可能较弱
    • 由于缺乏在线采样,DPO 在面对未见过的分布(Out-of-Distribution)时,鲁棒性通常不如经过大量采样探索的 PPO 模型。
场景首选方法原因
追求 SOTA(最强能力)PPO / GRPO需要在线探索,突破数据瓶颈,训练推理能力。
资源受限 / 快速迭代DPO / IPO / KTO简单、稳定、省显存,无需训练奖励模型。
现有趋势Online DPO结合两者:在 DPO 训练中引入在线数据生成,试图兼得 PPO 的探索能力和 DPO 的稳定性。

基于AI反馈的强化学习 (RLAIF)

尽管收集人类偏好数据是标准 RLHF(基于人类反馈的强化学习)的基石,但这一过程面临资源消耗大、周期长且难以扩展的瓶颈。构建数百万条高质量的人类比较数据,不仅需要昂贵的标注平台和严格的质量控制,更需要巨大的人力投入。

基于AI反馈的强化学习(RLAIF) 作为一种极具潜力的替代方案应运而生。其核心理念在于“以AI治AI”——利用一个强大的大语言模型(LLM)代替人类标注员,根据预设的规则或“宪法”生成偏好标签,从而显著降低对人类劳动的依赖。


一、 核心理念与工作机制

RLAIF 的本质是将评估权从人类手中移交给 AI,不再询问人类“哪个回答更好?”,而是指示一个充当裁判的 AI 模型,依据一套明确的行为准则(宪法),对正在训练的模型的输出进行评判。

1.1 RLAIF 标准工作流程

RLAIF 主要改造了标准 RLHF 中的数据收集阶段,其完整流程如下:

  1. 定义指导原则(宪法制定): 确立一套核心规则或原则(即“宪法”),明确目标模型应具备的特征(例如“乐于助人”、“无害”、“逻辑清晰”)。这些原则将作为 AI 标注员的判决依据。

  2. 生成回应: 与标准 RLHF 一样,对于给定的提示词 $x$,使用当前策略模型生成一对回应 $(y_1, y_2)$。

  3. AI 偏好标注: 这是 RLAIF 的关键步骤。将提示词 $x$ 和回应对 $(y_1, y_2)$ 输入到一个独立且能力强大的 AI 模型(称为“AI 标注员”或“偏好模型”)中。该模型根据预定义的宪法原则,判断哪个回应更好。输出结果为偏好标签,区分出胜者 $y_w$ 和败者 $y_l$。

  4. 奖励模型(RM)训练: 利用 AI 生成的偏好数据集 $\{(x, y_w, y_l)\}$ 训练奖励模型。训练目标通常采用 Bradley-Terry 模型,旨在最大化偏好回应与非偏好回应之间的分差:

    $$ r_\theta(x, y_w) > r_\theta(x, y_l) $$
  5. 强化学习微调: 使用 PPO(近端策略优化)等算法对目标大模型进行微调。优化目标是最大化 AI 训练出的奖励模型 $r_\theta$ 的信号,同时受到 KL 散度约束,以防止模型偏离初始分布。

1.2 流程图示 (Mermaid)

graph TD subgraph "RLAIF 核心流程" direction TB Input(("输入提示 x")) --> Policy["策略模型 π_φ"] subgraph Generation [样本生成] Policy --> Y1[回应 y1] Policy --> Y2[回应 y2] end subgraph AILabeling [AI 偏好标注] Constitution[/"宪法 (指导原则)"/] --> AI_Labeler{{AI 标注模型}} Input --> AI_Labeler Y1 --> AI_Labeler Y2 --> AI_Labeler AI_Labeler --> PrefData[/"AI 偏好数据 (x, yw, yl)"/] end PrefData --> TrainRM["奖励模型 (RM) 训练"] TrainRM -->|"提供奖励信号 r_θ"| PPO["强化学习微调 (PPO)"] Policy -.->|迭代更新| PPO end style Input fill:#e1f5fe,stroke:#01579b style AI_Labeler fill:#f3e5f5,stroke:#4a148c style Constitution fill:#fff9c4,stroke:#fbc02d style TrainRM fill:#e8f5e9,stroke:#1b5e20 style PPO fill:#fce4ec,stroke:#880e4f

二、 经典案例:宪法 AI (Constitutional AI)

Anthropic 提出的“宪法 AI”是 RLAIF 理念最著名的落地实践。其目标是将被动的人类监督转化为明确的书面原则,从而实现更安全、更可控的模型对齐。

2.1 宪法起草

首先定义一系列原则(例如源自《联合国人权宣言》条款或特定的无害化规则),构成模型的“宪法”。

2.2 监督学习阶段(批评与修订)

在进入强化学习之前,宪法 AI 包含一个独特的自我修正过程:

  • 模型生成初始回应。
  • 模型自我批评(Critique):根据宪法指出回应中的问题。
  • 模型自我修订(Revise):根据批评意见重写回应。
  • 利用这些“修订后”的高质量数据进行监督微调(SFT),让模型初步学会遵循原则。

2.3 强化学习阶段(AI 反馈)

这一阶段与通用的 RLAIF 流程一致:

  • 模型生成回应对。
  • AI 标注员根据宪法原则判断优劣,生成偏好数据 $(x, y_w, y_l)$。
  • 训练奖励模型并进行 PPO 微调。

通过这种方式,宪法 AI 成功将复杂的价值观植入模型,而无需人类对数百万个样本进行逐一审核。


三、 RLAIF 的核心优势

  1. 极佳的可扩展性 (Scalability): AI 标注员的生成速度远超人类,且成本极低。这使得构建超大规模的偏好数据集成为可能,不再受限于人力预算。
  2. 评判一致性 (Consistency): 不同的人类标注员可能对同一原则有不同的理解,导致数据噪声。相比之下,如果宪法定义清晰,AI 标注员的判决标准往往更加统一和稳定。
  3. 定向对齐 (Targeted Alignment): 对于某些极其细致或枯燥的规则(例如“必须包含三个论据”或“推理步骤不能跳跃”),人类容易疲劳或疏忽,而 RLAIF 可以严格且不知疲倦地执行这些特定指令。

四、 挑战与关键考量

尽管 RLAIF 前景广阔,但它并非完美的解决方案,主要面临以下挑战:

4.1 AI 反馈的质量瓶颈

整个流程的上限取决于 AI 标注员的能力。如果作为裁判的 AI 模型误解了宪法、存在内在偏见或逻辑缺陷,这些错误将被直接编码进奖励模型,并在最终模型中被放大。**“垃圾进,垃圾出”**在 RLAIF 中体现得尤为明显。

4.2 宪法工程 (Constitution Engineering)

制定一部有效的“宪法”是一项复杂的工程挑战。

  • 原则必须全面且无歧义,防止模型利用规则漏洞(Reward Hacking)。
  • 定义不清的原则可能导致模型产生怪异或过度防御的行为(例如拒绝回答所有稍微敏感的问题)。

4.3 对齐的本质悖论

RLAIF 引发了一个哲学与技术层面的追问:在将模型对齐到人类价值观,还是仅仅对齐到AI 对人类价值观的理解? 如果 AI 裁判对某些社会规范的理解有偏差,RLAIF 可能会加剧这种偏差,而不是纠正它。这种递归式的对齐风险不容忽视。

4.4 模型能力门槛

RLAIF 通常需要一个极其强大的“前沿模型”(如 GPT-4 级别)来担任标注员。对于很多资源受限的团队,获取或部署这样一个高性能的教师模型本身就是巨大的门槛。


组相对策略优化 (GRPO)

在DPO成功简化RLHF流程的基础上,研究人员并未停止探索。尽管DPO解决了PPO的复杂性和不稳定性问题,但其离线学习的本质限制了模型的探索能力,难以突破训练数据的质量天花板。组相对策略优化(Group Relative Policy Optimization, GRPO) 作为一种新兴的对齐方法,巧妙地在简洁性与探索能力之间找到了平衡点。

GRPO 的核心创新在于移除了评论家(Critic)模型。它不再依赖神经网络来预测每个状态的价值,而是通过对同一提示(Prompt)采样一组输出,利用这组输出的群体统计特征来直接计算优势(Advantage)。这一改变大幅降低了显存占用,使得在资源受限的情况下训练超大模型成为可能。


一、 核心理念:摒弃评论家,拥抱群体智慧

为了理解 GRPO 的突破,需要对比 PPO 的痛点:

1.1 PPO 的“双模型”负担

在 PPO 中,计算优势函数 $A_t$ 通常依赖于广义优势估计(GAE)。这需要一个独立的 Critic 模型 $V_\phi(s)$ 来预测当前状态的预期回报。

  • 显存黑洞:这意味着在训练时,显存中不仅要放策略模型(Actor),还要放一个同样巨大的 Critic 模型,以及它们的梯度和优化器状态。对于 70B+ 的模型,这几乎是不可承受之重。

1.2 GRPO 的“组相对”机制

GRPO 放弃了训练 Critic 模型。其逻辑非常直观:没有对比就没有伤害。 要判断一个回答好不好,不需要一个绝对的打分员(Critic),只需要让模型针对同一个问题生成一组回答(例如 64 个),然后看哪个回答在这一组中表现突出。

  • 组基线(Group Baseline):这一组回答的平均奖励,就充当了基线。
  • 相对优势:高于平均分的回答获得正向更新,低于平均分的受到抑制。

二、 数学原理与工作流程

GRPO 的数学形式极其简洁,它巧妙地修改了 PPO 的目标函数。

2.1 算法步骤

  1. 采样(Group Sampling): 对于每一个输入提示 $q$,从旧策略 $\pi_{\theta_{old}}$ 中采样一组输出 $\{o_1, o_2, ..., o_G\}$,其中 $G$ 是组大小(Group Size)。
  2. 奖励计算: 使用奖励模型(RM)或基于规则的验证器(如代码编译器、数学答案检查器)对每个输出 $o_i$ 进行打分,得到奖励集合 $\{r_1, r_2, ..., r_G\}$。
  3. 优势估计(Advantage Estimation): 这是 GRPO 的灵魂。它通过标准化组内奖励来计算优势 $A_i$: $$ A_i = \frac{r_i - \text{mean}(\{r_1...r_G\})}{\text{std}(\{r_1...r_G\}) + \epsilon} $$ 其中,$\text{mean}$ 和 $\text{std}$ 分别是该组奖励的均值和标准差。
  4. 策略优化: 将计算出的 $A_i$ 代入类似 PPO 的裁剪(Clipped)目标函数中进行更新。

2.2 目标函数

GRPO 的损失函数如下:

$$ J_{GRPO}(\theta) = \mathbb{E}_{q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{old}}(O|q)} \left[ \frac{1}{G} \sum_{i=1}^G \left( \min \left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{old}}(o_i|q)} A_i, \text{clip}(\dots) A_i \right) - \beta D_{KL}(\pi_\theta || \pi_{ref}) \right) \right] $$
  • 第一项:PPO 风格的裁剪目标,确保策略更新步幅不会过大,但优势 $A_i$ 来自组内标准化。
  • 第二项:KL 散度惩罚,确保模型不偏离参考模型 $\pi_{ref}$ 太远。在 GRPO 中,这通常是一个无偏的近似计算。

三、 工作流图示 (Mermaid)

GRPO 的流程比 PPO 更精简,完全去除了 Critic 更新的旁路。

graph TD subgraph "GRPO 训练流程" direction TB Input[("输入提示 q")] --> Policy["策略模型 π_θ (Actor)"] %% 修复点:subgraph 的标签必须用双引号包裹 subgraph Group_Sampling ["组采样 (Group Size = G)"] Policy --> O1["输出 o_1"] Policy --> O2["输出 o_2"] Policy --> ON["... 输出 o_G"] end subgraph Evaluation ["评估与奖励"] O1 --> RM["奖励模型 / 规则系统"] O2 --> RM ON --> RM RM --> R_List["奖励集 {r_1, ..., r_G}"] end subgraph Advantage_Calc ["组相对优势计算"] R_List --> Norm["标准化: (r - mean) / std"] Norm --> Adv["优势值 A_1, ..., A_G"] end subgraph Optimization ["策略更新"] Adv --> Loss["计算 GRPO 损失 (含 KL 惩罚)"] Loss --> BP["反向传播更新 π_θ"] end end style Input fill:#e1f5fe,stroke:#01579b style Policy fill:#e3f2fd,stroke:#1565c0 style RM fill:#fff9c4,stroke:#fbc02d style Advantage_Calc fill:#fce4ec,stroke:#880e4f style Optimization fill:#e8f5e9,stroke:#1b5e20

四、 GRPO 与 PPO 的对比优势

特性PPO (传统 RLHF)GRPO (组相对策略优化)
模型结构Actor + Critic (双模型)仅 Actor (单模型)
显存占用极高 (需存储 Critic 及其状态) (节省约 30%-50% 显存)
基线估计依赖 Critic 神经网络预测依赖当前组(Group)的平均表现
计算瓶颈前向/后向传播计算量大推理(生成采样)计算量大
适用场景通用场景推理任务(数学/代码),强规则奖励场景
稳定性对超参数敏感,Critic 难训相对稳定,基线来自真实数据分布

五、 为什么 GRPO 在推理模型(如 DeepSeek-R1)中至关重要?

GRPO 并不仅仅是为了省显存,它与**推理能力(Reasoning)**的训练有着天然的契合:

  1. 结果导向的奖励 (Outcome Reward): 在数学或代码任务中,通常只关心“答案对不对”或“测试用例过没过”。这种奖励是稀疏的。GRPO 通过一次生成多个解题路径,即便大部分错了,只要有一个对了,通过组内标准化,那个对的路径就会获得极大的正向优势(Advantage),而错的路径会受到抑制。
  2. 自我探索 (Self-Correction): 通过移除 Critic,GRPO 迫使模型在“组”的维度上进行竞争。模型必须在这一次采样中生成比自己平均水平更好的回答才能获得奖励。这天然地鼓励了模型去探索多样化的解题思路(Chain of Thought)。
  3. 消除 Critic 的误差: 在推理任务中,训练一个能准确预测“这道高数题做到第3步能不能做对”的 Critic 模型极具挑战性。Critic 的预测误差往往会导致 PPO 训练崩溃。GRPO 直接用事实结果(组内平均分)说话,规避了 Critic 估值不准的问题。

通过AI反馈的强化学习验证推理 (RLVR-AI)

随着大语言模型在数学、代码、科学推理等领域的应用日益深入,一个关键挑战浮出水面:如何让模型不仅给出答案,更重要的是给出可验证的正确推理过程?传统的RLHF方法(包括PPO、DPO、GRPO)主要优化"结果正确性",但往往忽视了"过程正确性"——模型可能因为错误的原因得到正确答案,或者生成看似合理但逻辑错误的推理链。

通过AI反馈的强化学习验证推理(Reinforcement Learning with Verifiable Rewards from AI feedback, RLVR-AI) 是DeepSeek在2025年提出的创新方法,专门针对**过程监督(Process Supervision)**而设计。其核心理念是:利用AI系统自动验证推理过程的每一步,并据此提供细粒度的反馈信号,从而引导模型学会"正确地思考"而非"碰巧答对"。

RLVR-AI特别适合那些具有**可验证性(Verifiability)**的任务——即存在确定性规则可以判断推理步骤正误的场景,如数学证明、代码执行、形式化逻辑等。


一、 核心理念:从结果监督到过程监督

1.1 传统方法的致命缺陷:结果监督的盲点

问题示例:数学题求解

考虑一个简单的数学问题:

问题:求解方程 $2x + 3 = 11$

模型A的推理

步骤1: 2x + 3 = 11
步骤2: 2x = 11 - 3
步骤3: 2x = 8
步骤4: x = 4
答案: x = 4 ✓

模型B的推理

步骤1: 2x + 3 = 11
步骤2: 2x = 11 + 3  [错误:符号反了]
步骤3: 2x = 14
步骤4: x = 7
步骤5: 验证:2(7) + 3 = 17 ≠ 11,重新计算
步骤6: 2x = 11 - 3 = 8
步骤7: x = 4
答案: x = 4 ✓

在传统的**结果监督(Outcome Supervision)**模式下:

  • 两个模型都得到 $x=4$,因此获得相同的奖励
  • 奖励模型无法区分"一次性正确推理"和"试错后碰巧答对"
  • 模型B的错误推理过程没有受到惩罚

这导致严重问题:

  1. 虚假能力提升:模型可能通过大量尝试碰运气,而非真正理解逻辑
  2. 不可靠性:在稍复杂的问题上,试错策略会快速失效
  3. 资源浪费:生成大量错误的中间步骤

1.2 过程监督的必要性

过程监督(Process Supervision)**要求模型的**每一步推理都正确,而不仅仅是最终答案:

对于上述例子,理想的反馈应该是:

模型步骤2正确性步骤3正确性最终得分
A1.0
B✗ (符号错误)✗ (传播错误)0.3

这种细粒度的反馈能够:

  • 精确定位错误:明确指出在哪一步出了问题
  • 强化正确路径:奖励每一个正确的推理步骤
  • 避免侥幸成功:即使最终答案对,错误步骤也会被扣分

1.3 RLVR-AI的核心洞见

传统的过程监督面临一个核心困境:人工标注每一步的正确性成本极高。对于一个包含10步推理的数学题,人类需要逐步验证每个等式、每个逻辑推导,工作量是标注最终答案的10倍以上。

RLVR-AI的突破在于:利用AI系统(而非人类)自动验证推理过程。关键组件包括:

  1. 规则验证器(Rule-based Verifier)
    • 对于数学:检查等式变换是否符合代数规则
    • 对于代码:执行每一步并检查输出
    • 对于逻辑推理:验证三段论是否成立
  2. 蒙特卡洛过程奖励模型(Monte Carlo Process Reward Model, MC-PRM)
    • 通过多次采样评估每一步的"成功率"
    • 将未来可能导致正确答案的概率作为过程奖励
    • 自动学习哪些中间步骤更有价值

为什么AI验证可以替代人工标注?

这是RLVR-AI最具争议也是最核心的假设。

1. 验证比生成更简单

这是计算复杂性理论中的经典原理(P vs NP):

  • 生成正确答案:需要搜索巨大的可能空间(困难)
  • 验证给定答案:只需检查是否满足约束条件(简单)

例如:

  • 找到大质数的两个因子:困难(RSA加密依赖此性质)
  • 验证两个数相乘是否等于目标:简单(小学算术)
2. 形式化领域的天然优势

在数学、代码、逻辑等领域,存在确定性规则

# 代码验证示例
def verify_step(code_line, input_state, expected_output):
    actual_output = execute(code_line, input_state)
    return actual_output == expected_output
3. 蒙特卡洛方法的统计保证

即使单次验证可能出错,通过多次采样:

$$ P(\text{正确步骤被误判}) < \epsilon^N $$

其中 $N$ 是采样次数,$\epsilon$ 是单次错误率。

当 $N=100$,$\epsilon=0.1$ 时,误判概率 < $10^{-100}$(几乎不可能)

4. 局限性:不适用于主观任务

RLVR-AI 不能用于创意写作、艺术评价等主观任务:

  • 这些任务没有"客观正确"的中间步骤
  • 验证器无法自动判断"这个比喻是否恰当"
  • 必须依赖人类判断

二、 RLVR-AI 架构与组件

RLVR-AI不是单一算法,而是一个包含多个协同工作组件的系统。

2.1 系统架构图

graph TB subgraph "训练数据准备" Problems[("问题集
(数学/代码)")] --> SFT_Model["SFT基座模型"] SFT_Model -->|生成| Samples["多样本推理
(每题生成K个解答)"] end subgraph "验证与标注" Samples --> Verifier["规则验证器"] Verifier -->|逐步验证| StepLabels["步骤级别标签
(✓/✗ for each step)"] Samples --> Executor["执行器
(运行代码/计算)"] Executor -->|最终结果| OutcomeLabels["结果标签
(正确/错误)"] end subgraph "过程奖励建模" StepLabels --> MCPRM["MC-PRM训练"] OutcomeLabels --> MCPRM MCPRM --> PRM["过程奖励模型
r_step(s_t, a_t)"] end subgraph "强化学习优化" PRM --> RL["RL算法
(PPO/GRPO)"] SFT_Model -->|π_ref| RL Problems --> RL RL --> Optimized["优化后策略
π_θ"] end Optimized -.->|迭代收集新样本| Samples style SFT_Model fill:#e1f5fe,stroke:#01579b style Verifier fill:#fff9c4,stroke:#fbc02d style PRM fill:#f3e5f5,stroke:#4a148c style Optimized fill:#e8f5e9,stroke:#1b5e20

2.2 关键组件详解

2.2.1 规则验证器(Rule-based Verifier)

针对不同领域设计专门的验证逻辑:

数学领域

class MathVerifier:
    def verify_step(self, equation_before, equation_after, operation):
        """验证从 equation_before 到 equation_after 的变换是否合法"""
        
        # 示例:验证移项操作
        if operation == "移项":
            # 检查等号两边是否平衡
            left_diff = parse(equation_before.left) - parse(equation_after.left)
            right_diff = parse(equation_after.right) - parse(equation_before.right)
            return sympy.simplify(left_diff - right_diff) == 0
        
        # 示例:验证同乘操作
        elif operation == "同乘":
            ratio = sympy.simplify(equation_after / equation_before)
            # 检查等号两边乘以相同的数
            return ratio.left == ratio.right
        
        # ... 其他规则

代码领域

class CodeVerifier:
    def verify_step(self, code_line, context, expected_behavior):
        """通过执行验证代码行的正确性"""
        
        # 在隔离环境中执行
        try:
            result = safe_execute(
                code_line, 
                context.variables,
                timeout=1.0  # 防止死循环
            )
            
            # 检查是否符合预期
            return self.check_behavior(result, expected_behavior)
        except Exception as e:
            return False  # 运行时错误 = 步骤错误

2.2.2 蒙特卡洛过程奖励模型(MC-PRM)

MC-PRM通过统计方法学习"哪些中间步骤更有价值"。

训练数据构造

  1. 多路径采样:对每个问题生成 $K$ 个完整推理链

  2. 步骤级别标注

    {
        "problem": "求解 2x + 3 = 11",
        "solution_paths": [
            {
                "steps": [
                    {"text": "2x = 11 - 3", "verified": True},
                    {"text": "2x = 8", "verified": True},
                    {"text": "x = 4", "verified": True}
                ],
                "final_correct": True
            },
            {
                "steps": [
                    {"text": "2x = 11 + 3", "verified": False},  # 错误步骤
                    {"text": "x = 7", "verified": False},
                    {"text": "重新计算...", "verified": True}
                ],
                "final_correct": True  # 最终答对但过程有误
            }
        ]
    }
    
  3. MC估计:对于步骤 $s_t$,计算"从此步出发,最终答对的概率"

    $$ r_{MC}(s_t) = \frac{\text{包含}s_t\text{且最终正确的路径数}}{\text{包含}s_t\text{的总路径数}} $$

PRM训练目标

$$ L_{PRM} = -\mathbb{E}*{(s_t, a_t, r*{MC}) \sim D} \left[ r_{MC} \log \hat{r}*{PRM}(s_t, a_t) + (1-r*{MC}) \log(1-\hat{r}_{PRM}(s_t, a_t)) \right] $$

这是一个二分类问题:预测给定步骤是否会导致正确答案。

2.2.3 强化学习优化器

使用PRM提供的细粒度奖励信号训练策略:

$$ r_{total}(x, y) = \sum_{t=1}^{T} \gamma^{t-1} \cdot r_{PRM}(s_t, a_t) + \lambda \cdot \mathbb{1}[\text{final correct}(y)] $$

其中:

  • $\gamma$:折扣因子(典型值0.9-0.99),使模型更关注早期步骤
  • $\lambda$:结果奖励权重(平衡过程与结果)
  • $\mathbb{1}[\text{final correct}]$:最终答案正确性指示函数

可以使用PPO或GRPO作为优化算法,区别在于:

  • PPO-RLVR:需要价值网络估计长期回报
  • GRPO-RLVR:使用组内均值作为基线

三、 与现有方法的对比

3.1 奖励信号粒度对比

方法奖励粒度信号来源标注成本推理质量
传统PPO整体回复人类偏好中等⭐⭐⭐
DPO整体回复偏好对比中等⭐⭐⭐
GRPO整体回复奖励模型中等⭐⭐⭐⭐
ORM (Outcome RM)最终答案自动验证(结果)⭐⭐⭐
PRM (Process RM)每个步骤人工标注(过程)极高⭐⭐⭐⭐⭐
RLVR-AI每个步骤AI验证(过程)⭐⭐⭐⭐⭐

关键发现

  • RLVR-AI是唯一同时满足"细粒度反馈"和"低标注成本"的方法
  • 相比人工PRM,标注成本降低100倍以上
  • 相比ORM,推理可靠性提升显著

3.2 训练流程对比

graph LR subgraph "传统RLHF (PPO/DPO/GRPO)" H1[问题] --> G1[生成完整回复] G1 --> R1[整体评分] R1 --> U1[策略更新] end subgraph "人工PRM" H2[问题] --> G2[生成完整回复] G2 --> A2[人工逐步标注] A2 --> T2[训练PRM] T2 --> R2[步骤级奖励] R2 --> U2[策略更新] end subgraph "RLVR-AI" H3[问题] --> G3[生成多个推理链] G3 --> V3[AI自动验证] V3 --> M3[MC-PRM] M3 --> R3[步骤级奖励] R3 --> U3[策略更新] end style A2 fill:#ffcdd2,stroke:#c62828 style V3 fill:#c8e6c9,stroke:#2e7d32

3.3 实际案例对比

问题:编写Python函数计算斐波那契数列第n项

模型对比

DPO模型的输出(关注结果)

def fib(n):
    # 直接给出能工作的代码
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(n-1):
        a, b = b, a+b
    return b

评价

  • ✓ 最终答案正确
  • ✗ 没有注释说明思路
  • ✗ 边界条件处理不明确
  • DPO得分:0.8(结果对即可)
def fib(n):
    """
    步骤1: 处理基础情况
    当n=0时,F(0)=0
    当n=1时,F(1)=1
    """
    if n <= 1:
        return n  # ✓ 验证器:基础情况正确
    
    """
    步骤2: 初始化前两项
    F(0)=0, F(1)=1
    """
    a, b = 0, 1  # ✓ 验证器:初始值正确
    
    """
    步骤3: 迭代计算
    F(i) = F(i-1) + F(i-2)
    需要迭代 n-1 次
    """
    for i in range(2, n+1):  # ✓ 验证器:循环边界正确
        a, b = b, a+b  # ✓ 验证器:递推关系正确
    
    return b  # ✓ 验证器:返回正确项

评价

  • ✓ 每一步都有清晰说明
  • ✓ 逻辑推导可验证
  • ✓ 边界条件明确
  • RLVR-AI得分:1.0(过程+结果都对)

RLHF方法演进

timeline title RLHF方法演进史 2017 : PPO算法 : OpenAI提出 2022 : InstructGPT : PPO-RLHF成功应用 2023 : DPO : 简化RLHF流程 2024 : GRPO : 平衡探索与稳定 : RLVR-AI : 引入过程监督 2025 : R1模型 : RLVR大规模应用