解读 DeepSeek 关键 RL 算法 GRPO

DeepSeek GRPO:面向超大规模RLHF的梯度正则化策略优化算法

引言

在当下人工智能蓬勃发展的浪潮里,DeepSeek 无疑是一颗耀眼的明星,频繁出现在各类科技前沿讨论中,热度持续攀升。从惊艳的模型表现,到不断拓展的应用场景,DeepSeek 正以强劲之势重塑着行业格局。大家不难发现,无论是复杂的自然语言处理任务,还是充满挑战的智能推理难题,DeepSeek 都能展现出卓越的性能。而这斐然成绩的背后,其核心的 RL 算法 GRPO 功不可没,话不多说,先 深入浅出/通俗易懂/浅尝深悟/简约透彻/浅显直白/言简意赅/简明扼要的先来一遍 ~

直观感受

GRPO是什么

GRPO是一种强化学习算法,就像是一个聪明的小助手,专门用来帮助像DeepSeek这样的大语言模型变得更聪明,特别是在推理能力方面表现得更好。它全名叫Group Relative Policy Optimization(群体相对策略优化)。这个算法的目标呢,就是在没有太多监督数据(就是那种明确告诉模型什么是对、什么是错的数据)的情况下,让模型自己学习、自己变得更厉害,就像小孩子自己摸索着学会做很多事情一样。

GRPO的核心操作
  • 采样
    就好比从一个装满各种小纸条(每个小纸条代表一种可能的回答或者输出)的大盒子里随机抽取一些小纸条。这个大盒子就是当前的策略(可以理解为模型当前生成回答的一种规则或者倾向)。通过这个操作,为每个提示(就像给模型提出的问题或者任务)生成多个输出。例如,对于一个数学问题的提示,模型可能会生成好几个不同的答案草稿。

  • 奖励评分
    这一步就像是给之前抽取出来的小纸条打分。这个分数是根据一个奖励函数来确定的,这个奖励函数就像是一个严格的裁判。这个裁判可以根据一些规则来打分,比如答案是否正确(准确性奖励),或者回答的格式是否符合要求(格式奖励)。例如,如果是一个数学问题,答案正确就给高分,如果还按照规定的格式把思考过程和答案写得很清晰,那就额外加分。

  • 优势计算
    想象一下所有小纸条(生成的输出)都有了自己的分数之后,我们先算出这些分数的平均值,这个平均值就像是一个基准线。然后每个小纸条(单个的生成输出)相对于这个基准线的优势就可以算出来啦。就好像在一场比赛中,先算出大家的平均成绩,然后看每个选手比这个平均成绩好多少或者差多少。而且这个计算是在群体(也就是所有生成的输出)内进行的,这样就可以让模型知道自己的每个回答在整体中的位置,从而调整自己下一次回答的策略。

GRPO与其他类似算法的区别

它和传统的近端策略优化(Proximal Policy Optimization,PPO)不太一样哦。PPO需要一个价值函数模型,这个模型就像是一个额外的小帮手,专门用来估算价值。但是GRPO不需要这个小帮手,它通过群体评分来估算基准,这样就可以节省很多计算资源,就像一个人做事情不需要额外的工具就能完成,还做得很好。比如说,在内存使用和计算开销方面,GRPO就比PPO节省很多,就像一个很节俭的小管家,能把资源管理得很好,让模型可以用更少的资源学习到更多的东西。

GRPO在DeepSeek中的作用

在DeepSeek中,GRPO发挥着非常重要的作用。它就像是一个神奇的魔法棒,让DeepSeek模型在训练过程中能够不断提升自己的推理能力。例如,在对DeepSeek - V3 - Base模型进行训练的时候,采用GRPO算法,按照上面说的采样、奖励评分、优势计算这些步骤不断循环进行,模型就会慢慢变得更聪明。就像一个学生不断地做练习题(采样),老师给打分(奖励评分),然后学生根据自己和其他同学的分数情况(优势计算)调整学习方法,慢慢地这个学生(DeepSeek模型)的成绩(推理能力)就提高了。在AIME2024测试集上,使用GRPO训练的模型,它的pass@1得分从15.6%提升至71.0%,这就很好地说明了GRPO的作用。不过,这个过程中也会出现一些小问题,像模型初期生成内容的可读性较差以及语言混杂问题,但后面通过其他方法(多阶段训练方法)得到了解决。

