强化学习算法原理:PPO、GRPO、DAPO
关注公众号:AI模力圈
作者:昇腾实战派 x 疆浙户
强化学习基础
强化学习讨论的核心问题在于如何让智能体(Agent)在复杂且不确定和环境(environment)中,找到一个策略(Policy)能最大化其动作(Action)所获得的奖励(Reward)。其中,Policy是一个输出为状态(State),输出为Action的执行概率的函数。


强化学习模型在NLP任务中的理解
- 智能体:语言模型,预训练模型
- 环境:模型生成的所有token
- 状态:prompt+新生成的token
- 动作:模型生成一个新的token
- 动作空间:所有动作/token的集合,即词表
- 状态空间:所有状态的集合
基于以上模型,使用强化学习解决问题时,一般需要进行以下动作:
- 设计动作空间,即规定词表
- 设计状态空间,即词表中token的排列组合
- 环境建模,设计一个状态转移函数,输入为动作,输出为状态
- 设计奖励函数,输入为和,输出为进行此动作获得的奖励
强化学习的目标:在当前状态下,找到一个最优策略达到目标状态
价值函数
前面提到,我们需要设计一个奖励函数来评价动作的奖励,也就是价值函数。 实际上,一个动作的收益分为两种:即时收益和未来收益。 即时收益:当前状态执行某个动作马上获得的Reward 未来收益:当前状态执行某个动作后进入了新的状态,新的状态之后的收益总和 综合考虑下的设计:t时刻采取a动作的总收益期望值=t时刻采取a动作的即时收益的期望值+通过a进入t+1状态的未来收益的期望值
其中:
- :t时刻采取a动作的总收益期望值
- :t时刻采取a动作的即时收益的期望值
- :t+1状态的总收益的期望值
- :折扣因子,决定了多大程度考虑未来收益
这里的Q就是动作价值函数,V就是状态价值函数。 状态价值:从当前状态到目标状态的所有动作的收益期望 动作价值:从当前状态达到目标状态期间,执行动作所获得的总体收益的期望(即时收益是常数,未来状态的状态价值是期望)
Actor-Critic
Actor-Critic是一种结合策略优化(Actor)和值函数评估(Critic)的强化学习框架。其核心思想是通过两个组件的协同工作实现高效学习: - Actor(策略网络):负责生成动作的概率分布,通过策略梯度更新参数以最大化长期回报
- Critic(值函数网络):评估状态或状态-动作对的价值或通过时序差分(TD)误差更新参数以逼近真实值函数

- image
Actor更新的本质:也就是策略梯度更新,是为了寻找一个合理的策略让最终的即时收益reward期望最大化。然而,对空间中对所有可能性进行穷举是不可能的,因此通常做法是采样一些轨迹(N个动作),用它们的reward来判断策略的好坏,并调整现有策略(网络权重),使高优势动作的概率增加,低优势动作的概率减少。
首先Actor网络与环境交互,并根据当前状态S,按照策略函数选择一个动作,并得到即时奖励和下一个状态
然后Critic网络计算当前状态的价值和下一个状态的价值,并根据即时奖励,得到TD误差
权重更新:
- Actor网络接收到TD误差,作为优势函数的近似,调整自身网络权重,使得高优势动作的概率增加。这个权重调整后会对策略函数进行更新,使得agent能够学习到更优的策略。
- Critic网络更新:最小化TD误差
PPO算法
核心思想:在每次更新策略时,不允许策略改变太大,以提高算法的稳定性,所以叫Proximal Policy Optimization,近端策略优化
Actor model
演员/策略模型,对应期望训练的目标LLM模型。一般初始化时会加载SFT阶段产出的SFT模型,在训练过程中不断更新,最后生成目标模型
Critic model
评论家/价值模型,RL过程中预估总体收益。和Actor model一样,它需要进行参数更新,一般可初始化为与Actor一样或更小的模型
Reward model
用于计算实时收益。该模型在RL过程中冻结
Reference model
初始化与Actor模型一致,用于计算与Actor的差距,避免Actor模型训坏(朝不受控制的方向更新,产生较大偏差)。该模型在RL过程中冻结

