跳到主要内容
大模型强化学习核心算法:PPO、GRPO 与 RLVR 解析 | 极客日志
Python AI 算法
大模型强化学习核心算法:PPO、GRPO 与 RLVR 解析 大模型强化学习通过 PPO、GRPO 等算法优化策略。PPO 引入裁剪机制稳定训练,依赖 Critic 模型预测价值。GRPO 移除 Critic,利用组内相对优势降低显存成本。GSPO 进一步实现序列级优化。结合可验证奖励(RLVR)与过程奖励模型(PRM),推动模型在数学推理等领域涌现思维链能力。
不羁 发布于 2026/3/28 更新于 2026/4/25 1 浏览大模型强化学习核心算法:PPO、GRPO 与 RLVR 解析
一、强化学习概述
强化学习(Reinforcement Learning, RL)是一种通过与环境交互学习最优策略的机器学习方法。其核心要素包括状态(State)、动作(Action)、奖励(Reward)和策略(Policy)。典型框架为马尔可夫决策过程(MDP),目标是通过最大化累积奖励来优化策略。
如果把模型比作一个人,可以这样理解大模型的整个流程:
预训练 :好比培养这个人读遍世界上广阔的知识,但此时他并不会利用这些知识;
微调 (SFT) :让这个人继续去学习一些特定的指令,相当于学习题目和标准答案,通过范式做模仿学习;
强化学习 (RL) :让这个人去自己探索解决一些实际没有标准答案的问题,通过'尝试 - 反馈 - 修正'的机制,去探索更优解。
强化学习的本质是对齐工作,让模型朝着符合人类喜好的方向迭代优化。
二、PPO 算法
接下来我们看看强化学习大模型中的经典——近端策略优化(Proximal Policy Optimization, PPO)。这是一种基于策略梯度的 RL 算法。
1. 算法整体
PPO 继承了 TRPO 算法的'信赖域'思想,即限制新策略和旧策略之间的差异不要太大。但它不直接解带约束的优化问题,而是通过裁剪(Clipping)或者'自适应 KL 惩罚'将约束放入目标函数。
简单提一下 TRPO,它的主要贡献是引入信赖域的概念,强制新旧策略之间的 KL 散度小于某个阈值。理论很完美,保证策略单调提升,但计算太复杂,难以工程化大规模应用。
PPO 算法涉及的四个模型分别是:
策略模型(Actor Model) :最终想要得到的模型。
价值模型(Critic Model) :策略模型的参考,用于预测奖励。
参考模型(Reference Model) :原始的策略模型,用于 KL 散度计算。
奖励模型(Reward Model) :训练好的用来给策略模型回复打分。
从 PPO 整体的目标来看,整个目标函数分为三个部分:第一个是 Actor 想最大化的奖励,第二部分是 Critic 想预测准确的奖励,第三部分是模型的熵值。
对应到损失函数来看是:
Loss 计算的流程如下:
生成 :Actor Model 接受 $x$,生成回答 $y$,得到轨迹 $(x, y)$。
约束 :把 $(x, y)$ 同时喂给 Reference Model,之后计算 Actor Model 和 Reference Model 在生成每个词时的概率差,得到 KL 散度。
迭代 :计算损失,梯度下降,更新模型参数。
估值 :Critic Model 接收 $(x, y)$,针对序列中的每一个位置,预测后续的预期得分 $V_{curr}$。
修正奖励 :使用 KL 散度修正奖励,$R_{total} = R_{score} - \beta \cdot KL_penalty$。
打分 :Reward Model 接受 $(x, y)$,给出一个原始的分数 $R_{score}$。
这个流程看起来会涉及很多部分的计算,下面我会详细的说明每一个部分都是如何计算和使用的。
2. 策略损失 这部分对应到损失里面就是策略损失,衡量模型新旧策略之间的损失差异,用这个值来衡量这时候的新策略是否优于旧策略,从而调整模型参数。
1. 重要性采样比例 对于整体的策略损失还要看两个点,第一个就是重要性采样比率,也就是'当前策略'与'采样策略'在同一状态下采取同一动作的概率之比。
$$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$
其中 $\pi_{\theta_{old}}(a_t|s_t)$ 指的是旧策略(采样时的策略),即在收集数据的那一刻,模型在状态 $s_t$ 下采取动作 $a_t$ 的概率。
$\pi_\theta(a_t|s_t)$ 指的是新策略(当前正在优化的策略),即模型参数更新后在状态 $s_t$ 下采取动作 $a_t$ 的概率。
总结一下,重要性采样比例就是把'用旧策略/行为策略产生的经验'修正成'看起来像是用当前目标策略产生的经验',从而让算法可以用历史数据反复利用,而不是每次都必须用最新策略去重新采样。公式之中的 clip 部分就是上述提到的裁剪机制,它通过限制策略变化的幅度来限制整个模型参数的更新,可以理解为一个分段函数,将重要性比率的值进行限制到一定区域范围,从而约束整个策略的更新程度。
2. 优势 在强化学习里面,我们要评估一个动作 $a$ 在状态 $s$ 下到底有多好,通常有两个基准:
状态价值 $V(s)$:在这个状态 $s$,按照策略走,平均能拿多少总分。
动作价值 $Q(s, a)$:在这个状态 $s$ 做了动作 $a$,并且后面都按策略走,实际能拿多少总分。
优势函数 $A(s, a)$ 的定义就是:'做这个动作,比平均水平好了多少?'
如果 $A = 0$:说明这个动作就是平均水平。
如果 $A < 0$:说明动作 $a$ 比平均差,应该抑制(减小概率)。
如果 $A > 0$:说明动作 $a$ 比平均好,应该鼓励(增加概率)。
那我们为什么要用优势呢?那是因为如果直接用回报 $Q$ 来更新策略,方差会很大(因为有些状态本身分就高,有些本身就低)。用 $A$(相对于平均的差值)可以减小方差,让训练更稳定。
最常规的优势计算是基于蒙特卡洛或者单步 TD(整体奖励或者单步奖励)。我们知道真实回报 $R_t$ 是 $Q(s_t, a_t)$ 的无偏估计。所以基础公式通常是:
其中 $V(s_t)$ 是 Critic 网络预测的当前状态价值,$R_t$ 是从时刻 t 开始一直到游戏结束,实际拿到的所有奖励之和 $(r_t + \gamma r_{t+1} + \dots)$。
这样计算虽然准确(无偏差),但是方差极大。因为 $R_t$(也就是整体流程里的 $R_{total}$)包含了从 $t$ 到结束的所有随机性。如果游戏很长,$R_t$ 波动会非常大,导致模型学得很慢。
所以,PPO 里面计算优势使用的是 GAE (Generalized Advantage Estimation,广义优势估计)。
GAE 是一种加权平均的方法,它在'单步预测(偏差大、方差小)'和'蒙特卡洛(偏差小、方差大)'之间做了一个完美的平衡。
第一步:计算 TD Error(单步误差)
这是 GAE 的基础积木,代表'走了一步之后发现的惊喜'。
$$\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)$$
其中 $\gamma$ 是折扣因子,$V(s_t)$ 是 Critic 预测的这一步价值,$V(s_{t+1})$ 是 Critic 预测的下一步价值,$r_t$ 是刚才拿到的真实奖励。
第二步:计算 GAE 优势
GAE 把未来的所有 $\delta$ 按权重加起来:
$$\hat{A}t^{GAE} = \delta_t + (\gamma\lambda)\delta {t+1} + (\gamma\lambda)^2\delta_{t+2} + \dots$$
其中 $\lambda$ (Lambda) 是 GAE 的核心参数。
$\lambda = 0.95$:最佳配合度。
$\lambda = 1$:看完全程,等同于蒙特卡洛,无偏差,但方差大。
$\lambda = 0$:只看一步 $\delta_t$,方差最小,但偏差大(全靠 Critic 瞎猜)。
整体的策略损失就是通过计算优势和裁剪之后重要性采样比例来拿到最后的值,具体涉及的两个核心模块如上面所讲。
3. 价值损失 接下来我们来看价值损失部分:简单来说价值损失(Value Loss)就是用来衡量'教练(Critic Model)预测得准不准'的指标。
1. 均方误差 在算法中,价值损失一般由 MSE(均方误差)构成,但在 PPO 中,为了稳定,经常会加一个 Clip(截断)操作。
基本的 MSE 计算是:
$$L_{VF} = \frac{1}{2}(V_{pred} - R_{target})^2$$
其中 $R_{target}$ 是真实的回报目标(从数据里算出来的,作为标签),$V_{pred}$ 是 Critic 模型当前的预测值(带有梯度,需要更新)。
但是在 PPO 算法里面为了防止 Critic 一次更新步子迈的太大,破坏之前的预估能力,PPO 往往采用和策略网络类似的'截断'技巧:
$$L_{VF} = \max \left[ (V_{pred} - R_{target})^2, \quad (V_{clipped} - R_{target})^2 \right]$$
其中:
$$V_{clipped} = V_{old} + \text{clip}(V_{pred} - V_{old}, -\epsilon, \epsilon)$$
如果 Critic 这次预测的值,偏离旧 Critic 的预测值太远(超过 $\epsilon$),我们就限制它的 Loss,不让它更新得那么猛。
2. 累计的回报目标 这个过程中唯一需要计算的就是 $R_{target}$,而 $V_{pred}$ 的值是价值模型预测的结果。
在说明 $R_{target}$ 之前我们得先了解他的计算方式:
$$R_{target}^{(t)} = R_{total}^{(t)} + \gamma R_{total}^{(t+1)} + \gamma^2 R_{total}^{(t+2)} + \dots$$
可以看到计算 $R_{target}$ 之前我们得先得到 $R_{total}$,而 $R_{total} = R_{score} - \beta \cdot KL$。
在这里我们需要计算的就只有 KL 散度,简单来说,KL 散度是用来衡量两个概率分布之间差异的指标。
你可以把它想象成'距离':
如果两个分布完全一样(比如双胞胎),KL 散度 = 0。
如果两个分布差异越大(比如一个是猫,一个是狗),KL 散度越大。
$$D_{KL}(P|Q) = \sum_{x} P(x) \cdot (\log P(x) - \log Q(x))$$
其中 $Q(x)$ 是'近似'分布或参考分布(在强化学习中通常指 Reference 模型的输出概率),$P(x)$ 是'真实'分布或当前分布(在强化学习中通常指 Actor 模型的输出概率),$x$ 是具体的事件(比如词表里面的某一个词)。
这里也就说明为什么 Reference Model 可以影响奖励了,因为其预测的概率计算的 KL 散度,是直接参与修正后奖励的计算的。
而对于整体的 $R_{total}$ 我们需要知道的是,因为奖励是整体的,简单来说,就是一个流程里面,每一步过程的奖励都是 0,只有结果的奖励才是 $R_{score} - \beta \cdot KL$,因为奖励没办法单独针对一个流程给出分数,就好比,单看预测'我喜欢你'这几个字,喜,欢,并没有具体的意愿,只有当整个流程完整,模型才能给出正确的奖励值,所以 $R_{total}$ 的值只有 $R_{score} - \beta \cdot KL$ 或者 $- \beta \cdot KL$。
4. 熵损失 简单来说,熵代表了'随机性'或'不确定性'。在 PPO 中,计算熵损失是为了防止模型过早'自负',强迫它保持一定的探索能力。
对于一个离散的概率分布 $P$(比如 LLM 的词表分布),其熵 $H(P)$ 的计算公式是:
$$H(P) = -\sum_{x} P(x) \log P(x)$$
负号:因为概率 $P$ 是 0~1 之间的数,$\log P$ 是负数,前面加个负号让熵变成正数。
$\log P(x)$ 是该概率的对数,$P(x)$ 是模型生成第 $x$ 个词的概率。
在整体的损失函数中,优化器默认是最小化损失,而我们希望模型保持足够的探索性,也就是熵越大越好,所有要减去熵值。而使用熵的原因是为了让模型避免过早收敛,比如,PPO 如果发现'我不知道'这句废话虽然得分不高,但很安全(Reward = 0.1)。为了求稳,它会迅速把这句话的概率推到 1.0,以后遇到什么问题都复读'我不知道'。这就叫策略坍塌。而加了熵值之后,PPO 刚把'我不知道'的概率推到 1.0(熵变 0),Loss 函数里面的熵损失就会变大,这样就可以解决这类问题。
上面就是整体的 PPO 算法整体迭代流程涉及的全部内容,这里我再结合模型形象的过一遍 PPO。
我们应该首先明了,PPO 的训练过程涉及四个神经网络模型。其中 2 个要训练(参数更新),2 个不需要训练(参数冻结,只做参考)。
首先是 Actor Model(策略模型) ,他就是我们要训练得到的最终模型,也就是主角,他的作用就是根据提示词,生成回答,再通过训练,不断更新参数,它是策略损失优化的对象,目标就是通过参数的不断优化,让生成的回复得到更高的分数。而 Critic Model(价值模型) 是主要对策略模型的回复进行分数预测,当你输入一句话,它来预估这句话未来能拿多少分(Value),他的参数和策略模型一样,不断随着训练而更新,它是价值损失优化的对象,它预测得越准,计算出的'优势'就越准,Actor 学得就越快,对了,一般选择和策略模型参数大小相同的模型,一般也是使用原始的策略模型初始化。
接下来是两个参数被冻结的模型,第一个是 Reference Model(SFT 模型) ,也就是参考模型,它一般是过去 SFT 阶段的策略模型,他主要是为了约束策略模型,防止 Actor 为了拿高分而胡言乱语。我们要求 Actor 的输出分布不能离参考模型太远,他在整体损失里面,不直接参与损失计算,而是通过计算 KL 散度,修正奖励,间接作用损失。最后的是 Reward Model(奖励模型) ,可以把奖励模型看做一个阅卷老师,他代表的是人类的偏好,主要是为了给策略模型的完整回答打出一个最终的分数,他提供的是最原始的 Ground Truth 信号,是一切优化的源头,他一般是使用准备好的偏好数据集训练的一个 Transformer 的 Decoder 或者 Bert。
三、GRPO 算法 上面我们已经讲完了 PPO 相关的所有内容,下面我们来看近几年最热门的强化学习算法,强化学习目前最高的山——由 DeepSeek 在 DeepSeekMath 论文中提出的组相对策略优化(Group Relative Policy Optimization, GRPO)。
因为 PPO 算法的 Critic Model 过于繁琐,训练起来会导致显存翻倍,这样的训练成本会很高,一个 70B 的模型,训练起来也需要一个 70B 的价值模型,而且训练的过程繁琐,模型难以收敛,且对参数及其敏感。
而 GRPO 的核心思想就是,与其培养一个 Critic Model 来预测基线,不如让模型自己去生成一组答案,算出这组答案的平均分,用平均分当基线。
所以 GRPO 算法里面涉及的模型就只有三个,包括策略模型,SFT 模型以及奖励模型,因为是在 PPO 算法基础上做的更新,所以我下面只说一些有明显区别的地方。
具体的 GRPO 算法的整体损失,因为去除了价值模型,所以也就没有对应的价值损失部分,而且 GRPO 也把 KL 散度做了进一步的优化,整体的损失是:
$$L^{GRPO}(\theta) = \mathbb{E}t[A_t \cdot \pi \theta(a|s)] - \lambda_t D_{KL}(\pi_\theta || \pi_{old})$$
$$J_{GRPO}(\theta) = \mathbb{E}{q \sim P(Q), {o_i} \sim \pi {\theta_{old}}} \left[ \frac{1}{G} \sum_{i=1}^{G} \left( \min \left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{old}}(o_i|q)} A_i, \text{clip} \left( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{old}}(o_i|q)}, 1-\epsilon, 1+\epsilon \right) A_i \right) - \beta D_{KL}(\pi_\theta || \pi_{ref}) \right) \right]$$
从整体来看,GRPO 的损失分成两个部分,也就是策略损失和 KL 散度。
采样 :对于同一个提示词 $q$ 让 old Policy(旧策略)采样生成 G 个不同的回答 {O1, O2, O3, ..., On}。
打分 :使用奖励模型,给 G 个回答进行打分,得到对应的奖励序列 R。
优势 :计算优势,优势是 GRPO 的核心,计算的也是这组分数的相对优势--平均优势 $A$。
KL 散度 :计算优势的同时把回答和提示词输入到 SFT 模型,之后计算策略模型和 SFT 模型生成每个词直接的概率,用这些概率来计算 KL 散度。
迭代 :计算损失,梯度下降,更新模型参数。
这其中有过更新改进的部分有两个,分别是新的优势和 KL 散度,下面我们主要看这两个部分。
1. GRPO 的优势 GRPO 的优势计算不同于之前 PPO 优势的计算,因为他去除了所谓的价值模型,所以也就没有了所谓的预测奖励,他的计算是使用组间相对平均优势来衡量的:
$$A_i = \dfrac{R_i - \operatorname{Mean}(R_{\mathrm{group}})}{\operatorname{Std}(R_{\mathrm{group}})}$$
其中 $\operatorname{Std}(R_{\mathrm{group}})$ 是这 G 个回答的标准差,$\operatorname{Mean}(R_{\mathrm{group}})$ 是这 G 个回答的平均分(Baseline),$R_i$ 是第 i 个回答的分数。
如果 $A_i > 0$:说明这个回答比这一组的平均水平好。
如果 $A_i < 0$:说明这个回答比这一组的平均水平差。
GRPO 使用这样巧妙的方式让分数和平均分数作差,最后用标准差归一化,得到的数值,间接衡量每一组数据的优势。这样做的好处就是模型会敏锐地捕捉到那些'鹤立鸡群'的高分回答,并疯狂强化它。
2. GRPO 的 KL 散度 在 PPO 算法里面,KL 散度并不是为了'正则化'或者'对齐',他的核心作用是信任区域约束。
那么为什么这两个算法都要计算 KL 散度呢?
策略梯度算法都有一个核心问题:如果一次参数更新策略更新让策略变化太大,可能会导致性能急剧下降,并且很难回复。TRPO 通过 KL 约束来解决这个问题,但是计算太过复杂,后续的多类强化学习方法都是借鉴了这个思路并在计算上做了简化。
言归正传,我们来看 GRPO 的 KL 散度计算,在这个算法里面,我们的 Reward Model 往往是不完美的(可能是个打分模型,也可能是简单的规则)。如果模型发现某些特殊的 Token 组合能拿高分奖励,它就会疯狂的输出这些 Token,导致模型输出变成乱码或者不符合人类语言习惯。
我们需要一个'锚点',让模型在优化 Reward 的同时,概率分布不要偏离初始的 SFT 模型太远,这个锚点就是 $\pi_{ref}$。
GRPO 的 KL 散度计算不把 KL 放在 Loss 里优化,而是将其视为奖励函数的一部分。
$$D_{\mathrm{KL}}\bigl(\pi_\theta ,|, \pi_{\mathrm{ref}}\bigr) \approx \frac{\pi_\theta}{\pi_{\mathrm{ref}}} - \log\frac{\pi_\theta}{\pi_{\mathrm{ref}}} - 1$$
首先,第一个好处是:保证非负性。理论上,KL 散度作为一种'距离'度量,永远应该是 $\geq 0$。但是 PPO 的 KL 散度计算会有一种弊端:
比如:当前模型生成某个词的概率 P = 0.1,而参考模型的 Q = 0.2。
此时的差值 KL 散度就是负数。
这意味着:模型因为偏离了参考模型(实际变得更差),反而获得了一个奖励。这会严重干扰训练,导致震荡。
后果:如果 KL 散度是负数,带入奖励修正公式 $R_{total} = R_{score} - \beta \cdot KL$,会导致奖励变大!当我们使用单步采样来估算 KL 时,$\log P(x) - \log Q(x)$ 经常会变成负数。
这保证了 KL 惩罚永远是'惩罚',绝对不可能变成'奖励'。
无论是正还是负,结果永远 $\geq 0$。
KL 散度计算近似是函数 $f(x) = e^{x} - x - 1$,而这个函数的最小值在 x = 0 处,值是 0。
在数学上,KL 散度的定义是一个期望值。
在 RLHF 训练中,我们是用蒙特卡洛采样(具体的某一个 token)去近似这个期望。
好处:训练过程中 Loss 的波动更小,模型收敛更稳,不会因为采样到了一个离谱的 token 就突然梯度爆炸。
研究证明,$\frac{\pi_\theta}{\pi_{\mathrm{ref}}} - \log\frac{\pi_\theta}{\pi_{\mathrm{ref}}} - 1$ 是 KL 散度的一个低方差估计器。
最后一个好处:对'偏离'更敏感。让我们先来看这两个计算方式在 $P \approx Q$ 时的泰勒展开:
GRPO:
$$e^{x} - x - 1 \approx \frac{1}{2} x^{2}$$
PPO:
$$\log P - \log Q \approx \Delta$$
区别在于,GRPO 的计算方式在本质上近似均方误差的计算方式,这也就意味着,当偏离很小的时候,惩罚很轻,当偏离变大时,惩罚会呈现平方级增长。这就是 DeepSeek 的考量:希望模型早'微小改变'时不要受到太大的阻碍(方便探索)。但是一旦模型想'大幅度修改'概率(比如把一个不该说的词概率提的很高),由于 $x^2$ 的存在,KL 惩罚会瞬间爆炸,强行把模型拉回来。这对应防止 Reward Hacking(模型为了高分开始胡言乱语)非常有效。
$$L_{\mathrm{CRPO}}(\theta) = \frac{1}{G} \sum_{i=1}^{G} \min \left( \tfrac{\pi_\theta(o_i | q)}{\pi_{\text{old}}(o_i | q)} A_i, \text{clip} \left( \tfrac{\pi_\theta(o_i | q)}{\pi_{\text{old}}(o_i | q)}, 1-\epsilon, 1+\epsilon \right) A_i \right) - \beta D_{\text{KL}}(\pi_\theta | \pi_{\text{ref}})$$
我们已经拿到了这个公式的所有需要迭代计算的值,之后只需要计算即可。
在整个 GRPO 算法的流程中,涉及到的模型有三个,两个模型参数冻结,一个模型的参数随着训练参数不断迭代更新。
算法中,更新参数的模型依旧是策略模型,在 GRPO 里面他的部分仍然是根据提示词,生成多个回答,用于后续计算 KL 散度和优势等;两个冻结的模型,一个是 SFT 模型,用于计算 KL 散度,通过 KL 散度约束训练模型,防止为了刷分而变得胡言乱语,这里的 KL 散度是直接作用用损失函数的,还是比较重要的部分;最后一个模型就是奖励模型,他负责的部分仅仅是给出奖励预测序列用来计算优势。
总结一下,GRPO 就是通过让模型对同一个问题生成一组回复,利用这组回复的平均分代替 Critic 模型预测值作为基线,从而去掉 Critic 模型,大幅节省显存并提高训练效率的强化学习算法。
四、GSPO 算法 GSPO 全称 Group Sequence Policy Optimization(组序列策略优化),是一种专为 LLM Post-training 设计的强化学习算法。它继承了 GRPO (DeepSeek) '去 Critic' 和'组内归一化'的思想,但在序列级(Sequence-level)优化和 KL 散度处理上做了进一步改进。下面我会从几个方面来说明。
1. GSPO 的背景 上面我们已经了解了匹配 PPO 和 GRPO 算法,但是我们可以明显的看到,PPO 需要 Critic,显存重,且 Token 级的 KL 惩罚可能会破坏推理过程的连贯性(Chain-of-Thought)。而 GRPO 虽然去掉了 Critic,但其 KL 约束通常是 Token 级的或者简单的正则项,对于长序列推理(CoT),这种约束可能过于死板。而 GSPO 强调序列级(Sequence-level)的优化。它认为推理过程(CoT)是一个整体,不应该被拆解成碎片化的 Token 来计算 KL 惩罚。
2. GSPO 的流程 在 GSPO,我们关注的是整条轨迹的概率比值,而不是单个 Token 的比值。
$\pi_{old}$:采样数据时的旧模型。
$\pi_\theta$:当前正在更新的模型。
$y$:整个回复序列,包含 T 个 Token,即 $y = [y_1, y_2, \dots, y_T]$。
$x$:Prompt(提示词)。
序列级概率的定义就是:模型在生成整句话 y 的概率,是所有 Token 概率的连乘:
$$P(y \mid x) = \prod_{t=1}^{T} P(y_t \mid x, y_{<t})$$
序列级 Ratio($\rho_{\mathrm{seq}}$)定义:
$$\rho_{\mathrm{seq}} = \frac{\pi_\theta(y \mid x)}{\pi_{\mathrm{old}}(y \mid x)} = \frac{\prod_{t=1}^{T} \pi_\theta(y_t \mid x, y_{<t})}{\prod_{t=1}^{T} \pi_{\mathrm{old}}(y_t \mid x, y_{<t})}$$
Token 级别的 Log 概率的计算
对于序列中每一个位置 t,分别计算新旧模型生成该 Token 的对数概率。
Old:$\log \pi_{old}(y_t)$
New:$\log \pi_\theta(y_t)$
计算 Token 级的差值
$$\delta_i = \log \pi_\theta(y_i) - \log \pi_{\mathrm{old}}(y_i)$$
序列求和--GSPO 的关键
这是 GSPO 与 PPO/GRPO 的最大区别。PPO 是保留 Token 维度,而 GSPO 要把时间步维度 Sum 掉。
$$\log \rho_{\mathrm{seq}} = \sum_{t=1}^{T} \delta_t = \sum_{t=1}^{T} \bigl( \log \pi_\theta(y_t) - \log \pi_{\mathrm{old}}(y_t) \bigr)$$
Mask 处理 :在求和时,必须使用 Attention Mask 过滤掉 Padding 的部分,只计算有效 Token 的和。
还原为 Ratio
$$\rho_{\mathrm{seq}} = \exp(\log \rho_{\mathrm{seq}})$$
3. GSPO 的思想 在 GSPO 中,KL 散度不再是逐 Token 计算并累加的,而是基于整个生成序列的概率分布来计算。GSPO 引入了一种序列级 KL 正则化 (Sequence-level KL Regularization)。具体的计算方式往往结合了 Rejection Sampling (拒绝采样) 的思想。
木桶效应 :
在长链推理(CoT)中,一个逻辑链条只要中间断了一环(一个 Token 错了),整个推理就废了。
PPO/GSPO:倾向于奖励好的步骤。即使整道题做错了,如果中间有几步写得好,PPO 也会去尝试奖励那几步。
GSPO:倾向于成王败寇。他看的是整条路径的概率变化。如果这组回答是高分,GSPO 会要求模型整体提高生成这一串 Token 的概率,而不是只提高几个词。
梯度特性的改变 :
Sequence 级更新:梯度是作用在 $r_{seq} \cdot A$。这意味着,序列中每一个 Token 的更新幅度,都取决于整句话的概率变化率。这能更好保持句子的连贯性。
Token 级更新:梯度是作用在每个 t 的 $r_t \cdot A$。
GSPO 的核心观念就是对齐,就是为了解决之前的强化学习算法在奖励上和重要性采样比例上面维度不匹配的情况,之前的强化学习算法,PPO 也好,GRPO 也罢,都是计算的是 Token 基本的重要性采样比例,序列级别的奖励;GSPO 利用对数空间中'加法等价于乘法'的性质,通过对序列中所有 Token 的对数概率差进行【序列求和】,从而等效算出代表整段回复概率变化的【重要性采样比例连乘】,以此作为更新整条策略轨迹的权重。
五、PRM 与 ORM 对比 过程奖励模型(PRM)和结果奖励模型(ORM)是当前大语言模型(LLM)强化学习(RLHF)和推理能力提升中的两个核心概念。这两个概念的详细对比主要源自 OpenAI 在 2023 年发表的一篇经典论文:《Let's Verify Step by Step》 (让我们一步步验证)。
ORM :结果奖励模型,别名稀疏奖励;也就是只看结果,模型生成完整的回答之后,ORM 检查最终答案是否正确。如果答案对,给高分;答案错,给低分。
PRM :过程奖励模型,别名密集奖励;也就是看每一步的过程,模型每生成一个推理步骤,PRM 就会评估这一步是否正确,合乎逻辑。
下面我通过两个问题来说明这篇论文提出的两个核心内容。
1. 为什么 ORM 不够好? 论文指出,在复杂的思维链推理中,依靠最终结果来训练模型存在两个大问题:
错误的推理得到正确的答案 :例如,模型在步骤 A 犯了个错,在步骤 B 又犯了个错,两个错误互相抵消,最后答案居然是对的,ORM 会奖励这种行为。
搜索效率低 :如果使用 Best-of-N(生成 N 个答案选最好的)策略,ORM 只能等整个答案生成完才能判断。如果第一步错了,后面的计算都是浪费算力。
2. PRM 是怎么工作的? OpenAI 训练了一个 PRM,专门用来给推理步骤打分。
数据标注 :他们雇佣人类标注员,给每一步打上:Positive/Negative/Neutral 三类标签。
训练目标 :最大化每一步预测人类标签的准确率。
推理应用 :在模型生成答案时,使用 PRM 进行树搜索或者加权投票。如果 PRM 判断当前步骤出错了,就剪枝,重新生成,直到找到一条每一步都是得分高的路径。
实验的结果就是:ORM 大约解决了 72% 的问题;PRM 解决了 78% 的问题。
ORM 容易让模型变成'只会做题的机器',不懂装懂。
PRM 让模型变成了'逻辑严密的学者',它通过自我反思(Self-Correction)或外部验证(Verifier),保证每一步都走得稳。
所以,ORM 是稍微弱于 PRM,但是真的是这样吗?下面我们来看一个新的范式。
六、RLVR 新范式 RLVR(Reinforcement Learning with Verifiable Rewards)——当前最主流、最强范式,他的核心思想就是用客观、可自动验证的奖励(如数学答案是否正确、代码是否通过单元测试、形式化证明是否成立)完全替代人类主观偏好。简单来说,这条路线的核心逻辑是:用'绝对客观的对错'(RLVR)取代'模糊的人类偏好',配合'去中心化的对比学习'(GRPO),逼迫模型涌现出思维链(CoT)。
因为 GRPO 是这个范式提出的原始算法,所以我下面的介绍都是用 GRPO 来展开。
数学题:问题 + 标准答案。
代码题:题目描述 + 单元测试用例。
逻辑题:谜题 + 唯一解。
组采样
输入一个 Prompt。
模型针对这个 Prompt 生成 G 个不同的答案。
关键点:模型必须有一定的随机性(Temperature > 0),以保证回答的结果各不相同,探索不同的解题路径。
环境验证
这是 RLVR 的精髓。不把回答给 Reward Model 模型看,而是给编译器或校验器看。
提取答案:从这 16 个回答中,正则匹配出最终答案(比如被 <answer> 包裹的内容)。
规则打分:
正确性奖励:如果答案匹配标准结果,得 1.0 分;否则得 0.0 分。
格式奖励:为了强制模型思考,如果模型使用了 <think> 标签包裹思维链,额外给 0.1 分。
优势计算 策略更新
假设 G = 16 个回答里面,有两个做对了,其余全错,对的优势将会提供极大的正反馈。
模型收到的信号就是:虽然我不知道为什么,但是只要我像那 2 个回答一样写了一大堆推导过程,最后就拿到了高分。
梯度下降,强化那条长思维链的路径。
随着训练进行,模型发现简单的蒙答案(直接输出结果)几乎不可能拿高分(因为很难蒙对)。
模型开始尝试'打草稿'(生成更长的 token)。
偶然间,某次'打草稿'的行为导致了正确答案,被 GRPO 狠狠地奖励了。
结果 :模型学会了在输出答案前,先进行自我反思、验证和分步骤推理。这就是 DeepSeek-R1-Zero 中观察到的'顿悟时刻'。
顿悟时刻:简单来说就是模型在没人教它怎么做的情况下,为了拿高分,自己'憋'出了人类没教过的高级思考技巧。
这也就是 RLVR 基本结合 GRPO 的流程,可以看到,这个过程和 ORM 非常相似,两者都是看的是结果导向,但是又不是完全相同,因为 RLVR 的过程也有考虑过程的思维性。我们可以考虑一下一个最强的训练范式就是 PRM + RLVR,在考虑结果导向的可验证的奖励同时,可以并行的将过程的奖励计入其中,这样模型不论是在思考的过程,还是结果的导向上,都能达到最佳,目前在往这方面探索的研究还是不少,但是暂时没有给定一个强大的框架,我觉得这个范式会将是强化学习的未来。
参考资料
Zheng C, Liu S, Li M, et al. Group sequence policy optimization[J]. arXiv preprint arXiv:2507.18071, 2025.
Lightman H, Kosaraju V, Burda Y, et al. Let's verify step by step[C]//The Twelfth International Conference on Learning Representations. 2023.
Shao Z, Wang P, Zhu Q, et al. Deepseekmath: Pushing the limits of mathematical reasoning in open language models[J]. arXiv preprint arXiv:2402.03300, 2024.
Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithms[J]. arXiv preprint arXiv:1707.06347, 2017.
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online