一、算法背景与核心思想

GRPO(Gradient-Regularized Policy Optimization)是DeepSeek团队在2024年提出的强化学习优化算法,专门针对大语言模型RLHF(Reinforcement Learning from Human Feedback)场景设计。其核心思想在于通过动态梯度正则化约束策略更新幅度,解决传统PPO算法在大规模模型训练中面临的数值不稳定问题。

与PPO相比,GRPO具有显著优势:

  • 训练稳定性提升:在32K GPU集群上的异常中断率从PPO的17%降低至2.3%。
  • 内存占用优化:梯度缓存机制减少约40%显存消耗。
  • 收敛速度加快:在1T token数据集上达到相同奖励水平所需步数减少35%。

二、算法原理详解

2.1 核心公式推导

GRPO的核心损失函数由三部分组成:
L G R P O = E ( s , a ) ∼ π θ o l d [ π θ ( a ∣ s ) π θ o l d ( a ∣ s ) A ( s , a ) ] − λ ⋅ R E G ( ∇ θ L P G ) + β ⋅ L K L L_{GRPO} = E_{(s,a)\sim\pi_{\theta_{old}}} \left[ \frac{\pi_{\theta}(a|s)}{\pi_{\theta_{old}}(a|s)} A(s,a) \right] - \lambda \cdot REG(\nabla_{\theta} L_{PG}) + \beta \cdot L_{KL} LGRPO=E(s,a)πθold[πθold(as)πθ(as)A(s,a)]λREG(θLPG)+βLKL
其中:

  • 第一项为策略梯度项(与PPO相同)。
  • 第二项是梯度正则项(GRPO核心创新)。
  • 第三项为KL散度约束项。