image
PPO算法流程
- rollout采样:模型推理,从数据集中随机抽取一个prompt输入Actor,生成一个QA对{prompt, response}
- 价值采样:{prompt, response}输入Critic进行打分,模型为response中的每个token计算一个预期收益,即估计每一步的value,输出为一个张量value[i]
- 生成奖励:{prompt, response}输入Reward model,计算QA对的结果奖励
- ref_logprobs采样:获取使用Ref model生成每一个token时的概率分布
- old_logprobs采样:获取使用Actor生成每一个token时的概率分布
- KL惩罚项:基于ref_logprobs和old_logprobs,计算模型的KL散度,用于构成优势函数,约束模型不会偏离太远
- GAE:根据第一次前向生成的经验计算优势
- new_logprobs采样:在每个mini batch中对Actor进行采样
- Actor Loss计算:在每个mini batch中根据new_logprobs和old_logprobs以及优势函数计算损失,对Actor进行更新
- Critic Loss计算:根据第二步的value以及第三步计算的reward,计算Critic Loss,对Critic进行更新
PPO的改进点
使用GAE求解优势函数
优势函数的定义为:
是动作的期望,为所有动作的平均期望。二者的差就是动作的价值相对其他动作(Critic期望)的“优势”
时序差分法TD存在一个隐藏的条件,那就是我们的V函数需要足够准确,特别是这个优势函数call了V函数两次,那么如果V函数有偏的话,这个优势函数就会更大的引入偏差
蒙特卡洛法倾向于轨迹采样,方差高,但是偏差小 时序差分法倾向于模型预测,方差低,但是偏差高
GAE引入了一个新的参数λ,当λ=0的时候,GAE会退化成时序差分法,而λ=1的时候,GAE则会退化为蒙特卡洛法,而在之间取值的时候,就可以调节两者的权重,从而寻找一个最优的平衡点。
重要性采样
Actor-Critic 结构的强化学习算法通常可以分为两大种类:on-policy 和 off-policy。其主要区别在于,产生数据的Policy(Actor)和进行参数更新的Policy是否相同。
PPO采用的方法是:产生策略和参数更新都使用同一个网络,但不是同一时间的网络,即模型共计进行两次策略生成(对应old_logprobs采样和new_logprobs采样)。第一次先生成一个batch的策略,但不对参数进行更新;然后在这个batch内重新进行一次策略生成,对每个mini batch生成一个新的策略,用这两个策略共同进行参数更新:
| loss下降,鼓励贴近new策略 | loss上升,鼓励保持old策略 | |
| loss上升,鼓励贴近old策略 | loss下降,鼓励保持new策略 |
裁剪机制
重要性采样过程中如果与差异过大,会导致过于激进的参数更新,从而导致训练效果变差,因此PPO还在Loss中添加了一个clip操作来避免新旧策略差异过大的情况:
以上就是PPO中Actor的的完整Loss。实际应用过程中,一般取0.1或0.2
GRPO 算法
群组相对策略优化(GRPO,Group Relative Policy Optimization)通过组内奖励标准化省去价值函数,与PPO相比架构图如下:

