DAPO-Decoupled Clip and Dynamic sAmpling Policy Optimization

news2025/3/20 6:12:34

论文地址: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

1. 背景与动机

  • 推理能力的提升:随着语言模型规模的扩大,推理能力得到了显著提升,尤其是通过强化学习(RL)技术,模型能够进行复杂的推理任务。

  • 现有技术的封闭性:尽管像OpenAI和DeepSeek等公司在推理模型上取得了显著进展,但它们的技术细节并未公开,导致社区难以复现这些结果。

  • DAPO的目标:为了解决这一问题,作者提出了DAPO算法,并开源了一个大规模RL系统,旨在提升模型在复杂推理任务中的表现。

2. DAPO算法

DAPO(Decoupled Clip and Dynamic sAmpling Policy Optimization)算法是一个专门为大规模语言模型(LLM)强化学习设计的优化算法,旨在解决长链推理(long-CoT)场景中的训练挑战。DAPO通过四个关键技术提升了RL训练的效率和稳定性,具体介绍如下:

  1. Clip-Higher:通过解耦上下剪裁范围,避免熵崩溃,提升系统的多样性。

  2. Dynamic Sampling:动态采样策略,提升训练效率和稳定性。

  3. Token-Level Policy Gradient Loss:在长链推理(long-CoT)场景中,使用基于token的策略梯度损失,避免长序列样本对梯度的负面影响。

  4. Overlong Reward Shaping:通过软惩罚机制,减少过长样本的奖励噪声,稳定训练过程。


1. Clip-Higher:提升探索能力
  • 问题背景:在传统的PPO(Proximal Policy Optimization)或GRPO(Group Relative Policy Optimization)算法中,使用固定的剪裁范围(clip range)来限制策略更新,避免策略更新过大导致训练不稳定。然而,这种剪裁机制会限制模型的探索能力,尤其是对低概率token的更新。

  • 解决方案:DAPO提出了Clip-Higher策略,解耦了上下剪裁范围。具体来说,传统的PPO使用对称的剪裁范围(如1-ε1+ε),而DAPO将上下剪裁范围分别设置为ε_lowε_high,其中ε_high较大,允许低概率token有更大的更新空间。

  • 效果:通过增加ε_high,DAPO显著提升了模型的探索能力,避免了熵崩溃(entropy collapse),生成了更多样化的样本。


2. Dynamic Sampling:动态采样策略
  • 问题背景:在RL训练中,某些提示(prompt)的所有输出可能都是正确的(奖励为1)或错误的(奖励为-1),导致这些样本的梯度为零,无法有效更新模型。这种现象会降低训练效率,并增加梯度的方差。

  • 解决方案:DAPO引入了动态采样策略,通过过采样并过滤掉奖励为1或-1的样本,确保每个批次中的样本都具有有效的梯度。具体来说,DAPO会不断采样,直到批次中所有样本的奖励既不为1也不为-1。

  • 效果:动态采样显著提升了训练效率,减少了梯度方差,并加速了模型的收敛。


3. Token-Level Policy Gradient Loss:基于Token的策略梯度损失
  • 问题背景:在长链推理(long-CoT)场景中,传统的GRPO算法使用样本级(sample-level)损失计算,即先对每个样本内的token损失求平均,再对所有样本的损失求平均。这种计算方式会导致长序列样本中的token对整体梯度的贡献较小,影响模型对长序列中高质量推理模式的学习。

  • 解决方案:DAPO提出了Token-Level Policy Gradient Loss,直接对每个token的损失进行加权求和,而不是先对样本内的token损失求平均。这样,长序列样本中的token对梯度的贡献更大,模型能够更好地学习长序列中的推理模式。

  • 效果:Token-Level Policy Gradient Loss提升了模型对长序列样本的学习能力,减少了低质量长序列样本(如重复或无意义内容)的影响。


4. Overlong Reward Shaping:过长样本的奖励调整
  • 问题背景:在RL训练中,通常会设置一个最大生成长度,超过该长度的样本会被截断。传统的做法是对截断样本施加惩罚性奖励(如-1),但这种做法会引入奖励噪声,尤其是当模型生成了合理的推理过程但仅仅因为长度过长而被截断时。

  • 解决方案:DAPO提出了Soft Overlong Punishment机制,对过长样本的惩罚进行平滑处理。具体来说,DAPO定义了一个惩罚区间,当样本长度超过最大长度时,惩罚会随着长度的增加而逐渐加重,而不是直接施加一个固定的惩罚。

  • 效果:Soft Overlong Punishment减少了奖励噪声,稳定了训练过程,并避免了模型因过长样本而受到不合理的惩罚。


