简介:本文系统解析大模型强化学习中PPO、GRPO、DAPO与GSPO四类策略优化算法的演进逻辑与底层机制,从优势估计来源、更新粒度、样本筛选与噪声处理四个维度拆解各自解决的核心瓶颈,并辅以关键公式、训练流程伪代码与对比分析,帮助读者建立完整的原理认知框架。
大模型强化学习把文本生成建模为序贯决策问题:模型即策略,已生成的上下文是状态,下一个 Token 是动作,一条完整回答是一条轨迹,奖励作用在轨迹末端。训练目标可以概括为一句话:最大化期望奖励,同时约束策略不偏离作为锚点的参考策略太远。
无论 PPO、GRPO、DAPO 还是 GSPO,都运行在同一个“生成—打分—更新”闭环中:
四个算法的真正差异集中在四个维度:优势从哪里来、更新以什么粒度发生、哪些样本进入训练、长回答与稀疏专家模型(MoE)的路由噪声如何处理。它们不是四个完全孤立的算法,而是同一条训练链上针对不同瓶颈的逐层修补。
早期基于人类反馈的强化学习流程是“监督微调 → 训练奖励模型 → 强化学习对齐”。这条链路在大规模落地时暴露出几类问题:
GRPO、DAPO、GSPO 正是分别针对第二、第三、第四类瓶颈的回应。
PPO 的核心目标函数为:L = E[ min( r_t·A_t, clip(r_t, 1−ε, 1+ε)·A_t ) ]。当优势为正时,r_t 被上界 1+ε 封顶;优势为负时被下界 1−ε 托底。这保证单步更新幅度受限,同一批采样数据因此可以安全复用多个轮次。优势估计通过广义优势估计(GAE)对时间差分残差做指数加权,在偏差与方差之间折中,给出 Token 级优势。
系统组成上,完整 PPO 训练需要四个模型同时在卡:策略模型、参考模型、奖励模型、价值模型,其中价值模型通常与策略同规模,显存占用与训练复杂度显著。使用中的主要痛点在于:价值模型本身是学习出来的近似,其误差会引入偏差;在超大规模语言模型上,Critic 的训练稳定性与调参成本居高不下,这为“去掉 Critic”的后续演进埋下伏笔。
GRPO 的核心机制是:对每个问题用当前策略采样 G 条回答,得到奖励 r_1..r_G,优势定义为 A_i = (r_i − mean(r)) / std(r),并广播到该回答的所有 Token;随后沿用 PPO 式的裁剪代理目标更新,同时把 KL 惩罚以无偏估计形式直接加入损失。
为什么可行:组内均值正是对该问题期望回报的蒙特卡洛估计,充当基线;标准差归一化让不同问题的优势尺度可比。在可验证任务中,奖励本身可靠且作用于结果,组内比较的信号噪声小,无需再学一个价值函数来降方差。收益是少训练一个同规模模型,显存与流水线复杂度显著下降,且优势与最终奖励直接对齐。
代价是新引入四类问题:熵塌缩(探索能力衰减)、全对/全错组零梯度、长回答在样本级归一化下被低估、超长截断产生奖励噪声。这四点正是 DAPO 的靶子。
DAPO 没有另起炉灶,而是保留 GRPO 目标骨架,针对长链推理的大规模训练逐项修补:
GSPO 的问题定位是粒度错配:奖励评价的是整条回答,而 GRPO/PPO 的裁剪与修正却发生在逐 Token 粒度上。在 MoE 模型上问题被放大——路由波动使个别 Token 的重要性比率出现极端值,逐 Token 裁剪产生高频梯度噪声,长时间训练累积后可能诱发崩溃。
核心机制是定义序列级重要性比率:si = exp( (1/|y_i|) · Σ_t [logπθ(y_t) − logπ_old(y_t)] ),即对该回答所有 Token 的对数比率取长度归一化的几何平均,裁剪与目标函数都在序列级进行:L = E[ min(s_i·A_i, clip(s_i, 1−ε, 1+ε)·A_i) ]。
为什么有效:几何平均把逐 Token 的路由噪声在序列内平均掉,比率分布更平滑,梯度方差下降;修正粒度与奖励粒度对齐——奖励判整条回答,比率也约束整条回答;长度归一化使长短回答的比率尺度一致;超出边界的序列整体退出本轮更新,也为工程侧的批次调度与舍弃优化留出空间。其边界在于:序列级控制比 Token 级更粗,收益在 MoE 大模型与超长训练场景中最明显,稠密小模型上差距可能有限。
| 维度 | PPO | GRPO | DAPO | GSPO |
|---|---|---|---|---|
| 优势来源 | GAE+价值模型 | 组内相对优势 | 组内优势+动态筛选 | 组内相对优势 |
| 是否需要 Critic | 需要 | 不需要 | 不需要 | 不需要 |
| 裁剪粒度 | Token 级 | Token 级 | Token 级(非对称) | 序列级 |
| 主要解决 | 更新过猛 | Critic 成本 | 长 CoT 数据与奖励利用 | MoE 与长训稳定性 |
初始化策略 π_θ、参考策略 π_ref(= SFT 模型)for 每轮迭代:prompts = 从数据集采样一批问题responses = π_θ.generate(prompts, 每题 G 条) # 生成rewards = rule_or_model_score(responses) # 打分A_i = (r_i - mean(r)) / std(r) # 组内优势(GRPO 系)# DAPO: 过滤全对/全错组后重采样补齐批次for epoch in 1..K:ratio = exp(logp_θ - logp_old) # Token 级或序列级loss = -mean(min(ratio*A, clip(ratio,1-ε_low,1+ε_high)*A))+ β * KL(π_θ || π_ref)更新 θ
无论自建训练框架,还是使用百度智能云等平台提供的模型精调与训练类通用服务,算法层的原理与调参逻辑是一致的:奖励设计决定信号质量,优势估计决定方差,裁剪与 KL 决定更新幅度。
回到主线:PPO 解决“更新不要太猛”,用裁剪与信任域保证多轮复用样本时的安全;GRPO 解决“没有必要为每个大模型再训一个 Critic”,用组内相对优势在可验证任务上换掉价值模型;DAPO 解决“长链推理中数据和奖励不够好用”,用四项机制恢复探索、筛出有效梯度、校正长短偏差、抑制截断噪声;GSPO 解决“整条回答的奖励不应被逐 Token 的重要性噪声拆散”,把修正粒度提升到与奖励一致的序列级。四者构成一条从更新约束、优势来源、训练配方到更新粒度的完整演进链——理解每个环节的瓶颈与修补逻辑,比记住算法名更重要。