image
参数含义:
- :输入状态。
- :策略模型输出的动作,GRPO 中输出多个动作。
- :奖励,GRPO 中输出多个奖励。
- :价值。
- :优势函数,GRPO中计算多个优势函数。
- :KL散度,用于衡量两个概率分布之间的差异。
- :广义优势估计,用于计算优势函数。
- :对多个奖励进行组计算,生成多个优势函数。
优势函数为:
其中: - 是第 个输出中第 个token的优势值。
- 是第 个输出的奖励。
- 是所有输出奖励的均值。
- 是所有输出奖励的标准差。
目标函数引入KL散度正则化:
其中: - 是目标函数。
- $ $表示期望。
- 是生成的响应总数。
- $ {i} {t}$ 表示对所有生成的响应和每个响应中的token进行求和。
- 是一个裁剪函数,用于限制新旧策略之间的差异。
- 是第 个输出中第 个token的优势值。
- 是一个超参数,用于平衡奖励和KL散度。
- 是KL散度,用于衡量新旧策略之间的差异。
优势一:无 Critic(Value Model) 架构,解决显存问题 去掉价值网络,用群体采样,直接计算相对优势,对每个状态采样 G 个动作(群体),计算组内归一化奖励。显存节省 30%+ ,(仅需维护Actor网络):
优势二:相对优势估计,解决偏差问题 PPO用绝对优势(依赖价值网络),GRPO用相对优势(组内竞争),把”专家打分”改成”组内内卷”:
优势三:双重约束机制,优化策略更新 PPO的单一截断 → GRPO的双重约束。柔性控制策略更新(局部+全局约束):
- 截断约束(Clipping):限制单步策略更新幅度(同PPO)
- KL散度惩罚:显式约束新旧策略分布差异(避免整体剧烈变化)
对应公式:
细化后的损失函数公式:
通俗比喻:班级考试,每个学生的进步看班级排名(自动抵消试卷难度差异)。老师操作:不允许单题进步/退步超过20%(截断),全班整体成绩不能波动太大(KL散度惩罚)。优点:无需老师打分,避免基准偏差。
对比 PPO vs GRPO:
| 特性 | PPO | GRPO |
|---|---|---|
| 网络架构 | 需要策略网络和价值网络 | 仅需策略网络 |
| 优势计算 | 使用广义优势估计(GAE) | 使用群体相对评估 |
| 计算复杂度 | 较高(需要训练两个网络) | 较低(仅训练一个网络) |
| 内存需求 | 高(两个网络的参数) | 低(仅策略网络参数) |
| KL散度控制 | 通常在奖励中加入KL惩罚 | 直接在目标函数中添加KL项 |
| 样本效率 | 取决于价值网络的准确性 | 受益于群体相对评估 |
| 适用任务 | 广泛适用于各种RL任务 | 特别适合有比较型奖励的任务 |
| 实现复杂度 | 相对复杂(需要调整两个网络) | 相对简单(只需关注策略网络) |

image
DAPO 算法
DAPO(Decoupled Clip and Dynamic sAmpling Policy Optimization,即解耦裁剪和动态采样策略优化)整体上相对于 GRPO 进行了四点改进:
- Clip-Higher
- 动态采样
- Token Level Loss
- 长度惩罚
其中前2个是主要亮点,是命名的来源
目标函数

image
其中:
1.期望算子:
- 对任务数据集 中的问题-答案对 ,以及旧策略 生成的 个输出 {} 求期望。
2.Token级加权损失: - 分母为所有样本的总Token数,分子为每个Token的损失累加,实现Token级梯度加权(区别于GRPO的样本级平均),确保长序列的每个Token对梯度更新贡献平等,避免有效推理步骤被稀释。
3.解耦剪裁操作: - 新旧策略的概率比,衡量Token 的生成概率变化。
- 解耦剪裁范围:
- 下界 :限制高概率Token的过度衰减(如避免高频词概率骤降)。
- 上界 :允许低概率Token更大幅度提升(如鼓励探索低频推理步骤),解决传统PPO/GRPO单一剪裁抑制多样性的问题
4.动态采样约束
- 要求每个增强动作序列 与原始动作 在某种意义上是等价的,且等价的增强动作序列数量在 到 之间。确保每个批次中既有正确样本( is_equivalent=1 )也有错误样本,避免全对/全错导致的梯度消失。
算法流程