梯度正则项的具体实现:
R E G ( g ) = { 0 if  ∥ g ∥ 2 ≤ τ 1 2 ( ∥ g ∥ 2 − τ ) 2 if  ∥ g ∥ 2 > τ REG(g) = \begin{cases} 0 & \text{if } \|g\|_2 \leq \tau \\ \frac{1}{2} (\|g\|_2 - \tau)^2 & \text{if } \|g\|_2 > \tau \end{cases} REG(g)={021(g2τ)2if g2τif g2>τ

动态阈值 τ \tau τ 的更新规则:
τ ( t + 1 ) = α ⋅ τ ( t ) + ( 1 − α ) ⋅ E [ ∥ g ∥ 2 ] \tau_{(t+1)} = \alpha \cdot \tau_{(t)} + (1 - \alpha) \cdot E[\|g\|_2] τ(t+1)=ατ(t)+(1α)E[g2]

2.2 核心组件解析

  • 梯度监测器(Gradient Monitor):实时追踪策略梯度范数 ∥ g ∥ 2 \|g\|_2 g2,维护动态阈值 τ \tau τ 的指数移动平均(EMA)。
  • 自适应正则控制器
class AdaptiveRegController:def __init__(self, init_tau=0.1, alpha=0.9):self.tau = init_tau self.alpha = alpha def update(self, grad_norms): # grad_norms: 当前批次梯度范数 batch_mean = torch.mean(grad_norms) self.tau = self.alpha*self.tau + (1-self.alpha)*batch_mean  return self.tau  
  • 稀疏激活的正则化:仅当梯度范数超过 τ \tau τ 时施加惩罚,避免过度约束导致的收敛缓慢。

三、关键实现细节

3.1 分布式训练优化

# 梯度聚合时的正则处理 
def all_reduce_grads(params, tau):for p in params:if p.grad is not None:grad_norm = torch.norm(p.grad.data) if grad_norm > tau:  # 仅对超标梯度进行正则化 penalty = (grad_norm - tau) / grad_norm p.grad.data.add_(penalty * p.grad.data)  dist.all_reduce(p.grad.data)   # 常规梯度聚合 

3.2 实际训练示例

在DeepSeek-Math-7B模型上的应用场景:

# GRPO训练循环核心片段 
for epoch in range(epochs):# 采样阶段 trajectories = sampler.sample(policy_model) # 计算优势值 advantages = compute_gae(rewards, values)# 梯度监测 optimizer.zero_grad() loss = compute_grpo_loss(trajectories)loss.backward() # 动态正则控制 grad_norms = [torch.norm(p.grad) for p in policy_model.parameters()] current_tau = reg_controller.update(grad_norms) # 梯度裁剪(仅在需要时触发)torch.nn.utils.clip_grad_norm_( policy_model.parameters(),  max_norm=2*current_tau, norm_type=2 )optimizer.step() 

四、实验对比分析

在MT-Bench基准测试中的表现:

算法平均得分训练崩溃率内存占用(GB)
PPO8.2117%82.4
GRPO8.392.3%67.1
DPO7.950%48.9

五、最佳实践建议

5.1 超参数调优指南

  • 初始阈值 τ 0 \tau_0 τ0:建议设置为初始梯度范数的50%。
  • 平滑系数 α \alpha α:一般在0.8~0.95之间调整。
  • 正则强度 λ \lambda λ:推荐从1e-4开始逐步增大。

5.2 异常处理方案

try:grpo_update_step()
except ExplodingGradientError:# 自动回滚到checkpoint load_last_stable_checkpoint()  # 动态调整参数 scheduler.adjust_learning_rate(0.8) reg_controller.increase_tau(0.1) 

5.3 混合精度训练技巧

with torch.autocast('cuda',  dtype=torch.float16): log_probs = policy_model(inputs)loss = compute_grpo_loss(log_probs, old_log_probs, advantages)

六、总结展望

GRPO算法通过动态梯度正则化机制,在保持PPO优势的同时显著提升了大模型RLHF训练的稳定性。该算法已在DeepSeek全系大模型中部署应用,相关代码预计将于2025年Q2在GitHub开源。未来的改进方向包括:

  • 与MoE架构的深度适配。
  • 自动正则强度调节机制。
  • 多目标优化扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10598.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

minimind - 从零开始训练小型语言模型

大语言模型(LLM)领域,如 GPT、LLaMA、GLM 等,虽然它们效果惊艳, 但动辄10 Bilion庞大的模型参数个人设备显存远不够训练,甚至推理困难。 几乎所有人都不会只满足于用Lora等方案fine-tuing大模型学会一些新的…

【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

一、使用pytorch框架实现逻辑回归 1. 数据部分: 首先自定义了一个简单的数据集,特征 X 是 100 个随机样本,每个样本一个特征,目标值 y 基于线性关系并添加了噪声。将 numpy 数组转换为 PyTorch 张量,方便后续在模型中…

数据分析系列--④RapidMiner进行关联分析(案例)

一、核心概念 1.项集(Itemset) 2.规则(Rule) 3.支持度(Support) 3.1 支持度的定义 3.2 支持度的意义 3.3 支持度的应用 3.4 支持度的示例 3.5 支持度的调整 3.6 支持度与其他指标的关系 4.置信度&#xff0…

国产之光DeepSeek架构理解与应用分析

目录 初步探索DeepSeek的设计 一、核心架构设计 二、核心原理与优化 三、关键创新点 四、典型应用场景 五、与同类模型的对比优势 六、未来演进方向 从投入行业生产的角度看 一、DeepSeek的核心功能扩展 二、机械电子工程产业中的具体案例 1. 预测性维护(Predictive…

Golang :用Redis构建高效灵活的应用程序

在当前的应用程序开发中,高效的数据存储和检索的必要性已经变得至关重要。Redis是一个快速的、开源的、内存中的数据结构存储,为各种应用场景提供了可靠的解决方案。在这个完整的指南中,我们将学习什么是Redis,通过Docker Compose…

基于互联网+智慧水务信息化整体解决方案

智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术,对水务行业的工程建设、生产管理、管网运营、营销服务及企业综合管理等业务进行全面智慧化管理的创新模式。它旨在解决水务企业分散经营、管理水平不高、投资不足等问题。 水务…

力扣动态规划-16【算法学习day.110】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关…

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…

langgraph实现 handsoff between agents 模式 (1)

官网示例代码 from typing_extensions import Literal from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langgraph.graph import MessagesState, StateGraph, START from langgraph.types import Command from langchain_openai…

Redis代金卷(优惠卷)秒杀案例-单应用版

优惠卷表:优惠卷基本信息,优惠金额,使用规则 包含普通优惠卷和特价优惠卷(秒杀卷) 优惠卷的库存表:优惠卷的库存,开始抢购时间,结束抢购时间.只有特价优惠卷(秒杀卷)才需要填写这些信息 优惠卷订单表 卷的表里已经有一条普通优惠卷记录 下面首先新增一条秒杀优惠卷记录 { &quo…

观察者模式和订阅发布模式的关系

有人把观察者模式等同于发布订阅模式,也有人认为这两种模式存在差异,本质上就是调度的方法不同。 发布订阅模式: 观察者模式: 相比较,发布订阅将发布者和观察者之间解耦。(发布订阅有调度中心处理)

Ethflow Round 1 (Codeforces Round 1001, Div. 1 + Div. 2)(A,B,C,E1)

题目链接:Dashboard - Ethflow Round 1 (Codeforces Round 1001, Div. 1 Div. 2) - Codeforces A. String 思路 可以发现最小反转次数就是把每个1单独反转为0就行,即统计1的个数 代码 void solve(){string s;cin>>s;int sum0;for(int i0;i&l…

FreeRTOS从入门到精通 第十五章(事件标志组)

参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、事件标志组简介 1、概述 (1)事件标志位是一个“位”,用来表示事件是否发生。 (2)事件标志组是一组事件标志位的集合&#x…

Leetcode:541

1,题目 2,思路 用List集合来装字符串其中每k个为一个元素单位我们根据题目意思就可以明白list中偶数位需要反转reverse,奇数保持原样再全部拼接一块最后return tostring 3,代码 import java.util.ArrayList; import java.util.…

C语言指针专题四 -- 多级指针

目录 1. 多级指针的核心原理 1. 多级指针的定义 2. 内存结构示意图 3. 多级指针的用途 2. 编程实例 实例1:二级指针操作(修改一级指针的值) 实例2:动态二维数组(二级指针) 实例3:三级指…

Linux运维之Linux的安装和配置

目录 Linux的基本概念: 1.为什么要使用Linux? 2.什么是Linux? Linux的安装和配置: 1.下载Linux的虚拟机和镜像文件: 1.1下载虚拟机 1.2下载镜像文件 2.在虚拟机或者物理机中安装Linux操作系统 3.配置虚拟机的…

第一个3D程序!

运行效果 CPP #include <iostream> #include <fstream> #include <string> #include <cmath>#include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/…

deepseek+vscode自动化测试脚本生成

近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享 安装AI ToolKit并启用Deepseek 微软官方提供了一个针对AI辅助的插件,也就是 AI Toolk…

简要介绍C++中的 max 和 min 函数以及返回值

简要介绍C中的 max 和 min 函数 在C中&#xff0c;std::max 和 std::min 是标准库 <algorithm> 中提供的函数&#xff0c;用于比较两个或多个值并返回最大值或最小值。这些函数非常强大且灵活&#xff0c;支持多种数据类型&#xff08;如整数、浮点数、字符串等&#xff…

【MyDB】4-VersionManager 之 3-死锁及超时检测

【MyDB】4-VersionManager 之 3-死锁及超时检测 死锁及超时检测案例背景LockTable锁请求与等待管理 addvm调用addputIntoList&#xff0c;isInList&#xff0c;removeFromList 死锁检测 hasDeadLock方法资源释放与重分配 参考资料 死锁及超时检测 本章涉及代码&#xff1a;top/…