Q10:你知道Deepseek的GRPO吗,它和PPO的主要区别是什么?优劣是什么
P2 · llm_training · 🏢 DeepSeek
🏷 标签:grpo, ppo, rhlf, deepseek
1️⃣ 考察意图
面试官想考察你对 RLHF 前沿变体的理解深度,以及能否从工程和理论层面对比 PPO 与 GRPO。这属于系统设计 + 工程取舍类问题,刁钻点在于:GRPO 并非简单“去掉价值网络”,而是重新定义了优势函数计算方式,这涉及到训练稳定性、计算效率与策略多样性的权衡。答好了能展示你对强化学习在 LLM 中落地的硬核理解,包括对 DeepSeek 论文细节的掌握,以及从计算资源、奖励噪声、收敛速度等维度做技术选型的能力。
2️⃣ 标准答
GRPO(Group Relative Policy Optimization) 是 DeepSeek 在 2024 年提出的 RLHF 变体,核心创新是用组内相对奖励替代价值网络,从而简化训练流程。下面从原理、区别、优劣三个层面展开。
原理对比:PPO vs GRPO
- PPO:依赖一个价值网络(critic)来估计状态价值函数 V(s),然后计算优势函数 A(s,a) = Q(s,a) - V(s)。这需要额外训练一个与策略网络规模相当的模型,且价值网络容易过拟合或产生偏差,导致优势估计不准。
- GRPO:对同一个 prompt 采样多个输出(group),计算组内每个输出的奖励,然后用组内奖励的均值作为基线,替代价值网络。优势函数变为:A_i = (r_i - mean(r_group)) / std(r_group)。这本质上是组内归一化,让优势函数只反映相对好坏,而非绝对价值。
关键区别(3 点)
- 价值网络 vs 组内基线:PPO 需要额外训练 critic,GRPO 完全去掉 critic,用采样组的统计量代替。这直接减少了模型参数量和训练显存占用(约 30-40% 的 critic 参数被移除)。
- 优势函数计算:PPO 的 A(s,a) 依赖于时序差分(TD)误差,需要多步 rollout 和 GAE(Generalized Advantage Estimation);GRPO 的 A_i 是单步组内归一化,计算更简单,但牺牲了时序信息。
- 策略更新约束:两者都用 clip 机制限制策略更新幅度,但 GRPO 的 clip 作用于组内相对优势,PPO 作用于绝对优势。这意味着 GRPO 对奖励噪声更鲁棒——如果整个组奖励都偏高,归一化后优势仍会居中,避免策略过度偏移。
优劣分析
- 优势:计算效率高:去掉 critic 后,训练显存减少约 30-40%,且无需维护价值网络的优化器状态。在 DeepSeek-Math 论文中,GRPO 在 7B 模型上训练速度比 PPO 快约 1.5 倍。
- 避免价值网络偏差:critic 在长序列或稀疏奖励场景下容易崩溃(例如数学推理中只有最终答案正确才有奖励),GRPO 的组内归一化天然解决了这个问题。
- 奖励信号更稳定:组内相对奖励消除了全局奖励尺度的影响,使得策略更新更平滑。DeepSeek 在 Code 任务中观察到 GRPO 的奖励曲线方差比 PPO 低 20% 以上。 劣势:
- 组大小敏感:组太小(如 <4)会导致基线估计方差大,组太大(如 >64)会增加采样成本。实际调参中,组大小是一个关键超参数,需要根据任务调整(数学推理常用 8-16)。
- 丢失时序信息:GRPO 只考虑最终奖励,忽略中间步骤的奖励信号。对于需要细粒度反馈的任务(如对话生成),PPO 的 GAE 可能更优。
- 策略多样性下降:组内归一化鼓励输出接近组内均值,可能抑制极端但正确的策略。DeepSeek 在论文中通过引入 KL 散度惩罚来缓解,但增加了超参数调优难度。
实际落地的坑 + 解法
- 坑:组内奖励方差过小(例如所有输出都接近正确,奖励差异 <0.01),导致归一化后优势接近 0,策略几乎不更新。解法:在奖励函数中加入多样性惩罚(如输出长度、token 分布的熵),人为放大组内差异。或者使用混合组大小策略:前 10% 训练步用小组(4-8)快速探索,后 90% 用大组(16-32)稳定收敛。 坑:KL 散度惩罚系数与组大小耦合,导致调参困难。
- 解法:将 KL 惩罚系数设为组大小的函数(如 β = β0 / sqrt(group_size)),使得不同组大小下的 KL 约束强度一致。DeepSeek 在开源代码中采用了类似策略。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从原理区别、工程优劣、落地调参三个层面回答。原理上,GRPO 用组内奖励归一化替代 PPO 的价值网络,优势函数从绝对优势变为相对优势。工程上,GRPO 显存减少 30-40%,训练速度提升约 1.5 倍,但组大小敏感且丢失时序信息。落地时需注意组内方差过小的问题,可通过多样性惩罚或混合组大小策略解决。总结一句:GRPO 适合奖励稀疏、计算资源受限的数学/代码任务,PPO 更适合需要细粒度反馈的对话场景。”
4️⃣ 高频追问 & 应对
追问 1:GRPO 的组内归一化会不会导致策略坍缩到局部最优?如何避免?
会。组内归一化鼓励输出接近组内均值,如果组内样本多样性不足,策略可能收敛到狭窄区域。解法有三:1)在奖励函数中加入输出多样性惩罚(如 token 级熵奖励),强制组内样本差异;2)使用动态组大小,初期小组探索,后期大组稳定;3)引入 KL 散度约束时,对策略分布做温度缩放,增加探索性。DeepSeek 在论文中主要依赖 KL 惩罚,但实际工程中建议组合使用。
追问 2:GRPO 和 RLOO(REINFORCE Leave-One-Out)有什么区别?
两者都去掉价值网络,但核心差异在基线计算方式。RLOO 对每个输出,用组内其他输出的平均奖励作为基线,即 leave-one-out 均值;GRPO 用全组均值加标准差归一化。RLOO 的基线更精确(排除自身),但计算复杂度 O(n^2);GRPO 的归一化更鲁棒(考虑方差),计算复杂度 O(n)。实际中,RLOO 在组大小较小时方差更低,GRPO 在组大小较大时更稳定。DeepSeek 选择 GRPO 是因为归一化后优势尺度一致,便于跨任务迁移超参数。
追问 3:如果让你在 70B 模型上训练 GRPO,你会如何设计组大小和 KL 惩罚系数?
70B 模型显存瓶颈大,组大小建议 4-8 以控制采样成本。KL 惩罚系数初始设为 0.04,然后根据奖励曲线动态调整:如果奖励上升但 KL 超过 0.1,系数加倍;如果 KL 低于 0.01,系数减半。同时使用梯度检查点(gradient checkpointing)和混合精度训练(bf16),将每步显存控制在 80GB 以内。另外,建议用 PPO 跑 100 步作为 warmup,再切换到 GRPO,避免冷启动时组内方差过小。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“GRPO 就是去掉 critic 的 PPO,其他都一样” → ✅ 正确切入:GRPO 不仅去掉 critic,还改变了优势函数计算方式(从 TD 误差变为组内归一化),这导致训练动态、超参数调优和收敛行为完全不同。
- ❌ 说“GRPO 比 PPO 好,所以所有场景都用 GRPO” → ✅ 正确切入:GRPO 在奖励稀疏、计算资源受限的场景(如数学推理)有优势,但在需要细粒度反馈的对话生成中,PPO 的 GAE 可能更优。技术选型要看任务特性。
- ❌ 说“GRPO 的组大小越大越好” → ✅ 正确切入:组大小增加会降低基线方差,但也会增加采样成本和策略多样性损失。实际调参中,组大小 8-16 是常见折中,过大(>64)反而可能因奖励尺度压缩导致更新停滞。
6️⃣ 简历呼应
- 如果你有 RLHF 项目:从“我在项目中用 PPO 训练时遇到 critic 崩溃问题,后来调研 GRPO 发现组内归一化能缓解”切入,展示你踩过坑并主动寻找解决方案的能力。
- 如果你只做过传统 NLP:用“监督学习中的 batch normalization 类比 GRPO 的组内归一化”切入,展示你从熟悉领域迁移理解的能力,再补充 GRPO 在数学推理上的 SOTA 结果。
- 如果你是校招无项目:聚焦“复现 DeepSeek-Math 论文中的 GRPO 实验”切入,展示你对论文细节的掌握(如组大小 8、KL 惩罚系数 0.04、在 Llama-2-7B 上训练),并附上开源代码链接。
7️⃣ 延伸阅读
- DeepSeek-Math: Pushing the Limits of Mathematical Reasoning with Open-Source Models (GRPO 原始论文)
- Proximal Policy Optimization Algorithms (PPO 原始论文,Schulman et al., 2017)
- RLOO: REINFORCE Leave-One-Out for Efficient Policy Optimization (GRPO 的对比基线)
- The N+ Implementation Details of RLHF with PPO (PPO 工程实现细节,含 critic 崩溃案例)
- FlashAttention: Fast and Memory-Efficient Exact Attention (GRPO 训练中常用的显存优化技术)