image
Algorithm 1 是核心的算法流程,集成了动态采样、解耦剪裁、Token级损失等关键技术。以下是分步解析,结合公式和图表说明核心机制:
Input: 初始策略模型 πθ, 奖励模型 R, 任务提示 D, 超参数 εlow, εhigh, G, Lmax, Lcache
Output: 优化后的策略模型 πθ
1: 初始化旧策略模型 πθ_old = πθ
2: for 训练步骤 step in 1 to M:
3: 从任务提示 D 中采样一个批次 Db
4: 更新旧策略模型 πθ_old = πθ # 同步旧策略为当前策略
5: for 每个问题 q in Db:
6: 从旧策略 πθ_old 采样 G 个输出 {oi}i=1^G
7: 用奖励模型 R 计算每个输出 oi 的奖励 {ri}i=1^G
8: 动态采样过滤:保留满足 0 < |{oi | is_equivalent(oi, a)}| < G 的样本
9: for 每个保留的样本 oi:
10: 计算组内归一化优势值 Âi,t = (ri - mean(r)) / (std(r) + ε) # 公式9
11: 计算每个Token的梯度贡献:
clip(ri,t, 1-εlow, 1+εhigh) * Âi,t # 解耦剪裁,公式8
12: 按Token级加权损失更新策略模型 πθ:
θ = θ + η * ∇θ J_DAPO(θ) # 目标函数公式8
13: end for
1.输入与初始化(step 1-2)
- 输入参数:
- πθ:初始策略模型(如Qwen2.5-32B基础模型)。
- R:基于规则的奖励函数(正确+1,错误-1,见论文2.4节)。
- D:任务数据集(如DAPO-Math-17K,包含17K道数学题)。
- ε_low/ε_high:解耦剪裁超参数(默认0.2/0.28,允许低概率Token更大幅度更新)。
- 初始化:
- 旧策略πθ_old初始化为当前策略,用于生成对比样本。
2.动态批次采样(step 3-8)
- 旧策略πθ_old初始化为当前策略,用于生成对比样本。
- 步骤3-4:从任务提示中采样批次Db,并同步旧策略为当前策略,确保生成样本基于最新策略。
- 步骤5-7:对每个问题q,用旧策略生成G个输出(如G=16),并计算奖励(正确/错误)。
- 步骤8(关键):动态采样过滤
仅保留“部分正确”的批次(如16个样本中3-13个正确),避免全对/全错导致梯度消失(见Figure 6中基线模型因全对样本停滞,DAPO通过过滤维持有效梯度)。
3.优势计算与梯度生成(step9-11) - 步骤9:计算组内归一化优势值:
消除批次内奖励波动,使优势值反映样本相对质量(如某样本奖励高于组平均则优势为正)。 - 步骤10-11:解耦剪裁
对低概率Token(r_{i,t} < 1)允许更大幅度提升(ε_high=0.28),高概率Token限制下降(ε_low=0.2),维持输出多样性(见Figure 2中熵值稳定)。
4.Token级加权更新(step12) - 目标函数:
按总Token数归一化,长序列的每个有效Token获得更高梯度权重,避免被无效内容稀释(见Figure 4中响应长度有序增长)。 - 梯度更新:使用AdamW优化器,学习率1e-6,线性预热20步,确保稳定收敛
技术创新
解耦剪裁范围:Clip-Higher 策略
传统的 PPO 的剪裁范围限制低概率 token 的探索空间。DAPO 提出解耦剪裁范围:允许低概率 token 进步更多,高概率 token 退步限制更严:
通过增大 ϵ_high,提升策略熵值,避免熵坍塌。

image
根据 DAPO 论文内容,Figure 2 展示了在强化学习训练过程中应用 Clip-Higher 策略前后的关键指标对比,包含两个子图:蓝色表示未应用时的基线模型,紫色曲线表示应用 Clip-Higher 策略前后的准确率变化。
- 子图(a):AIME测试集准确率中,应用前(蓝色曲线):基线模型在约3000步后准确率达到约40%,随后增长停滞。应用后(紫色曲线):准确率持续上升,最终在约5000步时达到50%,显著优于基线。表明,Clip-Higher通过增大剪裁上限(εhigh),允许低概率token的探索空间扩大,从而提升模型的解题能力。
- 子图(b):actor 模型的熵值中,应用前(蓝色曲线):熵值在训练初期快速下降,出现熵坍塌现象(模型输出趋同)。应用后(紫色曲线):熵值维持在较高水平(约0.4),表明模型保持了输出多样性。表明,Clip-Higher通过解耦剪裁范围(εhigh > εlow),抑制了高概率token的过度主导,促进低概率token的探索,避免了熵坍塌。
该图直观展示了DAPO算法通过调整剪裁范围,在提升性能的同时维持模型探索能力的核心机制。
动态采样(过滤无效样本)
只保留部分正确的样本,保持有效梯度。例如在一场考试中,保留准确率 30%-70% 的题目,避免全班全对、全班全错的题目浪费训练资源。
确保每个批次中至少有一个正确和错误样本,避免梯度消失。提升训练稳定性,减少梯度方差(Figure 6)。

