当前位置: 首页 > ds >正文

GRPO算法:告别PPO内存炸弹,无需价值函数,用组内排名代替绝对评分

GRPO算法:告别PPO内存炸弹,无需价值函数,用组内排名代替绝对评分

    • 论文大纲
    • 1. 按照逻辑关系中文拆解【GRPO解法】
      • 技术拆解(公式形式)
      • 与同类算法的主要区别
    • 2. 子解法逻辑链(决策树形式)
    • 3. 隐性方法分析
    • 4. 隐性特征分析
    • 5. 潜在局限性
    • 6. 多题一解的通用解题思路
    • 2. 全流程优化分析
      • 多题一解特征分析
      • 一题多解分析
      • 更优解法探索
    • 3. 医疗领域应用示例
      • 输入输出定义
      • 医疗GRPO全流程

 


论文:DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models

代码:https://github.com/deepseek-ai/DeepSeek-Math

DeepSeekMath通过三阶段方法实现数学推理突破:从Common Crawl收集120B高质量数学tokens进行预训练,用776K样本进行指令微调,创新GRPO算法进行强化学习优化。

核心机制是迭代数据收集管道和组相对策略优化(GRPO算法),最终在竞赛级MATH基准上达到51.7%准确率,逼近GPT-4性能。

GRPO通过组内奖励均值替代PPO的价值函数基线估计,使用归一化优势函数Âᵢ,ₜ=(rᵢ-mean®)/std®配合直接KL散度正则化,在零额外参数开销下将强化学习内存消耗降低80%同时保持性能。

论文大纲

├── DeepSeekMath【数学推理语言模型】
│   ├── 1. 研究背景【问题定义】
│   │   ├── 数学推理的挑战性【现状描述】
│   │   │   ├── 复杂结构化特征【技术难点】
│   │   │   └── 开源模型性能落后【性能差距】
│   │   └── 研究动机【目标设定】
│   │       ├── 逼近GPT-4性能【性能目标】
│   │       └── 推动开源发展【社区贡献】
│   │
│   ├── 2. 数学预训练【核心方法】
│   │   ├── DeepSeekMath语料库【数据构建】
│   │   │   ├── 120B数学tokens【数据规模】
│   │   │   ├── Common Crawl来源【数据源】
│   │   │   └── 迭代收集管道【收集方法】
│   │   │       ├── fastText分类器【技术工具】
│   │   │       └── 四轮迭代优化【优化过程】
│   │   └── DeepSeekMath-Base 7B【基础模型】
│   │       ├── DeepSeek-Coder初始化【起点选择】
│   │       ├── 500B tokens训练【训练规模】
│   │       └── 代码训练的益处【关键发现】
│   │           ├── 提升工具使用能力【能力增强】
│   │           └── 改善推理能力【能力增强】
│   │
│   ├── 3. 监督微调【模型优化】
│   │   ├── SFT数据集【训练数据】
│   │   │   ├── 776K训练样本【数据量】
│   │   │   └── 多种解决方案格式【数据类型】
│   │   │       ├── 思维链(CoT)【推理格式】
│   │   │       ├── 程序思维(PoT)【编程格式】
│   │   │       └── 工具集成推理【混合格式】
│   │   └── DeepSeekMath-Instruct 7B【微调模型】
│   │       ├── MATH 46.8%准确率【性能指标】
│   │       └── 超越开源模型【相对性能】
│   │
│   ├── 4. 强化学习【进阶优化】
│   │   ├── GRPO算法【创新方法】
│   │   │   ├── PPO变体【算法基础】
│   │   │   ├── 无需价值模型【效率优化】
│   │   │   └── 组相对优势估计【核心创新】
│   │   │       ├── 基线从组分数计算【技术细节】
│   │   │       └── 减少训练资源【实际效益】
│   │   └── DeepSeekMath-RL 7B【最终模型】
│   │       ├── MATH 51.7%准确率【峰值性能】
│   │       ├── GSM8K 88.2%准确率【基础性能】
│   │       └── 域外性能提升【泛化能力】
│   │
│   ├── 5. 关键发现【经验总结】
│   │   ├── 预训练洞察【数据层面】
│   │   │   ├── 网页数据潜力巨大【正面发现】
│   │   │   ├── arXiv论文效果有限【反直觉发现】
│   │   │   └── 多语言数据有益【数据多样性】
│   │   └── 强化学习洞察【算法层面】
│   │       ├── 统一范式理解【理论贡献】
│   │       ├── 在线vs离线采样【对比分析】
│   │       └── 提升Maj@K而非Pass@K【性能分析】
│   │
│   └── 6. 贡献与局限【总体评价】
│       ├── 主要贡献【正面成果】
│       │   ├── 接近闭源模型性能【性能突破】
│       │   ├── 高效RL算法【方法创新】
│       │   └── 开源社区推动【社区影响】
│       └── 当前局限【待改进点】
│           ├── 几何和定理证明较弱【能力短板】
│           ├── 模型规模限制【资源约束】
│           └── few-shot能力不足【泛化限制】

