📘今日学习总结
RLHF
PPO
PPO整体框架
- 输入问题 \(q\) ,经过策略模型更新,生成问题回答 \(o\) ,然后输入到三个模型
- 策略模型(Policy Model):负责生成决策
- 奖励模型(Reward Model):负责对生成决策的优劣程度进行打分
- 价值模型(Value Model):估计当前决策的价值,用于修正奖励得分
- 参考模型(Reference Model):帮助“约束”模型,防止其被过度更新
 
- ![[image-20251030212431153.png]]
PPO数据格式
- 原始数据:仅需准备提示词 prompt
- 中间采样环节:借助旧模型(old model),对每个提示词采样生成单个回答
PPO优势计算
- 优势估计:引导模型从所有决策中挑选相对最佳的决策
- 优势函数:\(\widehat{A}_{t}=Q \left( s_{t},a_{t} \right)-V \left( s_{t} \right)\)
- \(Q \left( s_{t},a_{t} \right)\)表示当前状态下选取特定策略能获得的奖励,可通过奖励模型得到
- \(V \left( s_{t} \right)\)表示当前状态开始所有决策的奖励期望,需要训练价值模型(Value Model)得到
- 对于语言模型而言,生成第i个token的实际收益 \(Q\) 就是:从生成第 \(i\) 个token 开始到生成第 \(N\) 个token为止,所能获得的所有奖励的总和。
 
PPO损失函数
Policy Model的损失函数
- \(\mathcal{J}_{\mathrm{CLIP}}(\theta)=\hat{\mathbb{E}}_{t}\left[\min\left(r_{t}( \theta)\hat{A}_{t},{\mathrm{clip}\left(r_{t}(\theta),1-\epsilon,1+ \epsilon\right)}\hat{A}_{t}\right)\right]\)
- 重要性采样
- 定义:通过分布 \(p\) 上采样得到的样本来近似分布 \(q\) 上样本分布
- \(\begin{split}\mathbb{E}_{x\sim q}\left[f(x)\right]& =\int q(x)\cdot f(x) \mathrm{d}x\\ &=\int \frac{p(x)}{p(x)}\cdot q(x)\cdot f(x) \mathrm{d}x\\ &=\int p(x)\cdot\left[\frac{q(x)}{p(x)}\cdot f(x)\right] \mathrm{d}x=\mathbb{E}_{x\sim p}\left[\frac{q(x)}{p(x)}\cdot f(x)\right]\end{split}\)
 
- 设置 \(p\) 为off-policy数据分布,\(q\) 为on-policy交互得到的样本分布
- \(\mathbb{E}_{\begin{subarray}{c}a_{t}\sim\left[\pi_{\theta}\right] \\ \end{subarray}}\big[\hat{A}_{t}\big] =\mathbb{E}_{\begin{subarray}{c}{a_{t}\sim\pi_{\theta_{ \mathsf{old}}}}\\ \end{subarray}}\left[\frac{\pi_{\theta}(a_{t}|s_{t})}{\pi_{\theta_{ \mathsf{old}}}(a_{t}|s_{t})}\hat{A}_{t}\right]\)
 
- \(r_{t} \left( \theta \right)= \frac{ \pi_{ \theta} \left( a_{t}|s_{t} \right) }{ \pi_{ \theta_{old}} \left( a_{t}|s_{t} \right)}\) 利用off-policy数据估计on-policy的奖励期望
 
- 定义:通过分布 \(p\) 上采样得到的样本来近似分布 \(q\) 上样本分布
- 梯度裁剪:保证算法稳定性
- 目标:防止更新策略过于激进,使得模型被过度优化
- 引入裁剪前后优势值的最小值参与
- \(\widehat{A}_{t}\) 大于0:当前决策较优,提升其概率\(\pi_{ \theta} \left( a_{t}|s_{t} \right)\)↑
- 该概率过大时,clip函数裁剪其梯度,以限制其更新幅度
 