image
Figure 6 展示了在 DAPO 训练过程中应用 动态采样(Dynamic Sampling) 前后的训练曲线对比,横坐标为训练步数,纵坐标为 AIME 2024 竞赛的准确率(avg@32)。蓝色曲线(w/o Dynamic Sampling)表示未应用时的基线模型,紫色曲线(w/ Dynamic Sampling)应用动态采样策略后的训练进展。
- 蓝色曲线(w/o Dynamic Sampling):训练初期上升较慢,约4000步达到40%,后续增长停滞。曲线波动较大,表明梯度信号不稳定。
- 紫色曲线(w/ Dynamic Sampling):训练初期(0-2000步)准确率快速上升,约3000步达到45%,最终稳定在50%。曲线平滑,波动较小,显示训练稳定性高。
通俗的例子:模型通过只训练中等难度的题目(如班级30%-70%正确率的题目),避免浪费时间在太简单或太难的题目上。 学生(模型)能更高效地提升成绩,避免在已经掌握或无法解决的题目上反复训练。
Token 级损失(重视细节)
原始 GRPO 算法采用样本级损失计算,首先对每个样本内按 token 计算损失平均值,然后汇总样本间的损失。在这种方法中,每个样本在最终损失计算中被分配相同的权重。基线模型(对应Figure 4 蓝色曲线):
基线模型使用样本级损失(每个样本等权重),长序列的无效Token(如重复符号)被平均稀释,模型误以为“生成越长越正确”,导致熵值异常升高。
由于在损失计算中所有样本都被分配了相同的权重,较长 reponses(包含更多token)中的标记对整体损失的贡献可能不成比例地较低,这可能导致两种不利影响。 - 首先,对于高质量的长样本,这种影响会阻碍模型在其中学习推理相关模式的能力。
- 其次,我们观察到过长的样本通常会表现出低质量的模式,例如胡言乱语和重复的单词。
为了,平衡长短序列影响,抑制低质量长生成,DAPO采用token级损失:
简化上面DAPO损失为(对应Figure 4 紫色曲线):
DAPO的Token级损失(公式10)按Token总数加权,迫使模型为每个Token负责,避免“用废话凑长度”,熵值反映真实有效多样性。 总体看,基线模型像话痨学生,为凑字数说废话(熵值暴增),老师(损失函数)却按篇给分,导致废话连篇。DAPO像“逻辑老师”,每句话(Token)单独打分,学生被迫说有意义的话,熵值虽低但句句关键。
传统GRPO按样本平均损失(Sample-level),导致长序列的每个Token贡献被稀释(如1000Token的样本和100Token的样本权重相同)。 DAPO改用Token级加权(分母为总Token数),使长序列的有效Token获得更高梯度权重,鼓励模型生成“有意义的长推理”而非“无意义的长废话”。

