告别 Value Model:深度解析 GRPO 与 PPO 的核心差异

大家好,我是你们的老朋友,一名在代码世界摸爬滚打多年的技术博主。

最近,随着 DeepSeek-R1 等开源模型的爆火,GRPO(Group Relative Policy Optimization) 这个词频繁出现在大家的视野中。很多开发者朋友在后台留言问我:“GRPO 到底是什么?它和经典的 PPO 有什么区别?为什么现在大模型训练都在转向 GRPO?”

今天,我们就抛开晦涩的数学公式,用最通俗易懂的语言,结合图表和代码逻辑,彻底讲清楚 GRPO 和 PPO 的核心区别,特别是它们在信用分配优势估计方差控制这三个关键维度上的不同。


一句话概括核心差异

如果要用最简短的话来总结两者的区别,那就是:

PPO:依赖一个额外的“价值模型(Value Model)”来估计当前状态的好坏,通过 Reward - Value 计算优势。

GRPO不再训练价值模型,而是让同一个 Prompt 生成一组回答,通过“组内相对奖励”来计算优势。

本质上,GRPO 是 PPO 在大语言模型(LLM)场景下的一种简化与改进。它砍掉了最难训练的 Value Model,用更简单的统计方法实现了更稳定的训练效果。


一、 PPO 的传统流程与痛点

要理解 GRPO 的好,先得看看 PPO 在 LLM 场景下的“难”。

1. PPO 是如何工作的?

在传统的 PPO(Proximal Policy Optimization)算法中,训练流程通常包含两个模型:

  1. 策略模型(Actor):负责生成文本。
  2. 价值模型(Critic/Value Model):负责评估当前生成的文本状态值 V ( s ) V(s) V(s)

其核心计算公式为:
A d v a n t a g e = R e w a r d − V ( s ) Advantage = Reward - V(s) Advantage=RewardV(s)

也就是说,PPO 认为一个动作(Token)好不好,要看它的实际奖励比“预期价值”高多少。

2. PPO 在 LLM 中的困境

虽然 PPO 在游戏控制等领域表现优异,但在面对动辄几十亿参数、序列极长的 LLM 时,它暴露出了严重的问题:

  • Value Model 极难训练:文本的状态空间是离散且巨大的,Token 序列很长,导致 Value Model 很难准确预测每一步的价值。
  • 训练成本高昂:你需要额外维护一个和 Actor 参数量相当的 Critic 模型,显存占用翻倍。
  • 误差传播:如果 Value Model 估计不准(这在 LLM 中很常见),那么计算出的 Advantage 就会偏差巨大,直接导致策略更新方向错误,训练不稳定甚至崩溃。

生成 Token

给出 Reward

估计 V(s)

Advantage = R - V

Prompt

Actor Model

Response

Reward Model

PPO Advantage

Critic / Value Model

Policy Update

图中红色部分展示了 PPO 中难以训练的 Value Model 模块。


二、 GRPO 的核心思想:化繁为简

GRPO(Group Relative Policy Optimization)由 DeepSeek 团队提出,它的核心思想非常直观:既然绝对价值很难估,那我们就比相对好坏。

1. 不需要 Value Model

GRPO 直接移除了 Critic/Value Model。这意味着:

  • 显存节省:少训练一个大模型。
  • 稳定性提升:消除了 Value 估计误差带来的噪声。

2. “分组”生成与比较

GRPO 的做法是:对于同一个 Prompt,让 Actor 模型一次性生成 G G G 个不同的回答(例如 4 个或 8 个)。

举个例子:

Prompt: “请解释糖尿病的成因。”

生成的回答组:

  • 回答 A: 详细且准确… (Reward: 0.9)
  • 回答 B: 较为准确… (Reward: 0.7)
  • 回答 C: 有错误… (Reward: 0.2)
  • 回答 D: 一般… (Reward: 0.5)

3. 如何计算 Advantage?

