
没有H100也能玩转大模型!DeepSeek 的GRPO颠覆RLHF训练法则:16GB显存榨干百亿模型
在这篇文章中,我们将深入探讨 GRPO (Group Relative Proximal Optimization) 的细节,帮助大家理解它的工作原理,以及如何将其应用到自己模型的训练中。为什么 GRPO 重要?GRPO 显著降低了计算需求,并简化了强化学习 (RL) 过程。与 ChatGPT 采用的近端策略优化 (PPO) 方法相比,GRPO 使从人类反馈进行强化学习 (RLHF) 所需的计算量
在这篇文章中,我们将深入探讨 GRPO (Group Relative Proximal Optimization) 的细节,帮助大家理解它的工作原理,以及如何将其应用到自己模型的训练中。
为什么 GRPO 重要?
简要概括: GRPO 显著降低了计算需求,并简化了强化学习 (RL) 过程。与 ChatGPT 采用的近端策略优化 (PPO) 方法相比,GRPO 使从人类反馈进行强化学习 (RLHF) 所需的计算量减少了近一半。如果再结合 LoRA(低秩适配),即使是计算资源非常有限的用户,也能进行 RL 训练。
💡 作者成功地使用 16GB VRAM 训练了一个 10 亿参数的 Llama 3.2 模型,使其具备推理能力。
换句话说,个人开发者只需花不到 100 美元的云 GPU 费用,就能训练自己的推理模型。而如果是更小规模的模型,甚至可以直接在本地设备上训练,几乎无需额外成本。那么,这究竟是如何实现的呢?下一部分将介绍从 PPO 到 GRPO 的发展过程。
从 PPO 到 GRPO
ChatGPT 采用的强化学习 (RL) 技术据传是近端策略优化 (PPO,Proximal Policy Optimization)。这一方法在 InstructGPT 论文中有详细描述,其目的是训练出一个能够理解并执行指令,而不仅仅是预测下一个词的语言模型。
训练过程需要收集大量标注数据。对于给定的用户输入,模型会生成多个候选回复,然后由人类或 AI 对这些输出进行排序,从最佳到最差。这些排序数据随后被用来训练一个“奖励模型 (Reward Model)”,用于计算新的输入应该获得的“奖励值”,以衡量该回复的质量。
在完成这些数据的收集和整理后,我们就可以使用 PPO 来训练大语言模型 (LLM)。
然而,PPO 训练的计算成本相当高。GRPO 论文的流程图展示了 PPO 和 GRPO 在训练过程中涉及的不同 LLM。可以看到,在 PPO 训练过程中,涉及 4 个不同的 LLM,分别是:
-
策略模型 (Policy Model):当前正在训练的大语言模型
-
参考模型 (Reference Model):被冻结的原始 LLM,用作对照
-
奖励模型 (Reward Model):基于人类偏好训练的模型(来自 InstructGPT 方法)
-
价值模型 (Value Model):用于估计在特定动作下长期奖励的模型
降低 GRPO 的内存使用
在 PPO 中,策略模型和价值模型都有需要反向传播的可训练参数,而反向传播需要占用大量的内存。查看上面的图示,可以发现 GRPO 去除了价值模型。
PPO 中涉及四个大语言模型 (LLM),这些模型都需要消耗大量的内存和计算资源。价值模型和奖励模型的参数量通常与正在训练的模型相似,而参考模型通常是冻结的原始语言模型。
不仅如此,PPO 的计算开销非常大,且需要优化多个模型和不同的组件。组件越多,优化过程的复杂度通常也会越高。GRPO 在这方面提供了简化的帮助。
H100 显卡上尝试不同规模的模型,看看用GRPO进行调优有多简单。
群体相对优势
在强化学习 (RL) 中,你试图从大语言模型 (LLM) 中获取的主要信号是“A”,即“优势”(Advantage)。这一信号帮助指导更新原始大语言模型的权重。当优势值很高时,你希望鼓励模型继续执行相同的动作;而当优势值很低时,你希望鼓励模型尝试不同的做法。
在 PPO 中,价值模型的原始任务是估计生成的 Token 的好坏,或者它们是否可能得到高奖励。为了做到这一点,它需要训练一个大型大语言模型来进行这些价值判断。那么,GRPO 是如何去除这一需求的呢?
第一个关键方法是,GRPO 不仅仅为每个查询生成一个输出,而是生成多个输出。
具体来说,如果问题是数学题,模型可能会尝试几种不同的方法来解决它。例如,如果问题是:
`Mr. Curtis has 325 chickens on his farm where 28 are roosters and the rest are hens. Twenty hens do not lay eggs while the rest of the hens do. How many egg-laying hens does Mr. Curtis have on his farm? `
模型可能会提供几种不同的推理路径,其中一些是正确的(答案 = 227),而另一些是错误的(答案 = 305)。
正确的输出
`<reasoning>First, let's find out how many hens there are. The total number of chickens is 325, and 28 are roosters. So, the number of hens is 325 - 28 = 297. Of these 297 hens, 20 do not lay eggs, so the number of egg-laying hens is 297 - 20 = 277.</reasoning> <answer>277</answer> `
错误的输出
`<reasoning>You need to subtract the 20 hens that do not lay eggs from the total number of hens to find the number of egg-laying hens. So, the number of egg-laying hens is 325 - 20 = 305.</reasoning> <answer>305</answer> `
接下来,对于每个输出,我们会计算一个“奖励”,评估该输出回答查询的好坏。可以有多个奖励函数来衡量响应的不同属性。我们暂时不详细讨论这些奖励函数,但可以知道它们返回的数值较高表示回答较好,较低则表示回答较差。
奖励可能像这样:
-
格式正确,回答正确,获得奖励1.0
-
格式正确,回答错误,获得奖励0.5
-
回答,获得奖励0.0
一旦我们得到所有的奖励(r),GRPO 就会通过简单地查看所有奖励的均值和标准差来计算我们的“优势”(A)。
这在机器学习的特征工程中非常有用。它有助于将任意值标准化为更加易于学习的正负信号。直观上理解,就是“数据点离均值有多少个标准差?”
你会发现,这些值大致围绕 0.0 进行分布,显示了相对于其他所有结果的好坏程度。这为我们提供了一个基准:“在这个提示下,平均的回答会如何?”在这一批次中,奖励优秀的输出,惩罚不好的输出。
这与价值模型最初的目标非常相似:估计给定一个响应时,我们的奖励会是多少。由于我们正在训练的策略模型是一个语言模型,我们可以通过调整生成“温度”来生成多个可能的输出。然后,所有这些生成的输出的平均奖励成为衡量当前模型表现的有效信号,并帮助我们判断是否需要加强某些行为。
KL-散度
最终的KL-散度等式
为什么要有"参考模型",我们不希望新模型偏离原始模型太远。对于每个 Token,我们希望确保新的预测与原始预测保持一致。
强制实施 KL 散度(KL Divergence)的直观原因是,我们开始时的模型已经知道如何写出连贯的句子并遵循指令。我们不希望新模型通过“奖励作弊”或利用某种不符合原始模型预期的奖励信号特性。如果模型发现说“pamplemousse”(法语中的“葡萄柚”)这个词能获得高奖励,因为它是一个罕见且有趣的词汇,而这种行为在预训练阶段并不常见,我们不希望模型去模仿这种做法。
将这些内容结合起来,就得到了最终的方程!
奖励信号
DeepSeek-R1-Zero 研究中的一个特别有趣的地方是,他们通过不使用“神经奖励模型”来进一步减少内存使用。
这是什么意思?它的意思是,他们实际上通过正则表达式(regex)和字符串匹配来获取奖励信号。他们认为这种做法有助于避免“奖励黑客行为”,并且简化了整个训练流程。
如果你把前面“准确性奖励”和“格式奖励”部分的定义转换成代码,它应该是这样的:
在训练过程中,你甚至不需要一个完整的奖励模型 LLM。这意味着,我们的主要内存需求只剩下了策略模型和参考模型。将 4 个 LLM 减少到 2 个,从而大大减少了 GPU 的使用需求。
如果你的直觉告诉你“这些奖励函数真的能推广到其他任务吗?”你是对的。它们对于特定的任务效果很好,但对其他任务就不太适用。换句话说,尽管这两个奖励函数能让模型在遵循格式和进行数学推理时表现不错,但它在其他有用的任务上表现不佳。
只要有足够的计算资源和数据,模型本身就能学习。我们越少手动编码规则,让模型更多自主学习,效果越好。GRPO 奖励函数在这里显得有些过于手动编码。为什么不让模型自己学习奖励信号的权重呢?
尽管如此,尝试不同的奖励函数还是很有趣的。GRPO 的一个有趣之处在于,只要你能把奖励定义成一个可以根据响应返回值的函数,就可以对它进行优化。这甚至可以是一个外部 API 调用,调用另一个 LLM。
接下来:训练一个 Rust 推理模型 🦀
那么,这在实践中是什么样的呢?Transformer Reinforcement Learning库,或者简称 trl,已经实现了 GRPO,并且使用起来相对简单,你可以轻松传入自己的奖励函数。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)