简介:本文围绕大模型强化学习中的策略优化方法,系统梳理PPO、GRPO、DAPO与GSPO的核心原理、演进关系与工程落地要点。文章从“生成—打分—更新”的训练闭环出发,说明不同方法分别解决了什么问题、如何配置训练流程、如何验证效果,并给出稳定性与效率方面的通用优化建议。适合从事大模型对齐、数学推理、代码生成及长链推理训练的开发者与算法工程师阅读。
本教程旨在帮助读者建立对大模型强化学习中四类策略优化方法的系统性理解,并掌握从经典近端策略优化到组内相对优势、长链推理适配、序列级更新的完整演进脉络。完成学习后,你将能够:
本文适合正在从事大语言模型对齐训练、推理能力增强或强化学习基础设施建设的开发者、算法工程师及技术负责人阅读。内容不依赖特定云平台或训练框架,给出的配置与流程描述均为通用实现思路。
大模型强化学习策略优化广泛适用于以下场景:
在这些场景中,若奖励信号可验证或可量化,就可以将策略优化方法纳入训练流程。需要注意的是,不同方法对计算资源、样本生成数量和训练轮次的要求差异较大,选型时应结合任务特性与工程条件。
在实施大模型强化学习策略优化之前,建议完成以下准备工作。
你需要准备一个已完成监督微调的基础策略模型。该模型应具备基本的指令跟随能力和任务相关的生成能力。训练数据通常由“问题”和“可检查的目标答案”组成。对于数学问题,目标答案可以是标准数值;对于代码任务,目标答案可以是配套的测试用例。数据集中应保证问题类型的多样性,避免模型在单一模式上过拟合。
可验证奖励强化学习依赖一个确定性的奖励计算逻辑。你需要预先定义奖励函数,明确什么情况下给予正向奖励、什么情况下给予零奖励或负向奖励。对于规则可验证的任务,奖励函数通常由程序化验证器实现;对于开放式任务,则可能需要训练一个判别模型来给出评分。奖励函数的设计直接影响策略优化的效果,应当经过小规模人工抽样检验。
策略优化通常需要同时运行多个生成进程以采样同一问题的多个回答。你需要准备足够数量的加速计算设备,并配置好分布式采样与梯度更新的通信环境。生成阶段的吞吐量往往是训练效率的瓶颈,因此建议将采样与训练分离,使用异步数据队列传递生成结果。
建议读者预先了解以下概念:强化学习中的状态、动作、奖励与策略;策略梯度方法的基本原理;重要性采样与比率裁剪;优势函数的含义与估计方法。若对这些概念不熟悉,可以先阅读通用的强化学习入门材料,再回到本文理解具体算法设计。
在可验证奖励强化学习中,无论采用哪种策略优化方法,训练过程都遵循同一个高层闭环。
第一步,从当前策略出发,针对一个问题采样一个或多个回答。这里的“当前策略”指的是用于生成回答的模型版本,通常会在更新前后反复使用。采样时需要注意控制回答的最大长度、采样温度以及是否启用采样截断策略,以平衡探索范围与生成成本。
第二步,使用验证器或奖励模型对每个回答打分。奖励值可以是单一的标量,例如“正确为 1、错误为 0”,也可以是带有格式惩罚的复合分数。将奖励值记录下来,并与对应的问题、回答以及对数概率一同进入训练缓冲。
第三步,基于组内或批次内的奖励分布计算优势。优势代表“这个回答比平均水平好多少”。不同的策略优化方法在优势计算上存在显著差异,这也是后续几个章节重点展开的内容。
第四步,使用优势信号构造目标函数,并通过反向传播更新策略参数。更新时需要考虑步长限制、裁剪范围以及更新轮次,避免单次优化破坏模型已有能力。
第五步,重复上述过程,直到验证集上的任务成功率或奖励均值趋于稳定。
图1 根据 PPO、GRPO、DAPO 与 GSPO 原始论文重绘的演进总览。它展示的不是四个完全独立的算法,而是同一条训练链上对不同瓶颈的逐层修补。
PPO 的核心思想是:在利用旧策略采样的数据更新新策略时,通过裁剪重要性比率来限制每次更新的幅度。它解决的首要问题是“更新不要太猛”。
PPO 使用一个代理目标函数。设当前待更新的策略为 πθ,采样时使用的旧策略为 πθ_old,对于每个回答中的每个 Token,重要性比率为:
ratio = πθ(token | context) / πθ_old(token | context)
PPO 的裁剪目标可以概括为:
objective = min(ratio × advantage, clip(ratio, 1-ε, 1+ε) × advantage)
其中 ε 是裁剪范围,通常设置为 0.1 到 0.2。当优势为正时,如果新策略让该 Token 的概率远高于旧策略,比率会被裁剪到 1+ε,防止单次更新过度;当优势为负时,如果新策略让该 Token 的概率远低于旧策略,比率会被裁剪到 1-ε,同样限制变化幅度。
PPO 通常需要一个单独的价值模型来估计状态价值,进而计算优势。优势的一种常用计算方式为:
advantage = actual_return - value_model(state)
价值模型与策略模型可以共享骨干网络,也可以完全独立。在后来的大模型实践中,维护一个单独的价值模型带来了额外的显存和训练开销。PPO 的裁剪机制使得策略可以在旧策略采样得到的数据上进行多轮更新,但每轮更新的幅度都受到严格控制。
实施 PPO 时,需要注意以下事项:
GRPO 的核心观察是:对于数学、代码等可验证任务,同一道题可以低成本地生成多个回答,组内奖励分布本身就可以提供相对基线。因此,不必为每个大模型再训练一个独立的价值模型。
GRPO 对每个问题采样一组回答,例如组内有 8 个或 16 个回答。设该组回答获得的奖励分别为 r1, r2, …, rG。优势通过组内标准化得到:
advantage_i = (r_i - mean(r_group)) / std(r_group)
这种组内相对优势的计算不依赖价值模型,直接使用奖励信号本身。它的合理性在于:同一问题的难度对不同回答是一样的,因此回答之间的奖励差异主要反映了回答质量的差异,而不是题目难度的差异。
组内标准化带来的好处是计算简单、无需额外模型。但它也引入了一些需要注意的问题:
实施 GRPO 时,建议将采样批次按问题分组,确保每个问题在组内有足够数量的回答。对于生成成本较高的长回答任务,需要在组大小与计算开销之间做权衡。经验上,组大小设置在 8 到 32 之间是常见的起点。
DAPO 并不是在 GRPO 之外重新设计一套全新的目标函数,而是把 GRPO 放进长链推理的大规模训练环境之后,针对四个实际瓶颈逐项补强。
在长链推理训练中,模型可能逐渐退化为只输出固定答案格式,不再探索不同推理路径。这种探索塌缩会使策略过早收敛到次优解。DAPO 通过调整采样策略和引入正则项来维持输出分布的多样性。具体来说,可以在损失函数中加入熵正则项,鼓励 Token 概率分布不要过于尖锐;同时适当提高采样温度,保证组内回答的差异性。
长链推理时,模型可能生成未完整结束的回答,或者输出格式不符合验证器要求。这些无效样本如果被赋予极低奖励并直接进入训练,会引入较大的梯度噪声。DAPO 的做法是对无效样本进行识别与隔离,在优势计算时将其单独处理,避免它们参与组内标准化后干扰有效回答的相对排序。
不同回答的长度可能差异很大。逐 Token 计算损失时,长回答天然会获得更多 Token 级别的梯度贡献。DAPO 引入长度归一化或回答级权重,将长回答与短回答在梯度贡献上拉到相近水平。这个调整的目的是让模型不因为回答更长而获得不成比例的学习信号。
在长链推理过程中,回答可能在前几步已经得到正确答案,但模型继续生成大量后续内容。这些后续内容对最终奖励没有贡献,却会因为 Token 数量多而影响训练。DAPO 通过设置合理的最大长度截断,并利用长度相关的奖励整形或屏蔽,降低超长回答对训练的干扰。
在长链推理任务中实施 DAPO 风格的训练时,可以按照以下步骤推进:
GSPO 提出的问题集中在一个细节上:既然奖励通常评价的是整条回答的质量,为什么重要性比率还要逐 Token 计算和裁剪?逐 Token 的重要性比率在处理长序列时会产生明显的噪声累积,尤其在长时间训练和大规模混合专家模型场景下,容易造成训练不稳定。
GSPO 将控制粒度从 Token 级提升到序列级。序列级重要性比率不再对每个 Token 单独计算概率比,而是对整条回答的概率比进行统一计算与控制。这样处理的直觉是:奖励和优势本身就是回答级的信号,策略更新也应当以回答为单位进行约束。
PPO 的 Token 级裁剪在短回答和一般对齐任务中表现良好,但在长回答和高噪声场景下,每个 Token 的概率比都有独立的估计误差。当序列变长时,这些误差在累积梯度中相互叠加,可能放大方差。GSPO 通过序列级比率估计与裁剪,减少了方差来源,提高了训练过程的稳定性。
GSPO 在以下场景中表现出工程价值:
实施 GSPO 时,需要保证序列级对数概率可以被准确计算和回传。在数据缓冲区中存储每条回答的总对数概率,并在目标函数中使用序列级比率。裁剪范围通常仍然设置在 0.1 到 0.2 附近,但对象从每个 Token 变为每条序列。
下表从几个关键维度对四种方法进行对比,帮助你在实际项目中做出选择。
| 方法 | 优势来源 | 更新粒度 | 是否需要价值模型 | 主要适用场景 |
|---|---|---|---|---|
| PPO | 价值模型或 Critic | Token 级 | 是 | 通用对齐、偏好优化 |
| GRPO | 组内奖励标准化 | Token 级 | 否 | 数学、代码等可验证任务 |
| DAPO | 组内奖励标准化,加入多项配方修正 | Token 级 | 否 | 长链推理、大规模训练 |
| GSPO | 组内或批次奖励 | 序列级 | 否 | 长回答、长训练、混合专家模型 |
选型时优先考虑两个问题:任务奖励是否可验证,以及回答是否显著较长。若奖励可验证且回答较短,GRPO 通常是计算效率较高的选择;若需要长链推理,应在 GRPO 基础上引入 DAPO 风格的训练配方;若训练极长或不稳定,再考虑序列级更新的 GSPO 方案。
下面给出一个通用的实施流程,帮助你在实际项目中落实上述方法。
首先建立从策略模型采样到奖励计算的数据通道。采样模块接收一个问题批次,对每个问题生成多个候选回答。验证模块对回答进行解析,输出标量奖励。建议在采样阶段记录每个回答的对数概率,作为后续重要性比率计算的输入。
根据所选方法计算优势。若采用 GRPO 或 DAPO,按问题分组对奖励做组内标准化;若采用 PPO,则需要准备价值模型并计算实际回报与价值估计的差。优势计算的实现要避免数值除零,必要时在标准差上加一个小的常数。
使用优势构造损失。确保裁剪逻辑与所选粒度一致。训练循环中设置合理的更新轮次。对于 GRPO 类方法,组内回答可以一次性送入模型计算损失。对于 GSPO 类方法,需要按序列聚合对数概率后再计算比率。
在训练过程中持续记录以下指标:任务成功率、奖励均值、组内奖励标准差、有效采样比例、平均回答长度、策略更新前后的 KL 距离。策略更新前后的 KL 距离是判断更新是否过猛的重要参考,若该值持续偏高,应及时降低学习率或缩小裁剪范围。
在留出的验证集上评估任务成功率。对于数学任务,验证集应包含未在训练中出现过的问题;对于代码任务,应使用独立的测试用例。若验证集指标在连续多个评估周期中没有改善,且训练奖励仍在上升,可能意味着奖励函数存在可利用偏差,需要检查验证器逻辑。
这种情况通常是策略对奖励函数产生了过拟合,或者组内标准化在奖励全错时仍然给出了虚假的相对优势。排查思路:检查奖励函数是否存在可利用的短路径;引入 DAPO 风格的无效样本隔离;降低训练轮次或学习率;扩大验证集规模以更准确地反映泛化能力。
这属于探索塌缩。排查思路:检查采样温度是否过低;检查损失中是否缺乏熵正则;观察组内回答的多样性指标,若多样性持续下降,应提高采样随机性或引入额外的多样性约束。
这说明 Token 级损失缺少长度归一化。可以在损失计算时按回答长度做加权归一,或引入回答级权重均衡策略。同时检查超长回答是否输出了大量低信息量内容,必要时设置更严格的截断长度。
首先检查优势计算是否出现异常值。若组内奖励标准差极小,标准化后的优势可能被放大。其次检查重要性比率是否在个别 Token 上出现极大值,这通常与旧策略对某些 Token 的概率极低有关。可以降低学习率、增大裁剪保护或改用序列级更新。
将采样与训练解耦,使用异步队列连接生成进程与训练进程。采样阶段使用较大的批处理规模以提高加速设备利用率。对于长序列,可对前缀相同的部分做缓存,减少重复计算。
优先保证训练曲线的平稳性,再追求收敛速度。学习率采用预热与衰减策略。对奖励值做缩放或截断,减少异常奖励对优势计算的影响。定期评估策略更新前后的 KL 距离,作为稳定性监控指标。
在可验证任务中,优先选择不需要价值模型的 GRPO 类方法,减少额外模型带来的显存和训练开销。组大小可以根据任务难度动态调整:简单任务使用较小分组,复杂推理任务适当增大分组以稳定优势估计。
将奖励计算、优势计算、损失构造与训练循环拆分为独立模块,便于在不同方法之间切换和对比实验。训练配置项集中管理,确保每次实验的参数调整可追踪、可复现。
本教程系统梳理了从 PPO 到 GRPO、DAPO 与 GSPO 的强化学习策略优化演进路径。PPO 通过 Token 级重要性比率裁剪解决“更新不要太猛”的问题;GRPO 利用组内奖励标准化移除了价值模型,让可验证任务上的训练更加高效;DAPO 在 GRPO 基础上针对长链推理中的探索塌缩、无效采样、长度不均衡和超长回答噪声进行了配方级补强;GSPO 则从 Token 级更新提升到序列级更新,为长回答和大规模混合专家模型的长期训练提供了稳定性方案。
在实际工程中,这四种方法并非互斥关系,而是同一条训练链上针对不同瓶颈的逐层修补。你可以从 GRPO 作为主要基线出发,根据任务是否涉及长链推理、训练是否出现不稳定、回答长度分布是否失衡等实际表现,逐步引入 DAPO 与 GSPO 的思想进行改进。最终目标始终是让策略在“生成—打分—更新”的闭环中稳定地提高好答案的概率,同时避免单次更新破坏模型已有能力。