deepseek GRPO算法保姆级讲解(数学原理+源码解析+案例实战)

该文章已生成可运行项目,

什么是GRPO

GRPO(Groupwise relative policy optimization)群组相对策略优化是deepseek提出的一种RLHF(基于人类反馈的强化学习)技术。首次提出是在DeepSeekMath中,RL被证明在SFT阶段后能有效提升LLM的数学推理能力。
在GRPO提出之前,有两种流行的RLHF技术被广泛用于大模型的对齐过程中,分别是PPO和DPO。

群组形成(Group Formation):让大模型创建多种解决方案

GRPO算法的第一步非常直观,类似于学生尝试多种解法去解决同一个问题。对于给定的prompt,让大模型尝试生成多种解答(attempt)来解决同一个问题(通常4、8或16种的不同解答)。不同的解答示例如下图所示。
在这里插入图片描述

偏好学习(Preference Learning):让大模型理解何为好的解答

与其他的RLHF方法需要一个单独的奖励模型(reward model)不同,GRPO方法可以使用任何函数或模型来评估LLM解答(Solution)的质量。例如,可以使用一个长度函数作为评估器来奖励模型生成更简短的解答,或是使用一个数学求解器,来奖励模型生成更准确的数学解答方案。
评估过程会从多个角度来衡量大模型生成解答方案的质量,包括:
1)最终答案是否正确;2)答案是否按指定的格式输出(如XML标签格式正确性);3)推理过程与提供的答案是否一致。

组内相对优势

这种处理方式的巧妙之处还在于评分机制,GRPO不是简单的给出绝对分数,而是对每个组内的奖励进行归一化处理。它采用了一个简单但有效的方法来计算组内相对优势:

A d v a t a g e = ( r e w a r d − m e a n ( g r o u p r e w a r d s ) / s t d ( g r o u p r e w a r d s ) Advatage = (reward- mean(group_rewards)/ std(group_rewards) Advatage=(rewardmean(grouprewards)/std(grouprewards)

这种归一化方法帮助大模型理解,哪些解答方案比同组内其他解答方案更好或更差,而不是简单的反馈绝对得分给大模型。

优化(optimization): 让大模型从经验中学习(learning from experience)

GRPO的最后一步是根据解决方案组的评估结果,指导大模型进行改进。这一过程基于两个主要原则:

  1. 鼓励模型生成更多类似成功案例的解决方案,同时远离效果不佳的方法;
  2. 使用KL散度惩罚作为安全机制,防止模型在训练中一次发生过于剧烈的变化;

这种方法在实践中被证明比传统方法更稳定,原因在于:

  • 同时考虑多个解决方案,而不局限于两两比较;
  • 基于组的归一化有助于避免奖励缩放问题(reward scaling)
  • KL散度惩罚作为安全网,保证模型在学习新知识的同时,不会忘记已经掌握的内容;

总结GRPO的关键创新在于:

  1. 直接从任何函数或模型中学习,消除了对单独奖励模型的依赖。
  2. 基于组的学习方式,比传统的成对比较等方法更加稳定和高效。

目标函数

GRPO算法从旧的策略模型中采样一组输出 o 1 , o 2 , . . . , o G {o_1,o_2,...,o_G} o1,o2,...,oG,并通过下面的目标函数来优化策略模型:
在这里插入图片描述
GRPO的目标函数通过组内相对优势估计替代传统优势函数,并结合PPO的裁剪机制(限制策略更新幅度)和KL散度正则化(约束策略与参考模型的偏离),在最大化奖励的同时确保策略稳定性:

  1. 函数中通过最大化组内相对优势,增加生成优质结果的概率,减少生成劣质结果的概率;
  2. 通过KL散度惩罚项,确保模型策略不会过度偏离参考策略,从而保证优化过程的稳定性。

式中参数注释如下:
θ : 当前策略模型的可学习参数,通过优化目标函数更新 q ∼ P ( Q ) : 从问题分布中采样的输入(如用户指令) G : 每个输入生成的样本数(组内样本数) o i ∼ π θ old ( O ∣ q ) : 旧策略生成的第  i  个输出样本 π θ old : 旧策略模型(生成样本时固定) π θ : 当前策略模型(通过优化更新) O ∣ q : 输入  q  条件下策略生成的输出分布 ∣ o i ∣ : 输出序列  o i  的长度(token数量) t : 序列生成的时间步(第  t  个token位置) A ^ i , t : 组内相对优势(基于组内奖励差值计算) ϵ : 裁剪范围参数(限制策略更新幅度) β : KL散度正则化系数(控制策略与参考模型偏离) D KL ( π θ ∣ ∣ π ref ) : 当前策略与参考模型的KL散度 π ref : 参考模型(如初始SFT模型) \begin{aligned} &\theta &&: \text{当前策略模型的可学习参数,通过优化目标函数更新} \\ &q \sim P(Q) &&: \text{从问题分布中采样的输入(如用户指令)} \\ &G &&: \text{每个输入生成的样本数(组内样本数)} \\ &o_i \sim \pi_{\theta_{\text{old}}}(O|q) &&: \text{旧策略生成的第 }i\text{ 个输出样本} \\ &\pi_{\theta_{\text{old}}} &&: \text{旧策略模型(生成样本时固定)} \\ &\pi_{\theta} &&: \text{当前策略模型(通过优化更新)} \\ &O|q &&: \text{输入 }q\text{ 条件下策略生成的输出分布} \\ &|o_i| &&: \text{输出序列 }o_i\text{ 的长度(token数量)} \\ &t &&: \text{序列生成的时间步(第 }t\text{ 个token位置)} \\ &\hat{A}_{i,t} &&: \text{组内相对优势(基于组内奖励差值计算)} \\ &\epsilon &&: \text{裁剪范围参数(限制策略更新幅度)} \\ &\beta &&: \text{KL散度正则化系数(控制策略与参考模型偏离)} \\ &D_{\text{KL}}(\pi_{\theta}||\pi_{\text{ref}}) &&: \text{当前策略与参考模型的KL散度} \\ &\pi_{\text{ref}} &&: \text{参考模型(如初始SFT模型)} \end{aligned} θqP(Q)Goiπθold(Oq)πθoldπθOqoitA^

本文章已经生成可运行项目
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值