5. DAPO算法的整体流程

DAPO算法的整体流程如下:

  1. 采样:对每个提示(prompt)采样一组输出。

  2. 奖励计算:根据规则计算每个输出的奖励。

  3. 动态采样过滤:过滤掉奖励为1或-1的样本,确保批次中的样本具有有效梯度。

  4. 优势估计:使用组内奖励归一化计算每个token的优势值。

  5. 策略更新:通过DAPO的目标函数更新策略,目标函数结合了Clip-Higher、Token-Level Policy Gradient Loss和Soft Overlong Punishment。

DAPO的目标函数如下:

其中:

  • 是重要性采样比率。

  • 是基于组内奖励归一化的优势估计。

  • 是解耦的剪裁范围。


6. DAPO的优势
  • 提升探索能力:通过Clip-Higher策略,DAPO显著提升了模型的探索能力,避免了熵崩溃。

  • 高效训练:动态采样策略减少了无效样本的影响,提升了训练效率。

  • 长序列推理优化:Token-Level Policy Gradient Loss使模型能够更好地学习长序列中的推理模式。

  • 稳定训练:Soft Overlong Punishment减少了奖励噪声,稳定了训练过程。

3. 实验与结果

  • 数据集:使用了从AoPS网站和官方竞赛页面爬取并手动标注的数学数据集 DAPO-Math-17K,包含17K个问题和整数答案。

  • 训练细节:基于 verl 框架,使用Qwen2.5-32B作为预训练模型进行RL训练。通过动态采样、Clip-Higher等策略,模型在AIME 2024竞赛中取得了50分的成绩,超过了DeepSeek的47分,且仅使用了50%的训练步数。

  • 训练动态:文章详细分析了训练过程中的响应长度、奖励动态、熵和生成概率等指标,展示了RL训练的复杂性和系统性挑战。

4. 开源贡献

  • 算法与代码:DAPO算法和训练代码完全开源,基于 verl 框架,社区可以复现和改进。

  • 数据集:开源了经过精心处理和标注的数学数据集,支持未来的研究。

5. 结论

DAPO系统通过开源算法、代码和数据集,为大规模LLM的强化学习提供了一个可扩展的解决方案。文章提出的四个关键技术显著提升了模型在复杂推理任务中的表现,尤其是在长链推理场景中。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数组模拟邻接表 #图论

文章目录 为什么要用数组来模拟邻接表存储思路遍历思路 树是特殊的图,因此邻接表可以存储图和树两种数据结构。 为什么要用数组来模拟邻接表 在算法设计当中,利用数组来代替结构体模拟各种数据结构会更加简单。 存储思路 给定如下数据,我们可以构造如…

VBA常见的知识都有哪些,让AI编写的VBA经常 报错,所以VBA的基础还是要学习的

掌握这些能够大大的提高VBA的编写效率,欢迎来到涛涛聊AI。 1. 异常处理 Cleanup:是VBScript的错误处理标签,用于标记程序执行失败或退出时需要执行的清理操作(如关闭文件、释放对象)。这段代码会在遇到错误或用户取消操作时跳转…

DeepSeek(8):结合Kimi-PPT助手一键生成演示报告

1 生成内容 在Deepseek中生成内容: 帮我创建年度计划,描述《智能枕头》产品的如何在全国销售,计划切分到每个月。从而让我们的老板和团队对报告充满信息。输出的内容我需要放到ppt中进行展示。 使用Deepseek R1模型,如下&#x…

【MySQL】MySQL如何存储元数据?

目录 1.数据字典的作用 2. MySQL 8.0 之前的数据字典 3. MySQL 8.0 及之后的数据字典 4.MySQL 8 中的事务数据字典的特征 5.数据字典的序列化 6. .sdi文件的作用: 7..sdi的存储方式 在 MySQL 中,元数据(Metadata) 是描述数…

用ASCII字符转化图片

代码 from PIL import Image# 定义 ASCII 字符集,从最暗到最亮 ASCII_CHARS "%#*-:. "def resize_image(image, new_width100):width, height image.sizeratio height / widthnew_height int(new_width * ratio)resized_image image.resize((new_wi…

蓝桥与力扣刷题(蓝桥 组队)