问1:DeepSeekMath预训练的目的是什么?
答1:让语言模型获得强大的数学推理能力。

问2:怎么让模型获得数学能力?
答2:用大量数学文本训练模型。

问3:数学文本从哪里来?
答3:从互联网Common Crawl中筛选出来。

问4:Common Crawl是什么?
答4:公开的网页存档,包含数十亿个网页的原始数据。

针对数据不足,Common Crawl中藏着大量未被利用的数学内容,但需要精确识别。

问5:怎么从海量网页中筛选数学内容?
答5:用fastText分类器识别数学相关网页。

问6:fastText分类器是什么?
答6:Facebook开发的文本分类工具,能快速判断文本属于哪个类别。

问7:分类器怎么知道什么是数学内容?
答7:先用已知的数学文本(OpenWebMath)训练它,让它学会识别特征。

问8:训练分类器需要什么?
答8:需要正样本(数学文本)和负样本(非数学文本)。

问9:为什么需要负样本?
答9:让分类器学会区分"是数学"和"不是数学"的差异。

问10:训练一次就够了吗?
答10:不够,需要迭代四轮来提高覆盖率。

问11:为什么要迭代?
答11:每轮发现新的数学网站和模式,用新数据改进分类器。

问12:收集到数据后直接用吗?
答12:不,需要去污染,避免包含测试题答案。

问13:为什么要避免测试题?
答13:防止模型"背答案"而非真正理解,影响评估的公平性。

问14:最后用这些数据做什么?
答14:训练DeepSeek-Coder模型500B个token,得到DeepSeekMath-Base。

问15:为什么选择Coder模型作为基础?
答15:代码训练让模型更擅长逻辑推理和工具使用。

核心就是:找数学数据→训练分类器→迭代改进→清洗数据→训练模型。

问:每个缺失怎么对应到具体问题特征?
答:

  • 数据问题→模型没见过足够的数学模式
  • 指令问题→模型不会按步骤解题
  • 优化问题→模型输出不够稳定可靠

为什么要同时用CoT和PoT?

答:CoT适合推理过程,PoT适合计算密集题,两者互补。

针对"不会解题步骤",解法是什么?

答:用776K个标注好的解题过程训练,包含思维链(CoT)和程序思维(PoT)。

1. 按照逻辑关系中文拆解【GRPO解法】

在这里插入图片描述

技术拆解(公式形式)

GRPO解法 = 子解法1(组内基线估计法)+ 子解法2(相对优势计算法)+ 子解法3(直接KL正则化法)

子解法1:组内基线估计法

  • 公式:使用同一问题q的G个采样输出{o₁, o₂, …, oG}的平均奖励作为基线
  • 之所以用组内基线估计法,是因为价值函数训练困难特征(在LLM中通常只有最后一个token有奖励分数,这使得训练准确的token级价值函数变得复杂)

子解法2:相对优势计算法

  • 公式:Âᵢ,ₜ = (rᵢ - mean®)/std® (结果监督)或 Âᵢ,ₜ = Σ r̂ⁱⁿᵈᵉˣ⁽ʲ⁾ᵢ (过程监督)
  • 之所以用相对优势计算法,是因为奖励模型比较性特征(奖励模型通常在同一问题的不同输出比较数据集上训练,具有比较性质)

子解法3:直接KL正则化法

  • 公式:在损失中直接添加KL散度DKL(πθ||πref)而非在奖励中添加KL惩罚
  • 之所以用直接KL正则化法,是因为简化计算特征(避免复杂化优势函数Âᵢ,ₜ的计算)

与同类算法的主要区别

