
没有H100也能玩转大模型!DeepSeek 的GRPO颠覆RLHF训练法则:16GB显存榨干百亿模型
在这篇文章中,我们将深入探讨 GRPO (Group Relative Proximal Optimization) 的细节,帮助大家理解它的工作原理,以及如何将其应用到自己模型的训练中。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。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)