image
蓝色曲线(w/o token-level loss)表示未应用时的基线模型,紫色曲线(w/ token-level loss)应用动态采样策略后的训练进展。
子图(a):生成熵(Entropy)对比
- 蓝色曲线(w/o Token-level loss): 熵值从0.5快速增长,5000步时骤升至3.0,后面未继续绘制,可能是随后因无效生成过多导致曲线截断。样本级损失导致长序列的无效Token被平均化,模型为追求奖励盲目生成高熵(多样性)内容,但包含大量无意义重复或错误推理。
- 紫色曲线(w/ Token-level loss): 熵值从0.5缓慢增加,9000步时稳定在1.0左右,曲线平滑无剧烈波动。Token级损失按每个Token贡献加权梯度,抑制低质量高熵生成,保留有效推理的多样性(如多步验证、公式推导等有意义的变化)。
子图(b):平均响应长度(Mean Response Length)对比 - 蓝色曲线(w/o Token-level loss):从1000 tokens快速增长,500`步时突破3000 tokens,后续因生成大量无效内容(如重复计算步骤、无意义符号)导致曲线失控,最终截断。样本级损失无法区分有效/无效Token,模型通过堆砌内容提升奖励,形成“长度膨胀但推理无效”的恶性循环。
- 紫色曲线(w/ Token-level loss):DAPO模型响应长度。从1000 tokens缓慢增加,9000步时稳定在1800 tokens,曲线平滑且无骤增。Token级损失对有效推理步骤(如公式推导、逻辑转折)赋予更高梯度权重,鼓励模型生成“紧凑且逻辑完整”的长序列,避免无意义扩张。 结合两个子图看,基线模型的长度膨胀是“注水”,DAPO的长度增长是“精炼”,每增加100 tokens对应1-2步有效推理。
超长奖励塑性(控制答案长度)
超出长度的部分逐步扣分(类似考试作文字数限制),通过长度感知惩罚缓解截断样本的奖励噪声。 - 安全区(如 0 - 4096 tokens):允许模型生成较长但合理的推理序列(如10步以上推导),不施加惩罚。
- 缓冲区(4096 - 20480 tokens):随长度增加渐进惩罚,避免突然降分,给模型调整空间。
- 超长篇( > 20480 tokens):强惩罚抑制无意义超长生成(如重复、乱码)。
通俗的比喻,考试改革了:只训练中等难度题目(动态采样)。允许偏科学生在弱项进步更多(解耦剪裁)。作文每句话都算分(Token级损失)。字数超限逐步扣分(超长奖励塑形)。

image
紫色曲线(w/o overlong filtering)表示未应用时的基线模型,蓝色曲线(w/ overlong filtering)为应用动态采样策略后的训练进展。 注意,这里曲线的颜色换了,之前的多幅图都是蓝色曲线是基线。
子图(a):AIME测试集准确率对比
- 紫色曲线(w/o Overlong Filtering):准确率整体低于绿色曲线,最大值出现在3500步的0.3。传统“一刀切”惩罚(如直接赋-1)误罚合理长推理序列,导致模型难以区分“长度过长”与“推理错误”,梯度更新受噪声干扰。
- 蓝色曲线(w/ Overlong Filtering):准确率整体高于基线,最大值出现在3000步的0.35。通过“软超长惩罚”(Soft Overlong Punishment)区分长度范围,允许模型在合理长度内探索复杂推理,抑制无意义超长生成,减少奖励噪声对训练的干扰。
子图(b):生成熵(Entropy)对比 - 紫色曲线(w/o Overlong Filtering):熵值在3500步之前稳定下降,之后熵值突增。
- 蓝色曲线(w/ Overlong Filtering):熵值稳定下降,未出现波动或则突增的。
算法对比
PPO目标:
min(新旧策略比×绝对优势, 截断后的新旧策略比×绝对优势)
GRPO目标: min(新旧策略比×相对优势, 截断后的新旧策略比×相对优势) - KL惩罚项
DAPO目标: min(新旧策略比×动态采样后的相对优势, 解耦剪裁后的新旧策略比×相对优势) + Token级权重调整 + 超长惩罚项
| 算法 | 推荐场景 | 不推荐场景 |
|---|---|---|
| PPO | 老师打分,简单任务(如游戏控制) | 稀疏奖励、大模型显存受限 |
| GRPO | 班级排名,数学推理、代码生成 | 连续控制任务 |
| DAPO | 精准打击,复杂长文本推理(如AIME竞赛) | 小模型轻量级训练 |
如果你对多模态大模型、强化学习、昇腾 NPU 部署、模型性能优化感兴趣,欢迎持续关注【AI模力圈】。
我们会持续更新:
1. 多模态模型结构拆解
2. 强化学习算法原理与实践
3. 昇腾 NPU 迁移部署与踩坑复盘
4. 模型训练与推理性能优化
图解版、速读版内容也会同步更新到公众号 / 小红书。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)