从 PPO、DPO 到 GRPO:大语言模型策略优化算法解析
从 PPO、DPO 到 GRPO:大语言模型策略优化算法解析
背景与简介
大语言模型(LLM)的训练通常分为预训练和后训练两个阶段。预训练阶段,模型在海量文本上学习下一词预测的能力;后训练阶段,我们希望进一步对齐模型输出与人类偏好,使模型给出的答案更符合人类期待。这常通过人类反馈强化学习(RLHF)来实现。RLHF的典型流程是:先让人类对模型的不同回答进行比较,得到偏好数据,然后训练一个奖励模型来评估回答质量,最后用强化学习方法微调语言模型的策略,使其生成被奖励模型高评分的回答。这一过程中诞生了多种策略优化算法,最知名的是OpenAI提出的近端策略优化(PPO)。PPO在InstructGPT等工作中成功将RLHF应用于GPT-3模型微调,大幅提升了问答的有用性和无害性。
然而,RLHF的传统实现(如PPO)涉及训练多个模型(策略、价值、奖励、参考)和反复采样,流程复杂、资源开销大。为简化这一过程,斯坦福研究者于2023年提出了直接偏好优化(DPO),通过巧妙的损失函数直接用偏好数据微调模型,避免了显式的强化学习循环。同时,DeepSeek团队在2024年前后提出了组相对策略优化(GRPO)(Generalized Reward Policy Optimization),这是对PPO的一种改进,通过组内比较优势来优化策略,去除了价值网络,使大型模型的RLHF训练更加高效稳定。
本文将对这三种算法——PPO、DPO和GRPO——的原理和应用进行深入解析,并重点围绕在大型语言模型上提升问答质量这一场景展开讨论。我们将介绍每种算法的基本思想和数学公式(用通俗语言逐步解释),比较它们在训练流程、优化目标、稳定性和样本效率上的异同,并总结各自优缺点及适用场景。
PPO:近端策略优化
基本原理与RLHF背景: PPO(Proximal Policy Optimization)是2017年提出的一种策略梯度算法,旨在改进早期强化学习方法不稳定、难调优的问题。它通过限制每次策略更新的幅度,保证训练稳定,被称为“近端”优化即小步伐地调整策略。在LLM对齐任务中,OpenAI在InstructGPT中成功应用了PPO:用人类偏好数据训练奖励模型,然后以该奖励为指导,用PPO微调GPT-3,使其生成人类更喜欢的回答(例如更有帮助、无害)。这种方法也用于ChatGPT的训练,被证明可以显著提高模型回答质量和对话能力。
RLHF训练流程(PPO范式): 在RLHF中使用PPO训练LLM,可以概括为以下步骤:
-
生成样本(Rollout): 让当前的策略模型(LLM)针对一批提示(问题)生成回答,即一系列动作序列。在语言模型场景下,一次完整回答可以看作一个episode,生成的每个token视为一个行动。需要保存这些动作的对数概率以供后续计算。
-
计算奖励: 对于每个生成的完整回答,由奖励模型进行评分,提供一个标量奖励信号,衡量回答的好坏。通常只有在回答结束时才能得到最终的奖励分数,表示整个回答的质量(例如是否有用、正确)。另外实践中常加入一个与参考模型输出的比较奖励(如KL罚项)来约束回答不要偏离初始模型太远。
-
估计优势(Advantage): 计算每个时间步(token)的优势值,用于衡量在当前策略下该动作比“平均”期望好多少。PPO一般借助 价值函数(Critic) 来估计状态的价值,从而计算优势。常用 广义优势估计(GAE) 来平衡高方差的蒙特卡洛估计和高偏差的时间差分估计。简单来说,GAE根据奖励信号和价值网络预测,综合考虑多个步骤的回报,计算出每个token的优势 A t A_t At,提高评估稳定性。
-
更新策略(PPO优化步骤): 基于采样得到的策略 π θ \pi_\theta πθ和旧策略 π old \pi_{\text{old}} πold,定义概率比率 r ( θ ) = π θ ( a t ∣ s t ) π old ( a t ∣ s t ) r(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\text{old}}(a_t|s_t)} r(θ)=πold(at∣st)πθ(at∣st)。PPO的核心目标是最大化以下期望目标(取负号即得到损失函数):
L PPO ( θ ) = E [ min { r ( θ ) ⋅ A , clip ( r ( θ ) , 1 − ϵ , 1 + ϵ ) ⋅ A } ] L_{\text{PPO}}(\theta) \;=\; \mathbb{E}\Big[\min\{r(\theta)\cdot A,\; \text{clip}(r(\theta),\,1-\epsilon,\,1+\epsilon)\cdot A\}\Big] \, LPPO(θ)=E[min{r(θ)⋅A,clip(r(θ),1−ϵ,1+ϵ)⋅A}]
其中 ϵ \epsilon ϵ是超参数(如0.1或0.2),用于限制策略概率比的变化幅度。上述剪裁代理目标通过 min \min min操作保证 r ( θ ) r(\theta) r(θ)超出区间 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon,1+\epsilon] [1−ϵ,1+ϵ]时,按照边界值计算目标,从而惩罚策略一次更新过大,提升训练稳定性。此外,完整的PPO目标中还包含: (a) KL散度正则项,度量新旧策略分布差异,若偏离过大则施加惩罚;(b) 熵奖励项,鼓励策略保持一定随机性,增加生成回答的多样性以避免过早收敛。这些项共同确保模型在追求高奖励的同时,不会过度偏离原有分布而崩溃,并维持一定探索性。结合以上,各项组合形成PPO的总损失函数。训练时对损失求梯度,更新策略网络参数 θ \theta θ。 -
更新价值网络: 训练 价值函数(Critic) 去拟合新策略下的状态价值,以便下次迭代计算更准确的优势。价值网络的更新通常通过最小化TD误差或优势的均方误差来完成。
通过反复采样和更新,上述循环不断进行若干轮,使LLM策略逐步提升回答质量并满足人类偏好。
数学公式解读: 上面第4步提到的PPO策略优化目标是其核心。直观解释如下:
- 鼓励高奖励: 项 r ( θ ) ⋅ A r(\theta)\cdot A r(θ)⋅A会在优势 A A A为正(说明该动作优于基准)且 r > 1 r>1 r>1(新策略提高了该动作概率)时增大目标值,相当于鼓励提高优质动作的概率;反之对于 A A A为负的情况, r < 1 r<1 r<1才能提高目标(意味着降低不良动作概率)。这确保模型倾向于产生奖励高的文本。
- 限制策略改变幅度: 使用 min \min min和 clip \text{clip} clip实现“剪切”效果,即当 r ( θ ) r(\theta) r(θ)偏离1超过 ϵ \epsilon ϵ时,用 1 ± ϵ 1\pm\epsilon 1±ϵ替代。这样防止每次更新把策略推得离原策略太远,保证训练的平稳收敛。
- KL散度惩罚: 在实际实现中,会计算新旧策略间的平均KL散度 K L ( π θ old ∣ ∣ π θ ) \mathrm{KL}(\pi_{\theta_{\text{old}}}||\pi_\theta) KL(πθold∣∣πθ),并将其乘以系数 β \beta β加入损失。如果新旧分布差异过大,损失增大,从而约束策略不要剧烈变化。这与上述剪裁效果类似,进一步增强稳定性。
- 熵奖励: 额外加入 H ( π θ ) H(\pi_\theta) H(πθ)的熵项(或等价的负熵作为损失),鼓励策略保持适度随机。这样可防止模型输出过于墨守成规,避免陷入局部最优。在实现中一般给予一个 λ \lambda λ系数来平衡熵项。
PPO的完整损失函数可表示为: L PPO = − L PPO ( θ ) + β K L ( π θ old ∣ ∣ π θ ) − λ H ( π θ ) \mathcal{L}_{\text{PPO}} = -L_{\text{PPO}}(\theta) + \beta\mathrm{KL}(\pi_{\theta_{\text{old}}}||\pi_\theta) - \lambda H(\pi_\theta) LPPO=−LPPO(θ)+βKL(πθold∣∣πθ)−λH(πθ)(负号是因为我们最大化 L L L等价于最小化损失)。这一公式融合了以上各点,实现了在保持旧策略“近端”的前提下提升新策略回报的目标。
优缺点总结: PPO在RLHF中取得了巨大成功,其优点在于:1)相比早期方法(如TRPO),算法简单易实现,且不需要复杂的二次优化;2)通过剪裁和KL约束,训练稳定且效果较好,大幅减少了策略发散的风险;3)经过InstructGPT等验证,PPO非常有效地提升了LLM回答的质量和对齐度,是ChatGPT等产品背后的关键技术。然而,PPO的缺点也不容忽视:首先,RLHF的PPO管线十分复杂,涉及四个模型(策略/Actor、价值网/Critic、奖励模型、参考模型),其中Actor和Critic需要训练,Reward和Reference需要维护,大模型场景下占用巨量内存。这对计算资源要求极高。其次,PPO有不少超参数(例如 ϵ \epsilon ϵ、 β \beta β、 λ \lambda λ等)需要精心调校,不同任务需要调整,调参成本大。再次,策略需要不断采样交互(生成新回答让奖励模型打分),训练过程漫长且对样本效率要求高——往往需要生成大量样本才能取得良好效果。最后,尽管PPO稳定性相对较好,但在大模型上仍有可能出现奖励作弊、梯度爆炸等不稳定现象,需要通过技巧(如设定KL惩罚系数上限、分阶段训练等)来缓解。
适用场景: 考虑到PPO的开销和效果,一般在有充足算力和数据的情况下使用PPO来对齐大模型。例如,在需要构建像ChatGPT这样高质量的对话模型时,PPO是经典选择。它适用于各种通用任务的偏好优化,包括开放问答、对话、摘要等,只要有训练好的奖励模型引导。PPO特别适合于需要在线探索的情况:当我们希望模型不仅模仿训练数据,而且通过与奖励模型交互自主发现更优答案时,PPO的强化学习机制可以不断产生新回答并优化它们的得分。这在训练数据有限但可以通过人类或奖励模型反复评价新输出时很有价值。简而言之,如果项目规模较大、能够承受复杂的RLHF流程,并追求极致的模型性能,那么PPO仍是一个可靠的选择。
DPO:直接偏好优化
基本原理与背景: 直接偏好优化(Direct Preference Optimization)是2023年斯坦福提出的新方法,号称“RLHF不用RL”。DPO的核心思想是:直接利用人类偏好数据微调策略,跳过奖励模型拟合和强化学习采样环节。换句话说,不再通过“奖励模型评估 -> 策略梯度更新”这种间接方式,而是直接告诉模型哪种回答更好,让模型调高优质回答的概率、降低劣质回答的概率。这种直接优化通过一个精心设计的损失函数实现,本质上是一个二分类交叉熵损失,判断“给定提示下,回答A是否优于回答B”。由于采用了对数几率(logit)比较的方法,DPO能够隐式地重现RLHF中的“最大化奖励+KL约束”目标,但形式上不需要显式奖励模型和复杂的RL算法。研究表明,DPO优化得到的策略实际上对应于某个隐含的奖励函数的最优策略,与传统RLHF解相同,但训练过程大大简化。DPO可以被视为一种单阶段偏好对齐方法:只用一遍偏好数据直接微调模型,无需像PPO那样循环采样、训练多模型,大幅降低算力要求。
在LLM问答场景中,DPO的应用非常直接:我们收集了一批用户问题和模型回答对,每对里有人类标注出哪个回答更优。DPO用这些比较结果来调教模型,使其下次面对类似问题时,更倾向于输出人类偏好的回答。这对提升问答质量很有效,因为它直接根据用户偏好来“拉升”好回答、抑制差回答,相当于沿着人类偏好的方向调整模型行为。
训练流程: DPO的训练和普通的有监督微调有几分相似,但更巧妙地利用了参考模型的信息。其大致流程:首先,准备好偏好数据,例如 ( P r o m p t , R e s p o n s e A , R e s p o n s e B , l a b e l ) (Prompt, Response_A, Response_B, label) (Prompt,ResponseA,ResponseB,label),其中label表明在该提示下人类更喜欢 A A A还是 B B B。一般这些数据来源于人类比较模型输出的结果。在训练时,我们维护一个参考模型(通常取原始SFT微调模型的拷贝并冻结参数),用来提供一个基准行为供比较。对每个偏好样本,将 A A A和 B B B分别送入当前模型和参考模型,得到它们各自对这两个回答的logits或对数概率。然后利用这些对数概率构造损失:
- 计算对数几率差: Δ = ( log π θ ( A ) − log π θ ( B ) ) − ( log π ref ( A ) − log π ref ( B ) ) \displaystyle \Delta = \Big(\log \pi_\theta(A) - \log \pi_\theta(B)\Big)-\Big(\log \pi_{\text{ref}}(A) - \log \pi_{\text{ref}}(B)\Big) Δ=(logπθ(A)−logπθ(B))−(logπref(A)−logπref(B))。这里 π θ \pi_\theta πθ是当前模型策略, π ref \pi_{\text{ref}} πref是参考模型策略。这个对数差值直观上衡量了“当前模型相对于参考模型,对A优于B的信念”。如果当前模型相对参考模型更偏好A, Δ \Delta Δ为正,反之为负。参考模型的引入相当于一个隐式baseline,确保模型别一味把 A A A概率提到100%、 B B B降到0%,而是相对于参考模型适度调整,以防训练漂移失控。
- 将对数差映射为偏好概率:通过sigmoid函数 σ ( x ) \sigma(x) σ(x)(即Logistic回归),计算 P θ ( A ≻ B ) = 1 1 + exp ( − β , Δ ) \displaystyle P_{\theta}(A \succ B) = \frac{1}{1+\exp(-\beta,\Delta)} Pθ(A≻B)=1+exp(−β,Δ)1。这里 β \beta β是超参数,类似于RLHF中的“温度”或奖励放大系数,控制着KL约束力度。此公式实际上来自Bradley-Terry模型,对应于“模型判定A优于B的概率”。
- 定义偏好分类损失:对于标签“人类偏好A”的样本,我们希望 P θ ( A ≻ B ) P_{\theta}(A \succ B) Pθ(A≻B)尽可能接近1;偏好B则希望接近0。因此可采用二元交叉熵损失:若 y = 1 y=1 y=1表示偏好A,则损失 , − log P θ ( A ≻ B ) ,-\log P_{\theta}(A \succ B) ,−logPθ(A≻B);若 y = 0 y=0 y=0偏好B,则损失 , − log ( 1 − P θ ( A ≻ B ) ) ,-\log (1 - P_{\theta}(A \succ B)) ,−log(1−Pθ(A≻B))。合并写作: L DPO = − log σ ( y ⋅ β , Δ ) \displaystyle \mathcal{L}_{\text{DPO}} = -\log \sigma( y \cdot \beta,\Delta ) LDPO=−logσ(y⋅β,Δ),其中 y = 1 y=1 y=1表示 A ≻ B A\succ B A≻B, y = − 1 y=-1 y=−1表示 B ≻ A B\succ A B≻A。为简洁起见,常直接实现为上文sigmoid形式,例如当 A A A为优答案时损失 − log σ ( β , Δ ) -\log\sigma(\beta,\Delta) −logσ(β,Δ)。通过最小化此损失,模型会提高 Δ \Delta Δ为正的概率(偏好A)并降低 Δ \Delta Δ为负的概率,从而直接优化策略使其满足人类偏好。值得注意的是,这个损失中参考模型的对数比起到了KL惩罚的作用:若当前模型试图过分偏离参考模型去极端偏好A或B, Δ \Delta Δ会拉大, σ \sigma σ饱和后梯度变小,相当于自动减缓了过大的更新步伐。这与PPO中显式KL项异曲同工,但这里隐式地融入在损失里。
简而言之,DPO的更新规则就是:“把当前模型在偏好样本上判定正确的概率尽可能提高”。模型会调整自身参数,让偏好样本中人类喜欢的回答logits升高,不喜欢的降低,同时保持与参考模型行为的接近。这一步骤对每个偏好对进行一次梯度下降即可,无需像PPO那样反复采样多轮。由于没有环境交互,整个过程就像在做一个二分类任务:模型输入是两个回答,输出哪一个更好。
直观示例: 假设提示是一个问题,模型给出回答A和B,人类更喜欢A。DPO会增大学习使得模型对回答A计算出的“得分”高于对B的“得分”。下次模型再回答类似问题时,产生类似A的概率就会更大,类似B的概率更小。通过成千上万这样的对比数据,模型逐渐偏向于输出人类偏好的内容。整个过程中不需要显式训练奖励模型,也不需要价值网络或额外采样,训练流程大大简化。
优缺点总结: DPO的优点非常突出:首先,它算法简单、实现容易,只需搭建一个偏好比较的交叉熵损失即可,无需实现复杂的RL训练环路。这使得调试和复现都更加轻松。其次,DPO在计算效率和稳定性上远胜PPO:不需要训练价值网络和反复采样,计算开销小很多;又由于本质是有监督学习,收敛过程相对平滑,很少出现RL那种训练发散的问题。论文和后续实验表明,在一些任务上DPO可以达到媲美甚至优于PPO的效果,例如在文本摘要、单轮对话等偏好对齐任务上,DPO Fine-tuning后的模型质量与PPO-RLHF相当或更好。第三,DPO不需要维护显式奖励模型在线评估,这不仅节省了训练一个大模型的成本,也避免了奖励模型可能带来的偏差影响——DPO直接用人类偏好“真值”来优化。对于资源有限的团队,DPO提供了一条用偏好数据对齐模型的捷径。
当然,DPO也有局限和缺点:其一,DPO对偏好数据质量和覆盖面高度依赖。因为它完全是从离线的人类偏好对出发,模型只能学到这些对比中提供的信息。如果某些重要场景没有涵盖在偏好数据里,模型就难以在那些情况下正确对齐。相比之下,PPO可以通过与奖励模型反复交互,探索一些偏好数据未显式提供的空间。其二,DPO对损失中的 超参数 β \beta β 较敏感。 β \beta β控制了KL约束的强弱:太小则模型可能偏离参考模型过多导致输出质量下降,太大则更新步长太保守学不到明显偏好。不同数据集下理想的 β \beta β可能不同,如何选择需要调试(有工作提出动态调整 β \beta β来增强鲁棒性)。其三,DPO 仍需要一个初始参考模型(通常是SFT模型)。如果直接用预训练基模型作为参考,未经过SFT可能输出质量很一般,DPO的效果可能不如先SFT再DPO那么好。因此一般DPO是作为SFT后的进一步对齐步骤,而非完全取代SFT。最后,DPO无法主动探索新策略:它不能产生新回答然后获得反馈再提升,只能利用给定的人类偏好对。这意味着如果我们想持续改进LLM,对新分布的问题做进一步对齐,可能需要人工不断标注新偏好数据,再用DPO迭代训练(可以称为“在线DPO”)。但这一步需要人为参与,不如PPO那样可以自动循环。
适用场景: DPO非常适合在偏好数据充足且希望快速对齐模型的情况下使用。如果已经有大量现成的人类反馈比较数据(比如收集了许多用户对话中对回复优劣的评价),那么直接用DPO来微调模型会非常高效。在计算资源有限或时间紧张的项目中,DPO可以用更小的代价完成模型对齐,避免复杂的RL训练。例如,许多开源社区在微调小型对话模型(如基于LLaMA等)时,选择了DPO替代PPO,以在单张GPU上完成RLHF级别的对齐训练。DPO也适用于一些静态偏好目标的任务:如让模型输出更有礼貌、语气更积极等,这些偏好可以通过人类标注对很直接地学习到。这种场景下DPO简单调整模型输出倾向即可达到目的,无需复杂探索。总的来说,当不具备大型RLHF基础设施,或者倾向于更可控、更稳定的训练过程时,DPO是不二之选。举例来说,如果想让一个问答模型更符合特定人群的喜好,可以先收集该人群对一些问答的偏好判断,然后用DPO来对模型进行定向微调。
GRPO:组相对策略优化
基本原理与背景: 组相对策略优化(GRPO)是由DeepSeek等开源项目引入的一种PPO改进算法,全称也有人称为广义回报策略优化(Generalized Reward Policy Optimization)。不同资料对GRPO名字的解读略有差异,但其核心思想在于:在每个提示下生成一组回答,相互比较评估,从而更新策略。GRPO可以看作是PPO的“简化版亲戚”——保留了PPO策略更新的核心思想,但移除了单独的价值函数网络。这意味着训练中不需要Critic来估计价值,而是直接用同组其他样本的平均奖励作为基线,来计算每个样本的优势(Advantage)。这种方法本质上是一种策略梯度+对比基线的形式:类似于经典REINFORCE算法使用增量奖励的平均值作为Baseline的思想,即所谓“留一法”(Leave-One-Out)的优势估计。GRPO将该思想与PPO的剪裁更新等技巧结合起来,在不牺牲性能的情况下减少了一半的模型开销(无需训练价值网络,节省约50%内存计算)。这对大参数量LLM的RL训练非常有帮助,因为训练一个和策略同规模的Critic常常代价高昂。
训练流程: GRPO的训练过程与PPO类似,但每个prompt要生成多条回复作为一个“组”。具体步骤:
-
组内采样: 针对每个提示,当前LLM策略生成 K K K个不同的回答 a 1 , … , a K {a_1,\dots,a_K} a1,…,aK,组成一个回答组。这里 K K K可以是比如4、8甚至更多。生成多个回答可以通过给定提示多次采样实现(通常采用解码随机性,如温度采样,以获得多样化的候选)。
-
奖励评分: 用奖励模型或预定的奖励函数对这组内每个回答 a i a_i ai计算一个奖励 r i r_i ri。例如在问答对齐中,奖励模型会给每个回答打分衡量优劣。在一些场景也可以直接有可计算的任务奖励,比如数学题解答是否正确编译通过,这种情况下可直接得到每个输出的评分。
-
计算组内优势(GRAE): 相比PPO用价值网络预测基线,GRPO选择组内平均奖励作为基准。具体来说,对该prompt计算平均奖励 r ˉ = 1 K ∑ i = 1 K r i \bar r = \frac{1}{K}\sum_{i=1}^K r_i rˉ=K1∑i=1Kri。然后对每个回答计算优势 A i = r i − r ˉ A_i = r_i - \bar r Ai=ri−rˉ。通常为了数值稳定,还会做一个标准差归一化: A ~ i = r i − r ˉ σ r + ϵ \tilde A_i = \frac{r_i - \bar r}{\sigma_r + \epsilon} A~i=σr+ϵri−rˉ,其中 σ r \sigma_r σr是组内奖励的标准差。这种归一化确保不同prompt之间优势量纲可比,并削减异常大或小reward的影响。得到的 A i A_i Ai体现了回答 i i i相对该prompt平均水平是好还是差:高于均值则 A i > 0 A_i>0 Ai>0,低于均值则 A i < 0 A_i<0 Ai<0。这一步相当于把组内回答互相做了比较排序,优势为正者就是相对更优的回答,优势负则较差。
-
策略更新: 有了每个样本的优势,就可以类似PPO那样构造损失并梯度更新策略参数了。GRPO使用的目标函数和PPO形式接近,但在实现上对每个prompt的组一起计算损失然后取平均。伪代码如下:
L GRPO = 1 K ∑ i = 1 K [ − min { r i ( θ ) ⋅ A i , clip ( r i ( θ ) , 1 − ϵ , 1 + ϵ ) ⋅ A i } + β ⋅ K L i ] L_{\text{GRPO}} = \frac{1}{K}\sum_{i=1}^K \Big[ -\min\{r_i(\theta)\cdot A_i,\; \text{clip}(r_i(\theta),1-\epsilon,1+\epsilon)\cdot A_i\} \;+\; \beta\cdot \mathrm{KL}_i \Big] \, LGRPO=K1i=1∑K[−min{ri(θ)⋅Ai,clip(ri(θ),1−ϵ,1+ϵ)⋅Ai}+β⋅KLi]
其中 r i ( θ ) = π θ ( a i ) π old ( a i ) r_i(\theta)=\frac{\pi_\theta(a_i)}{\pi_{\text{old}}(a_i)} ri(θ)=πold(ai)πθ(ai)是第 i i i个回答的新旧策略概率比, K L ∗ i = log π ∗ old ( a i ) − log π θ ( a i ) \mathrm{KL}*i = \log\pi*{\text{old}}(a_i) - \log\pi_\theta(a_i) KL∗i=logπ∗old(ai)−logπθ(ai)是对第 i i i个样本的新旧策略KL散度(这一项取正比于 − log r i ( θ ) -\log r_i(\theta) −logri(θ))。可以看出,GRPO的损失就是对组内每个样本计算一个类似PPO的剪裁策略梯度项,再加一个KL惩罚项,然后对组求平均。直观解释:对于同一prompt内的多个回答,模型会提升那些奖励高(优势为正)回答的概率,降低奖励低(优势为负)回答的概率,而且依然有限制地小幅调整,避免策略剧烈变化。因为在同组内进行了对比,这其实等价于告诉模型“在这个问题上,你那些相对差的回答要少给一些,那些相对好的回答风格要多给一些”。这跟人类直接比较多种回答然后告诉模型哪个好是类似的。 -
重复迭代: 类似PPO,我们不断循环采样新的组、计算奖励、更新策略。因为没有价值网络,每次更新后不需要单独训练Critic,直接进入下个采样阶段。这减少了一半训练步骤。
与PPO异同: 从上述流程可以看出,GRPO和PPO在策略更新公式上十分相近,都采用了剪裁的策略梯度目标+KL正则。不同的是优势 A A A的获取方式:PPO用一个学习的价值函数 V ( s ) V(s) V(s)来估计长期回报基线,而GRPO直接用同一批数据内部的平均回报作为基线。这种“组内对比”方法带来的直接好处是减少了方差:同一个prompt下的回答共享了很多上下文,比较它们的奖励能够较准确地评估哪个更好,从而减少了不相关因素引入的噪声。这也解释了为什么DeepSeek等推荐在复杂推理任务中使用GRPO——在那些任务里,训练一个准确的价值网络非常困难,不如直接通过多样解答的相对质量进行优化更稳健。需要注意的是,如果组内所有回答的好坏差不多(奖励差异小),归一化后优势接近0,模型参数更新的力度也会变小。因此GRPO在极端情形下(组内全对或全错)会面临优势信号偏弱的情况。有研究对此提出了改进,如Dr.GRPO去除了标准差归一化,以避免对低方差组别的“惩罚”,提升梯度信号。但一般而言,合理选择组大小 K K K(如8或16)可以降低出现全优或全劣组的概率,使大部分prompt组都有区分度,从而保持有效学习。实践中,GRPO通常会使用比PPO更多的采样数量来获取稳定的比较信号——例如每个prompt采样十几个回答,这样每个批次提供了丰富的信息。这虽然单步计算量提高,但因为没有Critic训练,加上可以高度并行生成多个回答,总体效率并不逊色。
优缺点总结: GRPO的优点可以概括为:1)无价值网络,内存和计算成本减半,对于百亿参数级别LLM的RL调优非常关键。这降低了硬件门槛,使得一些没有海量TPU/GPU的团队也能尝试RLHF训练大模型。2)训练更稳定:少了价值函数这个潜在不稳定因素,也就避免了价值网络发散导致策略更新错误的问题。实际经验中,GRPO的训练曲线往往比同时训练Actor-Critic更平滑。而且组内比较本身提供了一种自然的归一化,优势基本在 [ − 1 , 1 ] [-1,1] [−1,1]范围(归一化后),梯度尺度更可控,不容易梯度爆炸。3)样本利用率高:在每个prompt上,一次可以从多个回答中学习信号,而不仅仅一个。这有点类似将原本不同prompt的样本“组装”起来进行对比学习,一定程度上提高了每个prompt的反馈信息量。尤其在复杂推理任务中,人们发现GRPO对提升模型推理能力很有效,因为它让模型在一次训练中就看到了多种解题思路,并倾向选择其中更正确的方向。DeepSeek在数学、代码等需要推理的任务上完全跳过了SFT,直接用RL(GRPO变体)训练模型取得了很好的效果,就是证明。4)实现相对简单:虽然概念新颖,但GRPO主要改动在优势计算部分,其余与PPO类似。很多开源RLHF库已经支持GRPO,工程上切换代价不高。
GRPO的缺点与局限也需要考虑:首先,每轮需要更多采样。因为每个prompt得生成多条回答才能比较,假如以前PPO每批采样N个prompt各1个回答,现在GRPO可能要采样N个prompt各K个回答,总数放大K倍。这对样本效率提出了更高要求(虽然可以并行采样,但总体算力消耗会上升)。其次,组内比较有局限:奖励的定义若有噪声或者偏差,同组所有回答都会受影响。例如奖励模型如果对某些内容系统性偏高或偏低打分,组内比较可能抵消这种系统偏差(因为全组都会高或低,优势差异反而小),从而削弱该偏差信号的纠正力度。换言之,GRPO注重相对排名,不追求绝对评分,可能在某些指标的绝对优化上不如PPO显著。第三,对于长序列奖励分配问题,GRPO采取的是将最终奖励平均分配给整个序列每个token(每个token共享同一优势)。这样虽然简单,但无法细粒度地区分序列中不同决策的贡献(PPO+价值网络可以为每个token估计不同优势)。在主要关注最终结果正确性的场景(如问答是否正确)这不是问题,但如果还关心中间过程质量,GRPO需要配合其他技术(比如过程监督)才能覆盖。最后,GRPO和PPO一样,需要一个靠谱的奖励信号来源。如果任务没有可自动计算的奖励,就需要一个奖励模型来给每个输出打分,否则无法组成训练信号。所以严格来说,GRPO并没有摆脱对奖励模型/函数的需求(除非有实时人类打分或规则可计算reward的环境)。一些宣传提到“GRPO无需训练奖励模型”是指在特定场景下,可以直接利用任务本身的反馈(如编译是否通过)代替训练一个额外模型。在一般对话对齐中,奖励模型仍是需要预先训练好的,只不过GRPO避免了再训练一个Critic。
适用场景: GRPO非常适合在以下情况下使用:1)超大模型RL微调:当模型参数巨多,训练两个模型(Actor+Critic)内存吃不消时,GRPO的单模型更新优势凸显。例如在百亿/千亿模型对齐上,GRPO可以省掉价值网络使显存占用近乎减半。2)复杂推理类任务:如数学问答、代码生成、复杂推理题等。因为这类任务上训练价值模型很难,而让模型一次产生多个解再比较往往更直观有效。DeepSeek的工作就显示,在数学题和编码场景,用纯RL(相当于GRPO思路)可以提升模型的推理正确率。一些学术报告也指出,GRPO有利于长链推理能力的养成,因为可以针对推理过程设计奖励并在组内对比优化。3)缺乏SFT数据,直接RL:若初始模型已不错,但缺高质量监督数据做SFT,可以考虑跳过SFT,直接用RLHF训练模型。此时GRPO因为没有价值网络冷启动问题,可能更稳妥地改进模型。这正是DeepSeek R1-Zero模型的思路:基座模型直接通过RL训练获得优秀性能。4)有限反馈、需要高效利用:当我们每个问题只收集到少量人类反馈时,不妨让模型基于这些反馈多样化输出,再通过相互对比来放大反馈信号。GRPO正好擅长把组内相对信息提炼出来。在实战中,如果你有一个问答系统,用户对每个答案给出好/中/差评分,你可以让模型针对每个问题产生若干答案,评分模型对它们打分,然后用GRPO训练——这样每个用户问题的反馈被充分利用,而不是只学“这一次回答好/不好”这种单一点信息。
综上,GRPO在特定场景下提供了一个比PPO更轻量却有效的替代方案。如果你的LLM需要在人类反馈下优化,但苦于算力不足或者价值网络难训,GRPO值得一试。在需要模型稳定且相对比较明确的任务中(如排行榜对战、对话回答优选等),GRPO能发挥其组内比较的独特优势。
三种算法的对比与联系
我们已经分别介绍了PPO、DPO和GRPO的原理。接下来从训练流程、优化目标、稳定性、样本效率等方面,将三者作一个横向对比,加深对它们关系的理解。
- 训练流程与复杂度: PPO属于两阶段(甚至多阶段)训练:要先通过偏好数据训练奖励模型,再进行强化学习微调策略模型,同时还要训练价值网络辅助,加上一个用于限制KL的参考模型,总共涉及四个模型之多。训练过程中,PPO需要不断在环境(模型生成)中采样新数据并进行多次迭代,这使流程较长、实现复杂。而DPO是单阶段的方法:直接对策略模型做有监督微调,只需已有的人类偏好数据,不需要在训练中间反复交互采样。DPO不训练额外网络,除了一个参考模型提供对比之外,没有别的依赖。其整体流程更接近标准的模型微调。GRPO的流程和PPO一样需要在线采样和基于奖励模型的反馈,因此属于RL训练范式,但GRPO减少了价值网络,只需维护策略模型、奖励模型和参考模型(参考模型在实现中常与策略旧参数等效)。相比PPO,GRPO少了Critic训练这一路径,算法更简单同步。总体来说,PPO流程最复杂,DPO最简单,GRPO居中偏近PPO但有所简化。
- 优化目标与算法本质: 表面看三者差别很大:PPO是策略梯度RL,DPO是直接偏好分类,GRPO是组内对比的RL。但联系在于它们追求的其实是相同或相似的目标——让模型产生更高质量、更符合人类偏好的回答,同时约束不要远离原有语言能力。PPO的目标可理解为“最大化奖励模型评分并保持与参考模型的KL惩罚不超过一定范围”。DPO看似完全不同,但理论证明它等价于优化一个带KL正则的奖励最大化问题,只不过通过对偏好数据的封闭解形式直接实现了。DPO的损失从Bradley-Terry偏好模型推导而来,本质也是在提高偏好概率,这和强化学习中提高预期奖励如出一辙,只是DPO把问题转换成了分类损失来解。GRPO与PPO更是血缘相近:可以认为GRPO就是在PPO的优化目标上做了一般化(generalized)的修改,用真实回报对比取代理论价值估计。它的损失仍是剪辑的策略梯度形式,还有KL项。因此三者在数学目标上都有紧密联系:DPO和PPO都包含KL正则项(DPO中隐式包含),GRPO和PPO都属于策略梯度法(DPO则不是显式的策略梯度但达成了同样效果)。可以说,DPO解决的是“如何不经RL就实现RLHF同样的偏好优化目标”,而GRPO则解决的是“如何在RLHF中去掉价值网络实现更高效的策略优化”。三种方法殊途同归:都在不同程度上利用人类偏好信息来调整LLM输出分布,使其更符合人类期望。
- 训练稳定性: 在大模型对齐任务中,训练稳定性至关重要,因为不稳定会导致输出质量突然恶化甚至模型崩溃。从这点看,DPO最为稳定。因为它完全是一种监督学习形式,没有复杂的探索-exploitation权衡,不存在环境非平稳或梯度噪声大的问题。实践中DPO训练过程平稳且容易收敛。PPO虽然比更早的RL算法稳定,但在三者中相对稳定性最差:需要仔细设置KL惩罚系数以避免模型发生“模式崩溃”或“奖励投机”;有时PPO训练后期模型可能为了讨好奖励模型而产生一些奇怪的过拟合回答,需通过调小学习率、降低奖励权重等控制。GRPO的稳定性居中偏高:没有价值网络后,它少了价值估计误差的来源,训练曲线通常比PPO顺滑。DeepSeek作者提到GRPO在ZeroSearch等场景有“更高的训练稳定性”。组内基准方法降低了单个样本高噪声reward对梯度的影响,使更新更平稳。不过,GRPO仍然是RL过程,所以过大的learning rate或欠拟合的奖励模型也可能使训练不稳定。但总的来说,同等设置下GRPO比PPO更稳一些。因此,如果把稳定性作为重要考量:DPO > GRPO > PPO。
- 样本效率: 这方面需要分别考虑人类标注数据的使用效率和模型交互采样的效率。DPO在利用人类标注偏好数据上是高效的:它直接用所有偏好对来训练,充分榨取了每个标注的信息量,每个样本对都贡献明确的梯度方向。如果有 m m m个人类比较对,DPO基本就能利用 m m m条监督信号。PPO对人类偏好数据的利用是间接的,因为偏好数据只用于训练奖励模型,一旦奖励模型固定,PPO就不直接看人类数据而是通过与自己对话(采样)和奖励模型交互来获取新样本。这个过程中模型会产生很多回答,其中只有少部分可能接近人工偏好数据分布,大部分是在探索。虽然这种探索有助于发现新策略,但从纯监督信号角度看,PPO没有直接复用所有人工标注(只用了它来训练RM)。但PPO通过反复采样可以产生远多于标注数量的训练样本,比如有 m m m条偏好数据训练RM后,PPO可以生成 > > m >>m >>m条自己的回答用于训练策略,这等于将模型自生成的数据也加入训练。因此在无额外人工成本情况下,PPO能使用更多“样本”(只是这些样本的质量取决于奖励模型泛化)。GRPO也需要训练前有奖励模型,同样先用人类数据训练RM,然后在循环中使用RM来大批量打分模型生成的回答。不同的是GRPO为了比较,会一口气生成多条回答,所以单位prompt产生的样本量更多。这让GRPO每次迭代获取的反馈信息丰富,但也意味着总体采样数激增。如果以模型调用次数衡量样本效率,DPO最省,只需跑偏好数据过模型若干轮;PPO次之,每步要采样一些回答给RM打分;GRPO最多,每步对同一提示采样多个回答再打分。所以每轮训练的计算量:DPO < PPO < GRPO。但是,如果考虑达到同样效果所需的总训练轮数,情况又不同:DPO往往一个epoch甚至更少就能对齐(因为直接吃了人工数据);PPO可能需要许多epoch的交互才逼近收敛;GRPO由于每轮获取信息量大,可能在更少的迭代中达到目标质量。因此总体来说,在有限人工数据场景下,DPO是最高效利用人工标注的,而PPO/GRPO则通过引入自动采样扩展了训练数据量。在计算资源一定的情况下,如果人工数据很少,DPO先跑可以快速提升,然后PPO/GRPO再进一步微调可能更合适。如果人工数据较多且质量高,DPO可能一次性就把主要偏好学好,不需要长时间RL。样本效率还可以理解为“每获得1分奖励提升需要多少模型调用”:DPO通常很低,因为监督信号直接高效;PPO和GRPO高一些,但GRPO因为同时对比多个样本,或许在收敛速度上能快于PPO一些。
- 典型应用与适用性: 三种算法各有其强项的应用领域:PPO是通用型选手,几乎所有需要RLHF的场景都适用,尤其在对话系统、复杂交互任务中表现成熟,因为它允许模型通过试错发现最优策略。ChatGPT的对话质量、代码解释等能力很大程度来自PPO阶段的打磨。DPO更像快速对齐的利器,适合离线偏好优化:比如给定一批用户反馈,想快速提升模型回答满意度,可以用DPO增量训练。而在要求训练过程简单可控、避免RL潜在风险的情况下(如一些企业内对齐敏感领域),DPO因不用采样外部数据,行为更可预测,风险更小。GRPO的独特价值在于高难度推理任务和资源受限的大模型训练。DeepSeek等用了GRPO在数学、代码、多轮推理等任务上取得了SOTA水平;微软等也在一些模型中使用GRPO来提升训练稳定性和效率。当你需要在保证稳定的前提下逼近PPO效果,GRPO是值得考虑的替代方案。另外,如果训练管线已经有PPO,实现GRPO改动极小,可以作为PPO的改进升级来试验。
下面的表格总结了PPO、DPO、GRPO三种方法的核心区别:
算法 & 优化方式 | 额外模型需求 | 策略更新稳定性 | 样本使用效率 | 典型适用场景及优势 |
---|---|---|---|---|
PPO(近端策略优化) | 需要训练奖励模型;需要价值网络(Critic)辅助;参考模型提供KL约束。 | 稳定性较好但依赖超参调节(剪裁+KL提升稳定);训练中仍可能出现发散需监控。 | 需反复在线采样,样本量大;能通过探索产生新数据;人工偏好数据间接利用。 | 通用型RLHF算法,ChatGPT等采用;适合高资源场景,能不断探索改进策略;在复杂对话、开放问答等验证效果佳。 |
DPO(直接偏好优化) | 不需要单独奖励模型在线评估(直接用偏好对训练策略);不需要价值网络;需一个冻结参考模型提供对比。 | 非常稳定,等同监督学习训练;无环境噪声干扰,无额外发散源。 | 离线高效利用人工偏好数据;无需额外采样,训练迭代少,收敛快;但不能自动获取新信息。 | 偏好对齐快速微调利器;适合静态任务和资源有限场景;如小模型对齐、用户反馈快速融入等;实现简单、可控性强。 |
GRPO(组相对策略优化) | 需要训练奖励模型或可计算的任务反馈;不需要价值网络(无Critic,降低开销)。 | 稳定性高于PPO(无Critic不稳定因素);组内优势归一化抑制噪声;仍需设置KL系数,但整体平稳。 | 每提示采多样本,单轮计算量较大;总体样本需求与PPO同量级甚至更多;但组内信息丰富,收敛步数可能减少。 | 大模型RLHF优化的轻量替代;在复杂推理题、代码等任务效果好;适合价值难学场景,用真实回报比较;在算力/显存紧张时可避免双模型训练。 |
结语
综上所述,PPO、DPO和GRPO作为大语言模型偏好优化的三种主要方法,各有其设计初衷和适用范围。在以问答质量提升为代表的LLM对齐任务中,PPO以稳定有效但开销大著称,已在工业级应用中验证了威力;DPO以简捷高效取胜,为研究者提供了无需强化学习也能对齐模型的新范式;GRPO则折中了两者,致力于提高RLHF的效率与稳定性,在近期的大模型训练实践中崭露头角。对于初学者,可以将PPO看作“循序渐进调整策略”的老师,DPO是“直接指出对错的导师”,GRPO则是“组织一组答案互相比优”的评委。三者虽思路不同,但目标一致:让AI模型更好地理解并满足人类偏好。
在实际应用中,选择何种方法应权衡具体需求和资源:如果追求极致性能且资源充沛,PPO依然是不少旗舰对齐项目的首选;如果偏好数据丰富且想快速见效,DPO能在短时间内显著改善回答质量;如果模型超大或任务艰深、希望在稳定性和效果间取得平衡,GRPO值得一试。在未来,这些算法或将结合彼此的优点,出现新的改进方案(例如结合DPO思想的Step-DPO,或者GRPO的变种如DAPO、Dr.GRPO等),持续推动大模型对齐技术的发展。
总而言之,无论采用哪种优化策略,人类反馈的引入已经成为提升LLM问答质量的关键途径。通过合理运用PPO、DPO、GRPO,我们可以更好地指导模型生成符合人类期望的答案,使AI助手变得更加可靠、有用。而对于强化学习基础薄弱的读者,希望本报告用通俗的解释和完整的对比,帮助您深入理解这三种算法在LLM偏好优化中的角色和作用,为今后实践中做出恰当的技术选择提供参考。