简介:本文系统梳理大模型强化学习主流算法,从PPO到DPO、GRPO、DAPO、GSPO,讲清每个算法解决什么问题、核心公式与工程实现。读者将掌握算法选型依据、训练循环组织方式、损失聚合与KL估计等关键细节,并能结合通用训练框架完成配置与调试。
本教程的目标是帮助读者建立一条清晰的大模型强化学习(RL)算法演进脉络,理解 PPO、DPO、GRPO、DAPO、GSPO 这几类主流方法各自解决什么问题、核心数学思想是什么、在通用训练框架中如何落地实现,以及在实际工程中如何选型、配置和排查问题。
适合阅读本文的读者包括:
阅读本文不需要你手推全部公式,但需要你了解基本的策略梯度、语言模型概率建模、监督微调流程等通用背景知识。
大模型 RL 算法主要应用于以下场景:
不同算法适合不同阶段:PPO 通用但昂贵;DPO 把 RL 变成监督学习,适合偏好数据充足、算力有限的场景;GRPO 去掉 Critic,适合有明确奖励信号的推理任务;DAPO、GSPO 则是在 GRPO 基础上的针对性补丁与序列级改造。
在动手实现或配置之前,建议先准备好以下基础:
在深入算法之前,必须先理解一个通用训练框架是如何组织代码的。主流实现通常遵循“算法可插拔”的设计哲学:所有算法共用同一套训练循环,只替换其中两个关键组件——优势估计器和损失函数。
典型结构如下:
训练循环:1. 采样:策略模型生成回复2. 奖励:规则函数或奖励模型打分3. 优势估计:GAE / 组内归一化 / 序列级优势4. 损失计算:策略损失 + 价值损失 + 熵正则 + KL5. 反向传播与更新
算法注册通常通过装饰器完成,例如:
@register_algorithm("ppo")class PPOAlgorithm:def compute_advantage(self, ...): ...def compute_loss(self, ...): ...
这样做的好处是:新增算法只需实现优势估计和损失两个接口,训练循环、分布式调度、日志系统全部复用。
PPO 要解决的是“策略更新步子太大导致训练崩溃”的问题。它通过裁剪重要性采样比率,限制新旧策略的差异,从而在样本效率和稳定性之间取得平衡。
GAE 递推优势估计:用折扣因子和轨迹差分递推计算优势,平衡偏差与方差。
Reward 计算 + KL 注入:在每个 token 的奖励中加入参考模型 KL 惩罚,防止策略偏离太远。
Clip 机制:策略损失为:
L = -min(ratio * A, clip(ratio, 1-ε, 1+ε) * A)
其中 ratio 是新旧策略概率比,A 是优势。裁剪后取 min,保证更新不会过度。
Value Loss:单独训练一个价值网络拟合回报,常用裁剪后的均方误差。
Entropy Bonus:鼓励探索,防止策略过早收敛到确定性输出。
双 clip:部分实现会对价值函数也做裁剪,进一步稳定训练。
PPO 在训练循环中需要同时维护策略模型、参考模型、价值模型和奖励模型,显存占用大、通信开销高。配置时要重点关注:
PPO 需要采样、奖励模型、价值网络,流程复杂且不稳定。DPO 的思路是:直接从偏好数据中推导出一个闭式损失,绕过显式奖励建模和 RL 循环。
DPO 利用策略与参考模型的对数概率差构造隐式奖励,损失形式为:
L = -log sigmoid(β * (log π(y_w)/π_ref(y_w) - log π(y_l)/π_ref(y_l)))
其中 y_w 是偏好回复,y_l 是拒绝回复。β 控制偏离参考模型的程度。
DPO 训练更像监督学习:只需要策略模型和参考模型,数据是成对偏好样本。配置重点是:
PPO 的价值网络在大模型场景下训练困难、显存占用高。GRPO 的思路是:对同一个 prompt 采样一组回复,用组内奖励的均值和标准差做归一化,直接得到优势,不再需要 Critic。
对每个 prompt 的 K 个回复,奖励为 r_i,则:
A_i = (r_i - mean(r)) / std(r)
策略损失仍采用 PPO 的裁剪形式,KL 约束照常注入。
GRPO 用 std 归一化会放大短回复的奖励差异,导致模型倾向生成短文本。Dr.GRPO 去掉标准差,只用均值中心化:
A_i = r_i - mean(r)
这样不同长度样本的优势尺度更一致。
RLOO 用“留一法”构造基线:每个样本的基线是其他样本奖励的均值,避免自身奖励污染基线,降低方差。
DAPO 在 GRPO 基础上引入:
这些改动让 GRPO 更适合数学、代码等推理任务。
GRPO 的重要性比率是 token 级的,在 MoE 模型或长序列场景下,token 级比率方差大,训练不稳定。GSPO 把比率提升到序列级:
ratio_seq = (π(y|x) / π_old(y|x))^(1/|y|)
用序列级比率计算损失,再配合序列级裁剪。
MoE 模型中不同 token 激活不同专家,token 级比率波动剧烈。序列级比率把整条回复作为一个整体评估,显著降低方差,提升训练稳定性。
同一个 batch 内不同样本长度不同,loss 聚合方式直接影响梯度尺度:
建议在配置中显式指定聚合方式,并观察不同长度样本的梯度范数。
KL 惩罚的估计方式有多种:
工程上常用 k3,若训练不稳定可切换 k1 观察。KL 系数建议动态调整,目标是把 KL 控制在一个合理区间。
验证方式:
常见问题:
从 PPO 到 DPO、GRPO、DAPO、GSPO,大模型 RL 算法的演进主线是:在保持训练稳定的前提下,不断降低工程复杂度和算力成本,并针对特定模型结构(如 MoE)和任务类型(如推理)做定向优化。理解每个算法“解决什么问题”比死记公式更重要。落地时,先理清训练框架的工程脊柱,再按“采样—奖励—优势—损失—更新”的链路逐段配置和验证,才能把算法真正跑通、跑稳、跑出效果。