与 DeepSeek-R1)
Group Relative Policy OptimizationGRPO与 DeepSeek-R11. 使用背景最近大模型推理方向很热尤其是数学、代码、复杂问答这类任务。和之前主要依赖SFT、RLHF不同这一波工作更关注能不能直接通过强化学习把模型的推理能力激发出来。DeepSeek-R1、DeepSeekMath等工作里一个比较关键的方法就是GRPO。它可以看作是PPO在大语言模型推理任务中的一种改造版本核心思路是不再单独训练value model而是对同一个问题采样多个回答通过组内相对奖励来做策略优化。直观上看GRPO更适合这类场景同一道题往往可以采样出多个解答而这些解答之间的好坏本身就是可以比较的因此不一定非要额外学一个critic。2. 理论基础1强化学习里的策略优化在强化学习视角下大语言模型可以看作一个策略模型πθ\pi_\thetaπθ。对于输入问题qqq模型生成输出o(o1,o2,…,oT)o(o_1,o_2,\dots,o_T)o(o1,o2,…,oT)其概率可以写为πθ(o∣q)∏t1Tπθ(ot∣q,ot) \pi_\theta(o|q)\prod_{t1}^{T}\pi_\theta(o_t|q,o_{t})πθ(o∣q)t1∏Tπθ(ot∣q,ot)训练的目标是让模型更倾向于生成高奖励的回答。因此核心问题就变成如何根据回答质量来更新策略参数θ\thetaθ。2PPO的基本思想PPOProximal Policy Optimization是强化学习中非常经典的策略优化方法。它的核心是允许策略更新但限制更新幅度避免新策略偏离旧策略太多。为此PPO定义概率比值rt(θ)πθ(ot∣q,ot)πθold(ot∣q,ot) r_t(\theta)\frac{\pi_\theta(o_t|q,o_{t})}{\pi_{\theta_{\text{old}}}(o_t|q,o_{t})}rt(θ)πθold(ot∣q,ot)πθ(ot∣q,ot)并构造裁剪目标LPPO(θ)Et[min(rt(θ)A^t, clip(rt(θ),1−ϵ,1ϵ)A^t)] L_{\text{PPO}}(\theta)\mathbb{E}_t\left[\min\left(r_t(\theta)\hat A_t,\ \text{clip}(r_t(\theta),1-\epsilon,1\epsilon)\hat A_t\right)\right]LPPO(θ)Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1ϵ)A^t)]这里A^t\hat A_tA^t表示优势函数ϵ\epsilonϵ表示裁剪范围。这个目标的意思很简单如果新旧策略差得太多就把更新幅度截住。3PPO在LLM里的问题PPO虽然能直接用于语言模型后训练但也有一个比较现实的问题它通常需要一个额外的value model来估计优势。在大语言模型场景下这会带来两个麻烦value model本身训练和存储开销不小很多任务的奖励更适合在整个回答结束后统一判断比如数学答案对错、代码是否通过测试这时候逐token去学value并不自然。所以一个很自然的想法就是能不能不再单独训练value model而是直接利用同题多回答之间的相对好坏来构造优势。3. Group Relative Policy OptimizationGRPO1核心思想对于同一个问题qqqGRPO不是只采样一个回答而是采样一组回答{o1,o2,…,oG} \{o_1,o_2,\dots,o_G\}{o1,o2,…,oG}然后分别计算这组回答的奖励{r1,r2,…,rG} \{r_1,r_2,\dots,r_G\}{r1,r2,…,rG}接着在组内做归一化得到相对优势A^iri−mean({r1,…,rG})std({r1,…,rG}) \hat A_i\frac{r_i-\text{mean}(\{r_1,\dots,r_G\})}{\text{std}(\{r_1,\dots,r_G\})}A^istd({r1,…,rG})ri−mean({r1,…,rG})也就是说GRPO关心的不是“这个回答绝对有多好”而是“它在同一组回答里相对有多好”。这就是GRPO和传统PPO一个很大的区别它用组内相对奖励代替了额外的value估计。2目标函数GRPO延续了PPO的裁剪思想其目标函数可以写成JGRPO(θ)E[1G∑i1G1∣oi∣∑t1∣oi∣(min(ri,t(θ)A^i,t,clip(ri,t(θ),1−ϵ,1ϵ)A^i,t)−βDKL(πθ∥πref))] J_{\text{GRPO}}(\theta)\mathbb{E}\left[\frac{1}{G}\sum_{i1}^{G}\frac{1}{|o_i|}\sum_{t1}^{|o_i|}\left(\min\left(r_{i,t}(\theta)\hat A_{i,t},\text{clip}\big(r_{i,t}(\theta),1-\epsilon,1\epsilon\big)\hat A_{i,t}\right)-\beta D_{KL}\left(\pi_\theta\|\pi_{\text{ref}}\right)\right)\right]JGRPO(θ)EG1i1∑G∣oi∣1t1∑∣oi∣(min(ri,t(θ)A^i,t,clip(ri,t(θ),1−ϵ,1ϵ)A^i,t)−βDKL(πθ∥πref))其中ri,t(θ)πθ(oi,t∣q,oi,t)πθold(oi,t∣q,oi,t) r_{i,t}(\theta)\frac{\pi_\theta(o_{i,t}|q,o_{i,t})}{\pi_{\theta_{\text{old}}}(o_{i,t}|q,o_{i,t})}ri,t(θ)πθold(oi,t∣q,oi,t)πθ(oi,t∣q,oi,t)这个式子本质上还是PPO那套东西一是比较新旧策略的概率比二是用clip限制更新幅度三是加入KL正则避免策略漂移过快。真正不一样的地方在于A^i,t\hat A_{i,t}A^i,t的来源它不是critic给出来的而是由组内相对奖励构造出来的。3Outcome-level做法最简单的做法就是只对最终结果打分。比如一道数学题最后答案对了就高奖励错了就低奖励。这样一来第iii个回答的所有token都共享同一个组内相对优势A^i,tA^i \hat A_{i,t}\hat A_iA^i,tA^i这种方法简单直接也很适合答案可验证的任务。4直观理解PPO更像是我一边学策略一边学一个value来告诉我这一步到底值不值。GRPO更像是同一道题我先写出好几个答案然后比较这几个答案谁更好再根据这个相对结果来更新策略。所以GRPO本质上是把“价值估计问题”转成了“组内相对比较问题”。4. 为什么它有效我觉得GRPO之所以在推理任务里有效原因其实不复杂数学、代码这类任务的结果通常比较容易验证同一道题多采样几个答案本身就是合理的用组内比较来代替critic训练链条会更简洁。另外这种做法还有一个很自然的地方很多时候我们本来就更容易判断“哪个答案更好”而不是给单个答案打一个绝对分数。GRPO其实就是把这种比较思路写进了优化目标里。5. 和PPO的关系可以把GRPO看成是PPO在LLM推理任务下的一种改造。二者共同点很明显都有概率比值都有clip机制都会控制策略不要偏移太大。但GRPO做了一个关键替换把传统依赖value model的优势估计换成了基于组内奖励的相对优势。所以它不是完全脱离PPO而更像是在PPO框架里把最不适合LLM推理任务的那一部分替换掉了。6. 一点理解我感觉GRPO比较漂亮的一点在于它抓住了推理任务里一个很本质的事实很多时候好坏是相对的。比如同一道数学题让模型生成8个解答你未必能立刻给每个解答一个绝对准确的分数但你通常能判断出哪几个明显更好哪几个明显更差。GRPO就是利用了这一点。所以从这个角度看GRPO并不是单纯“少训了一个value model”而是换了一种更贴合推理任务的优化方式。7. 参考鸣谢PPO https://arxiv.org/abs/1707.06347InstructGPT / RLHF https://arxiv.org/abs/2203.02155DeepSeekMath https://arxiv.org/abs/2402.03300DeepSeek-R1 https://arxiv.org/abs/2501.129488. 注这篇主要是个人学习整理侧重直观理解公式和表述以便于理解为主严格定义建议结合原论文阅读才疏学浅欢迎批评、指导和交流有错误望大家及时指正