- \(\widehat{A}_{t}\) 小于0:当前决策较差,减小其概率\(\pi_{ \theta} \left( a_{t}|s_{t} \right)\)↓
- 该概率过小时,clip函数防止其参与梯度计算,以保证算法稳定性
 
 
- \(\widehat{A}_{t}\) 大于0:当前决策较优,提升其概率\(\pi_{ \theta} \left( a_{t}|s_{t} \right)\)↑
 
 
- 重要性采样
Policy Model的损失函数
GRPO
GRPO整体框架
- PPO:需要维护和更新多个模型,占用内存资源
- GRPO:移除价值模型,从同一问题多个输出中计算平均奖励来替代
- ![[image-20251030214419620.png]]
GRPO数据格式
- 原始数据:仅需准备提示词 prompt
- 中间采样环节:借助旧模型(old model),对每个提示词采样生成多个回答
GRPO奖励计算
- 基于组内每条数据的奖励值,归一化后计算优势估计
- Group 规模足够大时,该优势估计能近似等于全部输出的奖励期望
- \(A_{i}= \frac{r_{i}-mean \left( \left \{ r_{1},r_{2}, \cdots,r_{G} \right \} \right)}{std \left( \left \{ r_{1},r_{2}, \cdots,r_{G} \right \} \right)}\)
 
GRPO优势计算
- \(\begin{split}& J_{\text{GRPO}}(\theta)=\\ &\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|O_{i}|}\sum_{t=1}^{|O_{i}|} \left[\min\left(\frac{\pi_{\theta}(o_{i,t}\mid q_{i},o_{i:<t})}{\pi_{\text{old} }(o_{i,t}\mid q_{i},o_{i:<t})}A_{i}^{t},\text{clip}\left(\frac{\pi_{\theta}(o_ {i,t}\mid q_{i},o_{i:<t})}{\pi_{\text{old}}(o_{i,t}\mid q_{i},o_{i:<t})},1- \epsilon,1+\epsilon\right)A_{i}^{t}\right)-\beta D_{\text{KL}}[\pi_{\text{old}} \parallel\pi_{\text{ref}}]\right]\end{split}\)
- GRPO优势值:\(A_{i}= \frac{r \left( q_{i},O_{i} \right)-mean \left( \left \{ r \left( q_{j},O_{j} \right) \right \}_{j=1}^{G} \right)}{std \left( \left \{ r \left( q_{j},O_{j} \right) \right \}_{j=1}^{G} \right)}\)
- 重要性采样权重:\(r_{i,t} \left( \theta \right)= \frac{ \pi_{ \theta} \left( o_{i,t}|q_{i},o_{i:<t} \right)}{ \pi_{old} \left( o_{i,t}|q_{i},o_{i:<t} \right)}\)
- 原 KL 惩罚项改为其无偏估计,该函数恒为正值,使训练更加稳定
- \(\mathbb{D}_{KL}\left[\pi_{\theta}||\pi_{ref}\right]=\frac{\pi_{ref}(o_{i,t}|q,o_{i,<t})}{\pi_{\theta}(o_{i,t}|q,o_{i,<t})}-\log\frac{\pi_{ref}(o_{i,t}|q,o_ {i,<t})}{\pi_{\theta}(o_{i,t}|q,o_{i,<t})}-1\)
 
DPO
DPO整体框架
- DPO(Direct PreferenceOptimization,直接优化策略)是一种非常高效的算法。
- 它巧妙地绕过了构建奖励模型和强化学习这两个的繁琐过程,直接通过偏好数据进行微调,无需加载Reward和Critic这两个模型,效果简单粗暴,在使模型输出更符合人类偏好的同时,极大地缩短了训练时间和难度。
- 主要思想
- 建立策略函数与奖励函数之间的关系以规避奖励建模的过程,无须奖励模型
- 目标:直接构建输入、正例和负例三者之间的关系
 
- ![[image-20251031055454639.png]]
DPO数据格式
- 三元组【输入-优选回答 - 次选回答】数据对:
- query:苹果是什么?
- chosen:苹果是一种可以润肺、解暑的红色水果。
- rejected:苹果是水果。''
 
