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

字节、清华AIR开源DAPO——学习笔记

 超越DeepSeek GRPO的关键RL算法,字节、清华AIR开源DAPO

https://zhuanlan.zhihu.com/p/31157035727

备注:知乎这篇更全一点

近日,清华 AIR 和字节联合 SIA Lab 发布了他们的第一项研究成果:DAPO,即 Decoupled Clip and Dynamic sAmpling Policy Optimization(解耦剪辑和动态采样策略优化)。这是一个可实现大规模 LLM 强化学习的开源 SOTA 系统。此外,使用该算法训练的模型也将在近期开源发布。

项目页面:https://dapo-sia.github.io/

论文地址:https://dapo-sia.github.io/static/pdf/dapo_paper.pdf

代码地址:https://github.com/volcengine/verl/tree/gm-tyx/puffin/main/recipe/dapo

数据:https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k

使用该算法,该团队成功让 Qwen2.5-32B 模型在 AIME 2024 基准上获得了 50 分,优于同等规模的 DeepSeek-R1-Zero-Qwen-32B,同时 DAPO 版 Qwen2.5-32B 使用的训练步数还少 50%。

生版 GRPO 面临着几大关键问题,比如熵崩溃、奖励噪音和训练不稳定。事实上,该团队表示,很多研究团队在复现 DeepSeek 的结果时也遇到了类似的难题。他们表示:「这表明 R1 论文中可能省略了开发工业级、大规模且可重现的强化学习系统所需的关键训练细节。」

Allen AI 研究者 Nathan Lambert 总结了 DAPO 对 GRPO 的改进,包括两个不同的裁剪超参数、动态采样、token 层面的策略梯度损失、过长奖励塑造

PPO和GRPO对比:

  • PPO 引入了裁剪式替代目标(clipped surrogate objective)来执行策略优化。通过使用裁剪将策略更新限制在先前策略的近端区域内,PPO 可以让训练稳定并提高样本效率
  • 与 PPO 相比,GRPO 消除了价值函数并以群组相关的方式来估计优势
  • 与 PPO 类似,GRPO 也采用了裁剪目标,同时还有一个直接添加的 KL 惩罚项

DAPO改进点:

  • 在训练长 CoT 推理模型时,模型分布可能会与初始模型有显著差异,因此这种限制是不必要的。因此,在 DAPO 中,KL 项被排除在外。
  • 抬高天花板:Clip-Higher,他们发现,上限剪辑阈值确实限制了低概率 token 的概率增长,从而可能限制了系统的多样性。根据 Clip-Higher 策略,研究者将较低和较高的剪辑范围解耦为 ε_low 和 ε_high:研究者增加了 ε_high 的值,以便为低概率 token 的增加留出更多空间。如图 2 所示,这一调整有效地提高了策略的熵,有利于生成更多样化的样本。研究者选择将 ε_low 保持在相对较小的范围内,因为增大 ε_low 会将这些 token 的概率压制为 0,从而导致采样空间的崩溃。
  • 越多越好:动态采样。当某些提示的准确度等于 1 时,现有的 RL 算法就会出现梯度递减问题。根据经验,准确率等于 1 的样本数量会继续增加,如图 3b 所示。这意味着每批样本中的有效提示次数会不断减少,从而导致梯度方差增大,抑制了模型训练的梯度信号。在训练之前不断采样,直到批次中全部都是准确率既不等于 0 也不等于 1 的样本。如何采样?,在动态采样的情况下,实验能更快地实现相同的性能。

  • Rebalancing Act:Token 级策略梯度损失。由于所有样本在损失计算中的权重相同,因此长回复中的 token 对总体损失的贡献可能会不成比例地降低,这可能会导致两种不利影响。

首先,对于高质量的长样本来说,这种影响会阻碍模型学习其中与推理相关的模式的能力。其次,过长的样本往往表现出低质量的模式,如胡言乱语和重复词语。

如图 4a 和图 4b 所示,样本级损失计算由于无法有效惩罚长样本中的不良模式,会导致熵和响应长度的不健康增长。

  • 捉迷藏:过长的奖励塑造

为了研究奖励噪声的影响,研究者首先应用了超长过滤策略,以掩盖截断样本的损失。如图 5 所示,这种方法大大稳定了训练并提高了性能。

此外,他们还提出了「Soft Overlong Punishment」(等式 13),这是一种长度感知惩罚机制,旨在塑造截断样本的奖励。具体来说,当响应长度超过预定义的最大值时,研究者会定义一个惩罚区间。在这个区间内,响应越长,受到的惩罚就越大。这种惩罚会添加到基于规则的原始正确性奖励中,从而向模型发出信号,避免过长的响应

至于 token 级损失,虽然它带来的性能提升较少,但该团队发现它可增强训练稳定性并使长度增加得更健康。

 

代码实现:

可以通过readme中的部分代码在verl找对应实现,和trl不同,这是通过配置来定义的


http://www.kler.cn/a/598202.html

相关文章:

  • 快速排序总结
  • windows清除电脑开机密码,可保留原本的系统和资料,不重装系统
  • Mybatis操作数据库(注解+xml两个方式)
  • Flutter访问数据库
  • 【Python数据分析+可视化项目案例】:亚马逊平台用户订单数据分析
  • 【动态规划】下降路径最小和
  • KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来
  • 2025年第二期 | CCF ODC《开源战略动态月报》
  • 【leetcode hot 100 51】N皇后
  • JVM如何处理Java中的精度转换: 从源码到字节码
  • 坦克大战(c++)
  • list的模拟实现和学习
  • 数据分析异步进阶:aiohttp与Asyncio性能提升
  • 杨辉三角 II(js实现,LeetCode:119)
  • OSPF多区域通信
  • Js闭包Closure 及 其可能产生的内存泄漏问题
  • C++常见问题与思考
  • js去除后端返回json的冗余字段
  • C语言-状态模式详解与实践 - OTA升级状态机
  • WebSocket:现代实时通信协议的深度解析与实践