题目:作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。 每位球员担任 1号位至 5号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少? 本题为填空题&…

AI Agent系列(六) -基于ReAct架构搭建LLM Agent(Deepseek)

AI Agent系列【六】 一、 ReAct1.1 ReAct 的处理过程:1.1 代码结构 二、 Python代码实现2.1 通过Zero-shot 实现python代码实例Python代码示例1:python代码实现示例2 一、 ReAct ReAct 是 Reseaning 和 Action 两个词的前缀合成,代表着先推…

AnyTouch:跨多个视觉触觉传感器学习统一的静态动态表征

25年3月来自人大、武汉科技大学和北邮的论文“AnyTouch: Learning Unified Static-dynamic Representation Across Multiple Visuo-tactile Sensors”。 视觉触觉传感器旨在模拟人类的触觉感知,使机器人能够精确地理解和操纵物体。随着时间的推移,许多精…

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置,博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接:GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀 直接下载解压 2.需要自己准备的文件 文件结构如下:红…

VSCode C/C++ 环境搭建指南

一、前言 Visual Studio Code(简称 VSCode)是一款轻量级且功能强大的跨平台代码编辑器,凭借丰富的插件生态和高度的可定制性,深受开发者喜爱。对于 C/C 开发者而言,在 VSCode 中搭建开发环境,能够获得灵活…

Python 中下划线 “_” 的多面性:从变量到约定

# Python中下划线“_”的多面性:从变量到约定 在Python的语法体系里,下划线“_”看似毫不起眼,实则扮演着极为重要且多样化的角色。它不仅能作为普通变量参与编程,更在多个特殊场景下有着独特的用途与约定。深入理解下划线的各种…

Vue3项目开发:状态管理实践指南

# Vue3项目开发:状态管理实践指南 一、引言 背景介绍 在Vue项目中,状态管理是一个非常重要的话题。合理的状态管理能够帮助我们更好地组织和管理数据,提升项目的可维护性和可扩展性。本文将深入探讨Vue3项目中状态管理的最佳实践,…

数据结构-------栈

顺序栈: 一、数据结构定义 数据元素 DATATYPE typedef struct person {char name[32];char sex;int age;int score; } DATATYPE;顺序栈结构 SeqStack typedef struct list {DATATYPE *head; // 栈空间首地址int tlen; // 栈总容量(total leng…

机器学习概要

文章目录 一、什么是机器学习 二、机器学习的种类 1. 有监督学习 2. 无监督学习 3.强化学习 三、机器学习的应用 四、机器学习的步骤 1. 数据的重要性 2. 数据和学习的种类 3. 可视化 一、什么是机器学习 机器学习指的是计算机根据给定的问题、课题或环境进行学习&a…

【LangChain入门 2 Model组件】开始!LLM Models简单对话

文章目录 一、使用langchain_ollama二、采用DeepSeek的API三、Model 介绍3.1 OllamaLLM 预训练模型3.2 ChatOllama 聊天预训练模型3.3 OllamaEmbeddings 实现一个helloworld,跑通一个简单的对话。 后面章节会正式介绍LangChain的各个功能。 后台llm的端口可以任意选…

C++20 中线程管理与取消机制的深度剖析

文章目录 std::jthread:更智能的线程管理背景与优势构造函数与 std::stop_token 的集成 std::stop_token、std::stop_source 和 std::stop_callback:灵活的取消机制std::stop_token:取消请求的指示器std::stop_source:取消请求的发…

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析 一、Teleport:突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

FPGA——实现LED流水灯

文章目录 一、Quartusll_18.1和VS Code软件的关联二、DE2-115的时钟电路三、流水灯的分层次设计四、总结 一、Quartusll_18.1和VS Code软件的关联 1.先打开Quartus II 软件,然后选择菜单栏“Tools”下的“Options…”。 2.点击“Options…”,在弹出的对…

Excel 小黑第12套

对应大猫13 涉及金额修改 -数字组 -修改会计专用 VLOOKUP函数使用(查找目标,查找范围(F4 绝对引用),返回值的所在列数,精确查找或模糊查找)双击填充柄就会显示所有值 这个逗号要中文的不能英…

滚动元素的新api

点击的时候需要双重视图滚动 itemClick(id) {// 滚动到对应位置this.$nextTick(() > {// 找到对应 id 在 initList2 中的索引const index this.initList2.findIndex((item) > item.id Number(id));if (index ! -1) {// 获取所有菜单项const menuItems document.queryS…