DPO损失函数
- DPO 的损失函数通过对比chosen和rejected的概率差异有效优化模型,使其更倾向于生成chosen级别的回答主要不同就是损失函数的设计
- \(L(\theta)=-\mathbb{E}_{(x,y^{+},y^{-})\sim\mathcal{D}}\left[\log\sigma\left( \beta\log\left(\frac{\pi_{\theta}(y^{+}|x)}{\pi_{\theta_{\mathrm{old}}}(y^{+} |x)}\right)-\beta\log\left(\frac{\pi_{\theta}(y^{-}|x)}{\pi_{\theta_{\mathrm{ old}}}(y^{-}|x)}\right)\right)\right]\)
- PPO 优化目标的最优解推导
- 特殊函数\(Z \left( x \right)= \sum_{y} \pi_{ \theta_{old}} \left( y|x \right) \exp \left( \frac{1}{ \beta}r \left( x,y \right) \right)\)代入简化算式,建立奖励函数与策略函数关系
- \(\begin{aligned} L(\theta)&=\max_{\pi_{ \theta}}\mathbb{E}_{x\sim\mathcal{D}}\mathbb{E}_{y\sim\pi_{\theta}(\cdot|x)} \left[r(x,y)-\beta\log\frac{\pi_{\theta}(y|x)}{\pi_{\theta_{\mathrm{old}}}(y| x)}\right]\\ &=\min_{\pi_{\theta}}\mathbb{E}_{x\sim\mathcal{D}}\mathbb{E}_{y \sim\pi_{\theta}(\cdot|x)}\left[\log\frac{\pi_{\theta}(y|x)}{\pi_{\theta_{ \mathrm{old}}}(y|x)}-\frac{1}{\beta}r(x,y)\right]\\ &=\min_{\pi_{\theta}}\mathbb{E}_{x\sim\mathcal{D}}\mathbb{E}_{y \sim\pi_{\theta}(\cdot|x)}\left[\log\frac{\pi_{\theta}(y|x)}{\frac{1}{Z(x)} \pi_{\theta_{\mathrm{old}}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}-\log Z (x)\right]\end{aligned}\)
- 使用配分函数\(\pi^{*} \left( y|x \right)= \frac{1}{Z \left( x \right)} \pi_{ \theta_{old}} \left( y|x \right) \exp \left( \frac{1}{ \beta}r \left( x,y \right) \right)\)简化公式
- \(\begin{split}&\min_{\pi_{\theta}}\mathbb{E}_{x\sim\mathcal{D}} \mathbb{E}_{y\sim\pi_{\theta}(\cdot|x)}\left[\log{\frac{\pi_{\theta}(y|x )}{\frac{1}{Z(x)}\pi_{\theta_{\mathrm{old}}}(y|x)\exp\left(\frac{1}{\beta}r(x, y)\right)}}-\log Z(x)\right]\\ =&\min_{\pi_{\theta}}\mathbb{E}_{x\sim\mathcal{D}} \mathbb{E}_{y\sim\pi_{\theta}(\cdot|x)}\left[\log\frac{\pi_{\theta}(y|x)}{\pi ^{*}(y|x)}-\log Z(x)\right]\\ =&\min_{\pi_{\theta}}\mathbb{E}_{x\sim\mathcal{D}} \left[\mathbb{E}_{y\sim\pi_{\theta}(\cdot|x)}\left[\log\frac{\pi_{\theta}(y|x )}{\pi^{*}(y|x)}\right]-\log Z(x)\right]\\ =&\min_{\pi_{\theta}}\mathbb{E}_{x\sim\mathcal{D}} \left[\mathrm{KL}\left[\pi_{\theta}(y|x),\pi^{*}(y|x)\right]-\log Z(x)\right] \end{split}\)
 
- 由于左边算式中 \(Z \left( x \right)\) 取值与与 \(\pi_{ \theta}\) 无关,可两边展开推导得解析最优解
- \(\begin{split}&\pi_{r}(y|x)=\frac{1}{Z(x)}\pi_{\theta_{\mathrm{old }}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)\\ \Rightarrow&\log\left(\pi_{r}(y|x)\right)=\log\left( \frac{1}{Z(x)}\pi_{\theta_{\mathrm{old}}}(y|x)\exp\left(\frac{1}{\beta}r(x,y) \right)\right)\\ \Rightarrow&{\log\left(\pi_{r}(y|x) \right)-\log\left(\frac{1}{Z(x)}\right)-\log\left(\pi_{\theta_{\mathrm{old}}}( y|x)\right)}=\log\left(\exp\left(\frac{1}{\beta}r(x,y)\right)\right)\\ \Rightarrow&{r(x,y)=\beta\log\left(\frac{\pi_{r }(y|x)}{\pi_{\theta_{\mathrm{old}}}(y|x)}\right)+\beta\log\left(Z(x)\right)}. \end{split}\)
 
- 基于奖励模型训练目标
- \(\begin{split} P\big(y^{+}>y^{-}|x\big)&=\frac{ \exp(r\big(x,y^{+}\big))}{\exp(r\big(x,y^{+}\big))+\exp(r\big(x,y^{-} \big))}\\ &=\frac{1}{1+\frac{\exp\left(r\left(x,y^{-}\right)\right)}{\exp \left(r\left(x,y^{+}\right)\right)}}.\end{split}\)
 
- 代入其与策略函数关系式\(r \left( x,y \right)= \beta \log \left( \frac{ \pi_{r} \left( y|x \right)}{ \pi_{ \theta_{old}} \left( y|x \right)} \right)+ \beta \log \left( Z \left( x \right) \right)\),约掉奖励函数项
- \(\begin{split} P(y^{+}>y^{-}|x)&=\frac{1}{1+\frac{ \exp(\beta\log\left(\frac{\pi_{r}(y^{-}|x)}{\pi_{\theta_{\rm old}}(y^{-}|x)} \right)+\beta\log(Z(x)))}{\exp(\beta\log\left(\frac{\pi_{r}(y^{+}|x)}{\pi_{ \theta_{\rm old}}(y^{+}|x)}\right)+\beta\log(Z(x)))}}\\ &=\frac{1}{1+\exp\left(\beta\log\left(\frac{\pi_{r}(y^{-}|x)}{\pi _{\theta_{\rm old}}(y^{-}|x)}\right)-\beta\log\left(\frac{\pi_{r}(y^{+}|x)}{ \pi_{\theta_{\rm old}}(y^{+}|x)}\right)\right)}\\ &=\sigma\left(\beta\log\left(\frac{\pi_{r}(y^{+}|x)}{\pi_{\theta _{\rm old}}(y^{+}|x)}\right)-\beta\log\left(\frac{\pi_{r}(y^{-}|x)}{\pi_{ \theta_{\rm old}}(y^{-}|x)}\right)\right)\end{split}\)
- 最终优化目标:\(L(\theta)=-\mathbb{E}_{(x,y^{+},y^{-})\sim\mathcal{D}}\left[\log\sigma\left( \beta\log\left(\frac{\pi_{\theta}(y^{+}|x)}{\pi_{\theta_{\mathrm{old}}}(y^{+} |x)}\right)-\beta\log\left(\frac{\pi_{\theta}(y^{-}|x)}{\pi_{\theta_{\mathrm{ old}}}(y^{-}|x)}\right)\right)\right]\)
- 对该式求导,并令\(u= \beta \log \left( \frac{ \pi_{ \theta} \left( y^{+}|x \right)}{ \pi_{ \theta_{old}} \left( y^{+}|x \right)} \right)- \beta \log \left( \frac{ \pi_{ \theta} \left( y^{-}|x \right)}{ \pi_{ \theta_{old}} \left( y^{-}|x \right)} \right)\)
- 导数可化简为:\(\nabla L(\theta)=-\nabla\mathbb{E}_{(x,y^{+},y^{-})\sim\mathcal{D}}\left[\log \sigma(u)\right]=-\mathbb{E}_{(x,y^{+},y^{-})\sim\mathcal{D}}\left[\frac{ \nabla\sigma(u)}{\sigma(u)}\nabla u\right]\)
- 由 sigmoid 函数性质\(\nabla \sigma \left( u \right)= \sigma \left( u \right) \left( 1- \sigma \left( u \right) \right)= \sigma \left( u \right) \sigma \left(-u \right)\)可得:
- \(\quad-\operatorname{\mathbb{E}}_{( \scriptsize{x}, \scriptsize{y}^{+}, \scriptsize{y}^{-})\sim \scriptsize{\cal D}}\left[\frac{\nabla {\sigma}( {u})}{ {\sigma}( {u})}\nabla {u}\right]\newline =-\operatorname{\mathbb{E}}_{( \scriptsize{x}, \scriptsize{y}^{+}, \scriptsize{y}^{-})\sim \scriptsize{\cal D}}\left[ {\sigma}(- {u}) \nabla {u}\right]\)
 
- 代入\(\widehat{r}_{ \theta} \left( x,y \right)= \beta \log \left( \frac{ \pi_{ \theta} \left( y|x \right)}{ \pi_{ \theta_{old}} \left( y|x \right)} \right)\)并且展开
- \(-\beta\mathbb{E}_{(x,y^{+},y^{-})\sim\mathcal{D}}\left[{ \sigma(\hat{r}_{\theta}(x,y^{-})-\hat{r}_{\theta}(x,y^{+})]}\left[\nabla\log \pi_{\theta}(y^{+}|x)-\nabla\log\pi_{\theta}(y^{-}|x)\right]\right]\)
- \(\sigma(\hat{r}_{\theta}(x,y^{-})-\hat{r}_{\theta}(x,y^{+})\)动态控制梯度下降的步长
- \(\nabla\log \pi_{\theta}(y^{+}|x)-\nabla\log\pi_{\theta}(y^{-}|x)\)增大模型生成正例和负例之间的概率差距
 
 
DAPO
DAPO的算法函数
- 在实际训练中,GRPO往往因clip范围设置不合理、采样冗余以及长序列梯度被稀释等问题,导致大量训练信号被浪费,所以针对这些问题,DAPO逐一提出改进,以下为DAPO的损失函数:
- \(\begin{split}\mathcal{J}_{\text{DAPO}}(\theta)=\\ \mathbb{E}_{(q,a)\sim\mathcal{D}, \{o_{i}\}_{i - 1}^{G}\sim \pi_{\text{old}}(\cdot|q)}&\left[\frac{1}{\sum_{i=1}^{G}|o_{i}|} \sum_{i=1}^{G}\sum_{t=1}^{|o_{i}|}\min\left(r_{i,t}(\theta)\hat{A}_{i,t}, \text{clip}\left(r_{i,t}(\theta), 1-\epsilon_{\text{low}}, 1+\epsilon_{\text {high}}\right)\hat{A}_{i,t}\right)\right]\\ &\qquad\qquad\text{s.t } 0<\big|\big\{o_{i}\mid\text{is\_equivalent}(a, o_{i})\big\}\big|<G\end{split}\)
- 其中重要性采样和优势计算方法与GRPO一致。
DAPO的改进
改进一:提高clip的上界
- GRPO 中clip上界较小,会导致低概率但优势为正的关键 token 被抑制。
- 比如old policy难得采到一个关键 token且概率极低,而当前模型对此token的概率很高,那么 \(r_t\) 的比率就会很大,但却会因为clip限制过紧被裁剪,那么低概率关键 token 就几乎没有被很好的训练。
- 所以 DAPO 引入Clip-Higher 提高上界,释放低概率关键 token 的上涨空间,解决低概率关键 token 涨幅受限问题。
改进二:动态采样(DynamicSampling)
- GRPO训练中,若同一query被多次采样,并采样结果的得分相同,就会导致这些样本的优势为0,进而梯度为0,无法贡献有效的奖励训练信号。
- 那么实际有效的梯度就会少于采样的次数,导致最后梯度汇集时信息不足以及训练资源的浪费。
- 而且这种效果可能随着训练的进行越来越明显,因为越到后边模型效果越好,给出高分回答的几率就越大,相对优势就越小,而且会出现很多满分的情况。
- 所以DAPO添加了限制,就是如果采样出来的回答全是0或者1就继续采样,保证采样具有得分上的多样性
改进三:Token-Level Gradient Loss
- 长回答的token因第一步sample内平均,导致长回答的token梯度权重被稀释,短回答token权重更高。那么在训练过程中,长文本高质量回答的有用梯度就无法有效传递,影响训练效率。
- 原 GRPO 公式(sample-level 聚合)
- \(\frac{1}{G} \sum_{i=1}^{G} \frac{1}{|o_{i}|} \sum_{t=1}^{|o_{i}|}\)
 
- DAPO公式(token-level聚合)
- \(\frac{1}{ \sum_{i=1}^{G} \left| o_{i} \right|} \sum_{i=1}^{G} \sum_{t=1}^{ \left| o_{i} \right|}\)
 
 
- 原 GRPO 公式(sample-level 聚合)
- DAPO 采用Token-Level Gradient Loss,将损失聚合方式从sample 级两层平均改为全局 token 级单层平均,按所有采样的总token数归一化,让长、短回答的 token权重公平。
改进四:软惩罚机制(SoftPunishment)
- DAPO的第四项改进围绕奖励机制设计,引入软惩罚策略治理回答过长问题,该机制通过双阀值分级约束实现精准调控:
- 线性惩罚阶段:当回答长度超过第一个预设阈值时,惩罚随token数量线性增长
- 完全抵消阶段:若长度突破第二个阈值,则取消奖励,这个回答就会被视为无效
 
- 两个阶段的惩罚均以逐token的方式作用于奖励上,从梯度层面约束长回答的生成倾向。
改进五:移除KL散度
- KL散度的目标是避免模型行为与初始模型偏离过远,KL惩罚项可以调节模型与冻结参考策略之间的发散程度。
- 但在长文本推理模型中,实验发现模型分布可能会显著偏离初始模型,因此KL散度不再必要。
- \(\begin{split}\mathcal{J}_{\text{DAPO}}(\theta)=\\ \mathbb{E}_{(q,a)\sim\mathcal{D}, \{o_{i}\}_{i=1}^{G}\sim\pi_{ \theta_{\text{old}}}(\cdot|q)}&\left[\frac{1}{\sum_{i=1}^{G}|o_{ i}|}\sum_{i=1}^{G}\sum_{l=1}^{|o_{i}|}\min\left(r_{i,t}(\theta)\hat{A}_{i,t}, \text{clip}\left(r_{i,t}(\theta), 1-\epsilon_{\text{low}}, 1+\epsilon_{\text {high}}\right)\hat{A}_{i,t}\right)\right]\\ &\qquad\text{s.t.} 0<\big|\big\{o_{i}\mid\text{is\_equivalent}(a, o_{i})\big\}\big|<G\end{split}\)
- 我们可以从损失函数中看到DAPO移除了KL项。
改进六:在编程/数据问题中采用规则奖励
- Reward hacking指训l练出来的策略模型(policy model)通过利用奖励模型(reward model)的漏洞,获取高奖励,但产生的行为不是是我们期望的。
- 奖励模型的使用通常会受到reward hacking问题的困扰。DAPO就不用模型来判断是否给予奖励,直接设置奖励机制判断答案是否正确来得到奖励,通过以下规则计算:
- \(R(\hat{y}, y) = \begin{cases}1, & \text{is\_equivalent}(\hat{y}, y) \\-1, & \text{otherwise}\end{cases}\)
- 其中 \(y\) 是真实答案,\(\widehat{y}\) 是预测答案。这种方法在定理证明、编程和数学问题等多个领域均得到了验证,可以更好的激活模型推理能力。
GSPO
PPO/GRPO/DAPO是在token级别进行优化
- 在实际中我们通常用回复的完整内容来评价模型,但PPO与GRPO却用逐词的方法来训练。
- PPO和GRPO是对模型输出的token逐个优化,这种做法的本意是更精细的优化,但论文指出在大模型长文本的场景下,就容易引入噪声和奖励偏差,导致模型训练迷失方向。
- GSPO的核心思路就是把奖励和优化目标重新对齐,从给每个token打分,改为直接对整个句子打分。
- 这种切换带来的好处具体为:
- 一是更稳定:GSPO直接对整句进行训练,减少了词级波动带来的训练噪声。
- 二是更高效:GSPO根据句子的分筛选样本,仅保留高质量纯净的样本参与优化,让模型更快收敛,效果更好。
 
GRPO在MoE上难以收敛
- 由于MoE每次推理只激活少数几个专家模块,虽然效率更高,但新旧策略的Router可能发生变化,导致新旧策略激活了不同的专家。
- 比如:在l旧策略下,Router激活了【专家A】和【专家c】
- 在新策略下,Router激活了【专家B】和【专家D】
 
- 模型更新后,实际参与计算的专家组合可能完全不同,导致两个概率的生成基础存在结构差异,重要性比率失真急剧上升,所以Clip会被频繁地触发,导致梯度也严重失真。
- 当高方差噪声渗入训练梯度后,还会模型不可逆崩溃,即使回退到历史检查点、调整裁剪范围或者修改生成长度后也无法恢复训练稳定性。
- 理想的重要性比率本应仅反映同一模型结构下参数变化带来的输出差异,但此时的比率还混入了不同专家组合的影响,就会带来高方差导致训练崩溃。
- 为了在训练时复现这种推理路径,传统算法往往需要引入Routing Replay 的机制:即把推理时的专家模块调用记录下来,再还原到训练中使用,以保证前后一致。
- 这种做法虽然有效,但大大增加了工程成本,还制约了模型性能。
 
分组序列策略优化GSPO的损失函数
- 基于上述单token策略存在的问题,通义千问提出分组序列策略优化(GSPO),GSPO采用如下序列级优化目标:
- \(\mathcal{J}_{\text{GSPO}}(\theta)=\mathbb{E}_{x\sim\mathcal{D}, \{y_{\text{i} }\}_{\text{i-1}}^{G}\sim\pi_{\text{f}_{\text{old}}}(\cdot|x)}\left[\frac{1}{G} \sum_{i=1}^{G}\min\left(s_{i}(\theta)\hat{A}_{i}, \text{clip}(s_{i}(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_{i}\right)\right]\)
 
- GSPO采用基于分组的优势估计:\(\widehat{A}_{i}= \frac{r \left( x,y_{i} \right)-mean \left( \left \{ r \left( x,y_{i} \right) \right \}_{i=1}^{G} \right)}{std \left( \left \{ r \left( x,y_{i} \right) \right \}_{i=1}^{G} \right)}\)
- 并基于一句完整的话来定义重要性权重:\(s_{i}(\theta)=\left(\frac{\pi_{\theta}(y_{i}\mid x)}{\pi_{\theta_{\text{old}}} (y_{i}\mid x)}\right)^{\frac{1}{|y_{i}|}}=\exp\left(\frac{1}{|y_{i}|}\sum_{t=1 }^{|y_{i}|}\log\frac{\pi_{\theta}(y_{i,t}\mid x,y_{i:<t})}{\pi_{\theta_{\text {old}}}(y_{i,t}\mid x,y_{i:<t})}\right)\)
- 可以看到GSPO 是对整句话而非单个词进行裁剪,这既符合序列级奖励机制,也与优化目标一致。同时在 \(s_{i}(\theta)\) 中引入长度归一化以降低方差并将 \(s_{i}(\theta)\) 约束在统一数值范围,且不同长度响应的重要性比率需适配不同裁剪范围。
- 二者的区别主要在于,如何给tokens 的似然的梯度赋予权重。GRPO针对每个 token进行重要性采样,而此公式 \(\frac{ \pi_{ \theta} \left( y_{i,t}|x,y_{i:<t} \right)}{ \pi_{ \theta_{old}} \left( y_{i,t}|x,y_{i:<t} \right)}\) 所修正的分布对每个token不一致,用同一标准裁剪也不合理。GSPO升级为对tokens赋予sequence 级别重要性采样权重。