与PPO的区别:

  1. 无需价值模型:GRPO不需要训练额外的价值函数,PPO需要
  2. 组相对基线:GRPO使用组内平均作为基线,PPO使用学习的价值函数
  3. 内存效率:GRPO显著减少了训练资源消耗

2. 子解法逻辑链(决策树形式)

GRPO决策树:
│
├─ 是否需要价值函数?
│  │
│  ├─ 否 → 使用组内基线估计法
│  │      │
│  │      ├─ 采样G个输出
│  │      └─ 计算平均奖励作为基线
│  │
│  └─ 是 → 转向PPO(不符合GRPO特征)
│
├─ 如何计算优势?
│  │
│  ├─ 结果监督 → 归一化最终奖励
│  └─ 过程监督 → 累积后续步骤奖励
│
└─ 如何正则化?│└─ 直接KL散度 → 避免奖励中的复杂计算

逻辑关系:链条型 - 三个子解法按顺序执行,前一个的输出是后一个的输入。

3. 隐性方法分析

关键隐性方法:组相对优势估计

通过逐行对比解法发现的隐性步骤:

  1. 对同一问题采样多个输出(第7行)
  2. 计算组内奖励分布统计量(第8行)
  3. 使用统计量进行奖励归一化(第9行)
  4. 将归一化奖励作为所有token的优势(结果监督)

这个隐性方法的关键在于:将个体奖励转换为群体相对排名,这不是传统强化学习教科书中明确定义的标准步骤。

4. 隐性特征分析

隐性特征:奖励模型的比较性本质

逐行对比发现的隐性特征:

  • 论文第13页提到:“The group relative way that GRPO leverages to calculate the advantages, aligns well with the comparative nature of rewards models”
  • 这个特征不在问题描述中,而是在解法的第8-9行之间形成的中间状态
  • 关键隐性方法定义:比较性优势对齐法 - 利用奖励模型天然的比较性质,通过组内相对排名而非绝对值来指导学习

5. 潜在局限性

  1. 采样效率依赖性:需要为每个问题采样多个输出(论文中是64个),增加了推理成本
  2. 组大小敏感性:组内样本数量G可能影响基线估计的稳定性
  3. 分布偏移脆弱性:当策略显著改变时,组内基线可能不再准确
  4. 奖励稀疏性限制:在奖励极其稀疏的任务中,组内可能没有正奖励样本
  5. 泛化能力受限:论文显示GRPO提升了Maj@K但未提升Pass@K,说明可能只是改善了输出分布而非根本能力

6. 多题一解的通用解题思路

通用解题模式:相对比较强化学习范式

共用特征:具有比较性奖励信号的序列决策问题

  • 数学推理任务
  • 代码生成任务
  • 文本生成质量评估任务

解题流程

  1. 识别比较性特征 → 判断是否存在同问题多输出比较的可能
  2. 构建比较群体 → 为每个输入采样多个候选输出
  3. 相对排名评估 → 使用群体统计量而非绝对值评估优劣
  4. 梯度权重调整 → 基于相对排名调整参数更新方向

适用题目类型

  • 存在明确正确答案的生成任务
  • 可以通过比较判断质量优劣的任务
  • 奖励函数具有比较性质的强化学习问题
  • 需要降低训练资源消耗的大模型优化场景

核心洞察:通过将个体表现置于群体环境中评估,利用相对位置而非绝对数值来指导学习,这种思路可推广到任何具有比较性评估标准的优化问题。

2. 全流程优化分析

多题一解特征分析

共用特征:比较性奖励评估特征

  • 特征名称:相对排名可比较性
  • 解法名称:群体相对优势估计法
  • 适用题目:数学推理、代码生成、文本质量评估、机器翻译

共用特征:资源受限优化特征

  • 特征名称:内存计算约束性
  • 解法名称:无价值函数强化学习法
  • 适用题目:大模型微调、边缘设备部署、实时交互系统

一题多解分析

针对"减少PPO内存消耗"这一核心问题,存在多种解法:

  1. GRPO解法(本文)→ 对应特征:奖励比较性 + 内存敏感性
  2. 简化PPO解法 → 对应特征:模型压缩性 + 梯度累积性
  3. 离线RL解法(如DPO)→ 对应特征:数据静态性 + 偏好可比性
  4. 蒸馏学习解法 → 对应特征:知识传递性 + 模型轻量性

更优解法探索