GRPO 不再使用 R − V R - V RV,而是计算组内均值,然后看每个回答偏离均值多少。

  1. 计算组内平均奖励:
    μ = 0.9 + 0.7 + 0.2 + 0.5 4 = 0.575 \mu = \frac{0.9 + 0.7 + 0.2 + 0.5}{4} = 0.575 μ=40.9+0.7+0.2+0.5=0.575

  2. 计算每个回答的优势(Advantage):

    • A d v A = 0.9 − 0.575 = 0.325 Adv_A = 0.9 - 0.575 = 0.325 AdvA=0.90.575=0.325 (比平均好,强化!)
    • A d v B = 0.7 − 0.575 = 0.125 Adv_B = 0.7 - 0.575 = 0.125 AdvB=0.70.575=0.125 (比平均好,轻微强化)
    • A d v C = 0.2 − 0.575 = − 0.375 Adv_C = 0.2 - 0.575 = -0.375 AdvC=0.20.575=0.375 (比平均差,抑制!)
    • A d v D = 0.5 − 0.575 = − 0.075 Adv_D = 0.5 - 0.575 = -0.075 AdvD=0.50.575=0.075 (略低于平均,轻微抑制)

本质逻辑:谁比这一组的平均水平好,就强化谁;谁比平均水平差,就惩罚谁。

Prompt

Actor 生成 G 个回答

Response 1

Response 2

Response 3

Response 4

Reward Model 打分

计算组内 Mean & Std

计算 Relative Advantage

策略更新

图中绿色部分展示了 GRPO 如何通过统计组内数据来替代复杂的 Value Model。


三、 深度对比:信用分配、优势估计与方差控制

这是大家最关心的技术细节,我们从三个维度逐一拆解。

1. 信用分配(Credit Assignment)

信用分配指的是:如何判断某个具体的动作(Token)对最终结果贡献了多少?

  • PPO(绝对视角)

    • 依赖 Value Model 来判断当前状态 s s s 的绝对价值。
    • 问题:在长文本生成中,中间某个 Token 的好坏很难通过一个标量 V ( s ) V(s) V(s) 准确体现。Value 模型容易“瞎猜”,导致信用分配偏差。
  • GRPO(相对视角)

    • 不依赖绝对价值,而是基于组内相对比较
    • 优势:在同一个 Prompt 下,不同回答之间的语义差异是可控的。如果回答 A 比回答 B 得分高,那么 A 中特有的那些 Token 就更值得被强化。这种“排序优化”的思路更符合 LLM 的训练直觉——我们往往很难定义什么是“绝对完美”的回答,但很容易判断“A 比 B 好”。

2. 优势估计(Advantage Estimation)

  • PPO

    • 通常使用 GAE (Generalized Advantage Estimation)
    • 公式涉及 λ \lambda λ γ \gamma γ 等超参数,且严重依赖 Value Network 的输出。
    • 属于绝对优势估计
  • GRPO

    • 直接使用统计量:
      A i = r i − mean ( g r o u p ) std ( g r o u p ) + ϵ A_i = \frac{r_i - \text{mean}(group)}{\text{std}(group) + \epsilon} Ai=std(group)+ϵrimean(group)
    • 这里不仅减去了均值,还除以了标准差进行标准化。
    • 属于相对优势估计。这种方法简单粗暴但极其有效,因为它自动适应了不同 Prompt 的难度分布。

3. 方差控制(Variance Reduction)

在强化学习中,高方差会导致训练震荡,无法收敛。我们需要降低方差。

  • PPO 的做法

    • 引入 Value Baseline。因为 V ( s ) V(s) V(s) 是一个基准线,减去它可以减少 Reward 波动带来的影响。
    • 风险:如果 Baseline ( V ( s ) V(s) V(s)) 本身估计不准,反而会增加噪声。
  • GRPO 的做法

    • 利用 组内均值归一化
    • 为什么有效? 因为同一组回答是针对同一个 Prompt 生成的,它们的 Reward 分布天然具有相似性(同分布)。减去组内均值,相当于去除了该 Prompt 本身的“难度基线”(有些问题本身就难,得分普遍低;有些简单,得分普遍高)。
    • 除以标准差则进一步将优势映射到统一的尺度上,极大地稳定了梯度更新。

