DAPO浅析
论文地址 https://arxiv.org/abs/2503.14476
参考实验:DAPO + vLLM v1 + VeRL —— VOC性能比较
Motivation
没有完整的GRPO训练R1-32B的框架
目标:
- 降低错误样本的长度 (token-level loss)
- 训练更加稳定 (overlong filter)
- 避免generation entropy的塌陷(higher clip)
- 提高训练效率(dynamic sample)
Method
整体优化目标如下
s.t.\ 0<|\{o_i|is\_equivalent(o_i,a)\}|<G
\]
其中
\]
这里DAPO剔除了KL散度惩罚项,它认为
在RLHF场景下,RL的目标是在不偏离原是模型分布下对齐人类偏好(即仅学习人类偏好,而不改变模型原有知识能力),因此需要添加KL惩罚项。
然而在训练long-cot的reasoning模型时,其目标是为了提升模型的能力(math、推理、code等)训练前后的模型分布可以是显著不一样的,KL惩罚项可能会限制模型的探索新知识的能力,因此去除。
分为以下四个方面
1. Raise the Ceiling: Clip-Higher
考虑到clip的是一个概率的比值\(\frac{\pi_{\theta}}{\pi_{old}}\),在\(\pi_{old}\)不同的情况下,会影响clip的范围
例如 \(\pi_{old}=0.1, \pi_{\theta}=0.2\), 此时比值为\(2\),此时policy会认为模型前后变化过大,而不训练此数据。但这条数据是值得训练的,只是old的概率比较小。
虽然比值是2倍,但其实数值上只多了0.1,因此还是需要被训练的,并没有影响收敛。
同时,实验也验证了上面发现的问题。实验发现GRPO中 被clip掉的token的平均概率的最大值均小于0.2 ,即
\]

大量小概率的token被clip掉了,这验证了\(\epsilon_{high}\)阻碍了低概率token 概率的增长。
因此可以提高上限\(\epsilon_{high}\)来提高A>0的低概率token的概率,从而避免entropy变小的过快,输出单一化。

值得注意的现象,提高\(\epsilon_{higher}\)之后:
- RL的avg@32更高的
- 避免了熵塌的现象(因为高的\(\epsilon_{higher}\)鼓励模型探索原先小概率的正向轨迹,提高了多样性)
此外,old模型小概率sample并没有影响原有\(\epsilon_{low}\)
这是因为,\(\epsilon_{low}\)是在A<0的sample起作用,若重要性采样的比值很大,并不会对A<0的token进行裁剪。
2. The More the Merrier: Dynamic Sampling
考虑到如果一个sample的G个rollout的奖励
\(\{R_i\}_{i=1}^G\)都是0或都是1,那么所有的优势A都是0,这并不会更新policy,会导致效率低下
因此使用动态采样的方法,一直采样直到一个sample的G个rollout的R 不全是0 或不全是1.
\]
上述公示的含义是,对于QA对\((q,a)\),\(o_i\)和答案\(a\)相同的个数在\((0,G)\)的区间内。
3. Rebalancing Act: Token-Level Policy Gradient Loss
DAPO任务 sample-level的loss(每个rollout的贡献度是一样的),然后不同rollout的长度不一样,过长的样本对模型的影响更大一些:
- 过长的样本会导致模型难以学习推理模式 【置信度低,困惑度高】
- 过长的样本中存在一些不必要的 重复的话【长度增长过快】
因此使用token-level的技术,长度越大的rollout,贡献度越大。
通过grpo sample-level loss得知,grpo并不在意response的长短(不同长度的sample的贡献度均为相同),然而长度越长A越大,因此response的长度会快速的增加。
但是DAPO认为长度越长的sample的贡献度越大,因此过长的sample是对的会重点强化(提高概率),但是错了的话,会重点惩罚,从而减小错的长response的概率,即
\(P(len(o_i)>\delta|A<0)\)下降。

同时,通过实验发现,DAPO的response的平均长度并没有无脑、快速增长。
Hide and Seek: Overlong Reward Shaping
考虑到过长的response会被截断无法得到结果,这会导致奖励极低,
因此采用mask的方式,在训练的时候过滤掉过长response的损失。

实验发现,添加overlong filter之后,训练更加稳定(entropy,acc上),避免了noise。
DAPO进一步提出了soft overlong punishment,其实是基于长度的奖励,就不用进行filter操作了,直接赋予低的R就可以了,有利于降低response的长度。添加了一个cache的缓冲区,从而soft。
0, &|y|\leq L_{max}-L_{cache}\\
-\frac{|y|-(L_{max}-L_{cache})}{L_{cache}}, &L_{max}-L_{cache}<|y|\leq L_{max}\\
-1, &L_{max}<|y|
\end{cases}
\]
代码解析待更新(verl实现dapo部分)
DAPO浅析的更多相关文章
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- word-break|overflow-wrap|word-wrap——CSS英文断句浅析
---恢复内容开始--- word-break|overflow-wrap|word-wrap--CSS英文断句浅析 一 问题引入 今天在再次学习 overflow 属性的时候,查看效果时,看到如下结 ...
- 编写轻量ajax组件02-AjaxPro浅析
前言 上一篇介绍了在webform平台实现ajax的一些方式,并且实现一个基类.这一篇我们来看一个开源的组件:ajaxpro.虽然这是一个比较老的组件,不过实现思想和源码还是值得我们学习的.通过上一篇 ...
随机推荐
- babylon.js 学习笔记(7)
前面我们学习了如何画一堆房子(如下图),显然这单调的绿色大地,看上去效果并不好. babylon.js中,可以用图片模拟出地势高低不同的效果,比如下面这张图片: 颜色越深的地方,表示地势越低(即:盆地 ...
- Win10正式版如何查看电脑Wifi密码的问题
一些电脑基地的用户,说从Win10正式版计算机中如何提取已经保存的Wi-Fi密码?其实,这个还是很简单的,下面,技术员小编就来分享具体的提取方法. 在 Windows 10 中,查看已保存的 Wi-F ...
- unity接入steam sdk 相关事宜
https://blog.csdn.net/HG2131/article/details/123824592
- Linux系列之学会使用Top命令
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,有点像win ...
- win 常用命令
ipconfig 用法: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /release [adapter] | /renew ...
- js在循环遍历数组中删除指定元素踩坑( foreach.. for.. for..in.. )
1.forEach [1]例子:循环arr数组,将item为1的元素从数组中删除 let arr = [1, 1, 2] arr.forEach((item, index, arr) => { ...
- 【QML image】如何添加图片到项目资源中
1. 借助Qt 的资源系统 1.新建Qt项目 2.把所有图片放在一个文件夹中,将文件夹放在Qt项目目录下 3.选中项目--Add New--Qt--Qt Resource File--choose 4 ...
- VPS 上安装 Nginx 就是这么简单
以下内容仅适用于 Centos 操作系统 一.将系统的软件包更新到最新版本 yum -y update 二.安装 Nginx yum install nginx 三.启动 Nginx,并设置开机启动 ...
- .Net NativeAOT另外一种选择-bflat
https://www.qiufengblog.com/articles/dotnet-native-bflat.html 前言 说起bflat,还得先说NativeAOT,在.Net 7时,正式把N ...
- mysql binary like_MYSQL的binary解决mysql数据大小写敏感问题的方法
1.在create的时候就使用binary,而不是在query的时候加. username varchar(30) BINARY NOT NULL default '', 如果表已经建好了,使用: a ...