关注公众号:AI模力圈

作者:昇腾实战派 x 疆浙户

强化学习基础

强化学习讨论的核心问题在于如何让智能体(Agent)在复杂且不确定和环境(environment)中,找到一个策略(Policy)能最大化其动作(Action)所获得的奖励(Reward)。其中,Policy是一个输出为状态(State),输出为Action的执行概率的函数。

强化学习模型在NLP任务中的理解

  • 智能体:语言模型,预训练模型
  • 环境:模型生成的所有token
  • 状态:prompt+新生成的token
  • 动作:模型生成一个新的token
  • 动作空间:所有动作/token的集合,即词表
  • 状态空间:所有状态的集合

基于以上模型,使用强化学习解决问题时,一般需要进行以下动作:

  1. 设计动作空间,即规定词表
  2. 设计状态空间,即词表中token的排列组合
  3. 环境建模,设计一个状态转移函数,输入为动作,输出为状态
  4. 设计奖励函数,输入为和,输出为进行此动作获得的奖励

强化学习的目标:在当前状态下,找到一个最优策略达到目标状态

价值函数

前面提到,我们需要设计一个奖励函数来评价动作的奖励,也就是价值函数。 实际上,一个动作的收益分为两种:即时收益和未来收益。 即时收益:当前状态执行某个动作马上获得的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算法流程

  1. rollout采样:模型推理,从数据集中随机抽取一个prompt输入Actor,生成一个QA对{prompt, response}
  2. 价值采样:{prompt, response}输入Critic进行打分,模型为response中的每个token计算一个预期收益,即估计每一步的value,输出为一个张量value[i]
  3. 生成奖励:{prompt, response}输入Reward model,计算QA对的结果奖励
  4. ref_logprobs采样:获取使用Ref model生成每一个token时的概率分布
  5. old_logprobs采样:获取使用Actor生成每一个token时的概率分布
  6. KL惩罚项:基于ref_logprobs和old_logprobs,计算模型的KL散度,用于构成优势函数,约束模型不会偏离太远
  7. GAE:根据第一次前向生成的经验计算优势
  8. new_logprobs采样:在每个mini batch中对Actor进行采样
  9. Actor Loss计算:在每个mini batch中根据new_logprobs和old_logprobs以及优势函数计算损失,对Actor进行更新
  10. 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的双重约束。柔性控制策略更新(局部+全局约束):

  1. 截断约束(Clipping):限制单步策略更新幅度(同PPO)
  2. 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)

  • 步骤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. 模型训练与推理性能优化

图解版、速读版内容也会同步更新到公众号 / 小红书。

Logo

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

更多推荐