四、 为什么 GRPO 特别适合 LLM?

总结起来,GRPO 在大模型领域取代 PPO 成为主流,主要归功于以下三点:

  1. 工程极简,成本降低
    不需要训练和维护庞大的 Value Model,显存占用显著降低,训练链路更短,调试更容易。

  2. 符合“排序”直觉
    LLM 的本质往往是 Next Token Prediction,而在 RLHF 阶段,我们更关心的是偏好排序(Preference Ranking)。GRPO 的组内比较机制天然契合“优选法”,即在一堆候选中挑出最好的进行强化。

  3. 训练更稳定
    避免了 PPO 中常见的“Value Model 崩塌”问题。在 PPO 训练中,经常会出现 Actor 和 Critic 互相博弈导致发散的情况,而 GRPO 通过统计归一化,使得梯度方向更加稳健。


五、 代码逻辑示例

为了让大家更直观地理解 GRPO 的优势计算过程,这里提供一段简化的 Python 伪代码逻辑:

import numpy as np

def compute_grpo_advantages(rewards):
    """
    计算 GRPO 的优势值
    :param rewards: 同一组 prompt 生成的多个回答的奖励列表, e.g., [0.9, 0.7, 0.2, 0.5]
    :return: 优势值列表
    """
    rewards = np.array(rewards)
    
    # 1. 计算组内均值
    mean_reward = np.mean(rewards)
    
    # 2. 计算组内标准差
    std_reward = np.std(rewards)
    
    # 3. 计算优势 (标准化处理)
    # epsilon 防止除以零
    advantages = (rewards - mean_reward) / (std_reward + 1e-8)
    
    return advantages

# 示例数据
group_rewards = [0.9, 0.7, 0.2, 0.5]
advantages = compute_grpo_advantages(group_rewards)

print(f"Rewards: {group_rewards}")
print(f"Advantages: {advantages}")
# 输出类似:
# Rewards: [0.9, 0.7, 0.2, 0.5]
# Advantages: [ 1.18,  0.59, -1.48, -0.29] 
# 正值表示优于平均,负值表示劣于平均

这段代码清晰地展示了 GRPO 如何通过简单的统计运算,完成了原本需要复杂神经网络才能完成的优势估计任务。


六、 总结

特性 PPO GRPO
价值模型 (Critic) 需要,且难以训练 不需要,直接移除
优势估计方式 绝对优势 ( R − V R - V RV) 相对优势 ( R − Mean g r o u p R - \text{Mean}_{group} RMeangroup)
方差控制手段 Value Baseline 组内均值与标准差归一化
信用分配逻辑 依赖状态价值估计 依赖组内相对排序
LLM 训练稳定性 较低,易受 Critic 误差影响 ,统计特性更稳定
资源消耗 高 (需额外显存跑 Critic) 低 (仅需 Actor + Reward Model)

最后总结一下:

PPO 像是一个严谨但沉重的会计师,试图精确计算每一笔账目的绝对价值,但常常因为账目太复杂(LLM 状态空间大)而算错。

GRPO 则像是一个聪明的竞赛评委,它不关心绝对分数是多少,只关心在这一组选手中,谁比平均分高,谁就是优胜者。这种相对主义的智慧,恰恰解决了大模型训练中的诸多难题。

希望这篇文章能帮你理清 GRPO 和 PPO 的关系。如果你正在尝试微调大模型,不妨试试 GRPO,它可能会给你带来惊喜!


参考资料

  1. DeepSeek Technical Report: DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
  2. PPO Original Paper: Proximal Policy Optimization Algorithms
  3. Hugging Face Transformers RLHF Docs: Reinforcement Learning from Human Feedback
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