发现的隐性特征:奖励信号的时序依赖性

  • 当前GRPO将所有时刻的优势设为相同值(结果监督)
  • 优化方向:引入时序权重衰减,近期步骤获得更高权重

更直接的特征:样本效率vs计算效率权衡

  • 当前解法:固定采样64个候选
  • 优化解法:自适应采样量 - 根据奖励方差动态调整采样数

替换解法优化

原始环节:固定组大小G=64
↓ 优化
自适应组大小:G = max(8, min(64, 2×std(previous_rewards)))原始环节:简单奖励归一化
↓ 优化  
稳健归一化:使用中位数和四分位距代替均值和标准差原始环节:每步相同优势值
↓ 优化
时序加权优势:Â_t = normalized_reward × decay^(T-t)

3. 医疗领域应用示例

输入输出定义

输入:医疗诊断推理问题

问题:患者男性,45岁,主诉胸痛3小时,伴出汗、恶心。
心电图显示ST段抬高。肌钙蛋白升高。
请给出诊断和治疗建议。

输出:结构化医疗推理答案

诊断推理:
1. 根据ST段抬高+肌钙蛋白升高 → 急性ST段抬高型心肌梗死
2. 胸痛+出汗+恶心 → 典型心梗症状三联征  
3. 中年男性 → 心血管疾病高危人群治疗建议:
1. 立即急诊PCI或溶栓治疗
2. 双抗血小板聚集治疗
3. β受体阻滞剂+ACEI类药物
4. 他汀类调脂治疗

医疗GRPO全流程

  1. 问题收集:从医学教材、病例库收集诊断推理题
  2. 专家标注:多位医生对答案质量评分(1-10分)
  3. 模型采样:为每个病例生成64个诊断方案
  4. 医疗奖励模型:基于诊断准确性+治疗合理性训练
  5. 组相对评估:同一病例的64个方案内部排名
  6. 优势计算:(个体得分 - 组平均分) / 组标准差
  7. 策略更新:提升高分方案概率,降低低分方案概率
  8. 迭代优化:根据新的医疗知识更新奖励模型

关键优势

  • 安全性:通过组内比较避免生成极端错误的医疗建议
  • 一致性:确保同类病例的诊断逻辑保持一致
  • 效率性:避免训练复杂的医疗价值函数,降低计算成本

潜在风险

  • 如果组内样本都存在系统性偏误,相对排名仍可能导致错误诊断
  • 需要高质量的医疗奖励模型,否则会放大医疗错误
http://www.xdnf.cn/news/19010.html

相关文章:

  • NUMA架构
  • Java大厂面试全解析:从Spring Boot到微服务架构实战
  • 矩阵初等变换的几何含义
  • 【LeetCode】动态规划——542.01 矩阵
  • 系统设计(数据库/微服务)
  • 计算机网络的发展演进历程
  • 2 梯度下降算法
  • 英伟达 Spectrum-XGS:重构 AI 基础设施,开启跨域超级工厂时代
  • 氯化钕:以稀土之力引领科技创新
  • Spring AI 入门指南:三步将AI集成到Spring Boot应用
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术剖析
  • MySQL 面试题系列(四)
  • Mysql——日志
  • 力扣hot100:搜索旋转排序数组和寻找旋转排序数组中的最小值(33,153)
  • TikTok广告投放革命:指纹云手机如何实现智能群控与降本增效
  • Mac中修改Word的Normal.dotm文件
  • CSS实现内凹圆角边框技巧(高频)
  • 绿算技术解密金融科技安全:高性能计算与存储驱动金融防火墙新时代
  • 【拥抱AI】一起学卷积神经网络(CNN)
  • 一天推荐一款实用的手柄零件————线性霍尔
  • Zynq开发实践(FPGA之verilog仿真)
  • Flask 之上下文详解:从原理到实战
  • OSG+Qt —— 笔记3- Qt窗口绘制模型的三条轴(附源码)
  • 【Linux操作系统】简学深悟启示录:环境变量进程地址
  • Mysql面试题分享
  • 医疗巡诊车5G专网路由器应用
  • webrtc音频QOS方法一.1(NetEQ之音频网络延时DelayManager计算补充)
  • Spring Boot 与传统 Spring:从 WAR 到可执行 JAR,颠覆性的部署哲学
  • 在 TencentOS 3 上部署 OpenTenBase:从底层原理到生产级实践的深度指南
  • 微服务-24.网关登录校验-实现登录校验