论文阅读:Dataset Quantization

摘要

最先进的深度神经网络使用大量(百万甚至数十亿)数据进行训练。昂贵的计算和内存成本使得在有限的硬件资源上训练它们变得困难,特别是对于最近流行的大型语言模型 (LLM) 和计算机视觉模型 (CV)。因此最近流行的数据集蒸馏方法得到发展,旨在通过梯度匹配合成小规模数据集来减少训练样本的数量。然而,由于梯度计算与特定的网络架构相结合,合成数据集是有偏差的,并且在用于训练unseen architectures时表现不佳。为了解决这些限制,我们提出了数据集量化 (DQ),这是一种将大规模数据集压缩成小子集的新框架,可用于训练任何神经网络架构。大量实验表明,DQ 能够生成压缩的小型数据集,用于训练unseen network architectures,以最大压缩比进行不降低模型性能的训练。据我们所知,DQ 是第一个能够成功提取大规模数据集的方法,例如具有最大的压缩比的 ImageNet-1k。值得注意的是,使用来自 ImageNet 的 60% 数据和来自 Alpaca 指令微调数据的 20% 数据,这些模型训练后用于视觉任务(包括分类、语义分割和目标检测)和语言任务(包括指令调优任务,如BBH和DROP)的性能几乎没有下降。
在这里插入图片描述

1 引言

深度神经网络在计算机视觉和自然语言处理等多个领域表现出了优越的性能。它们的性能在很大程度上取决于训练数据量。例如,最近在ImageNet-1K上最先进的模型需要 30 亿数据进行预训练。对于计算资源有限的研究人员来说,这很难负担得起。然而,大型数据集中的所有数据是否有利于训练?是否有可能在不降低训练性能的情况下删除一些冗余样本?在下游任务上使用较少数据的预训练模型的性能是什么?在本文中,我们进行了广泛的实验并对这些问题进行了详细的探索。为了解决第一个问题,最近提出了几个数据集蒸馏 (DD) 算法 [62, 60, 30, 61, 53, 4, 16, 52, 35],通过合成一组明显小于原始数据集的新数据集来减少训练数据集大小。使用新的合成数据集,训练成本显著降低,同时产生与在原始数据集上训练的模型相当的结果。
在这里插入图片描述

尽管取得了重大进展,但两个限制使得这些算法难以部署在工业环境中:

  1. 泛化能力差
  2. 对更大数据集的可扩展性低
    在本文中,我们旨在实现一种结合数据集蒸馏方法和corset方法优点的方法:一种统一的数据集压缩方法,它生成紧凑的数据集,可用于训练各种网络架构,同时保持所有数据保持率下最先进的训练性能。我们首先研究了在低数据率下coreset选择方法性能不佳背后的原因,我们发现它在于一次性选择策略,导致所选数据的多样性较低。
    因此,我们提出了一种新的pipeline来克服coreset算法的上述问题,并将其称为数据集量化(DQ)。具体来说,DQ 首先基于子模块收益递归地将整个数据集划分为一组不重叠的 bins,旨在最大化等式1中定义的多样性收益。然后,从所有 bin 中统一采样一小部分数据样本。通过这种方式,对所选样本进行了优化,以尽可能地覆盖整个数据间多样性最大化的数据集。
    我们的主要贡献总结如下:
  3. 我们提出了一种新的框架数据集量化 (DQ),将数据集压缩成一个小的紧凑数据集,可用于训练具有最先进压缩性能的看不见的网络架构的神经网络。
  4. 我们提出了一种可扩展且高效的数据集压缩算法,可用于大型数据集,例如 ImageNet-1K。使用数据集量化,我们能够从 ImageNet-1K 数据集中删除 40% 的数据和Alpaca 指令数据集中删除 80% 的数据,并训练出没有性能损失的模型 。
  5. 我们验证了使用压缩数据集训练的模型可用于下游任务。在 ImageNet-1K 上用 60% 的数据预训练的模型在 COCO 上实现了对象检测的性能,ADE20K上进行分割。

2 相关工作

在本节中,我们回顾了两种具有代表性的相关方法:数据集蒸馏和核心集选择。我们还介绍了这两种方法的局限性和分析。

2.1 数据集蒸馏

数据集蒸馏(DD)是第一个提出从大型数据集合成少量信息样本的方法。具体来说,它通过最小化在合成数据集上训练的模型的原始训练样本的损失来优化合成样本。然后,人们提出了一系列技术,如数据集凝聚(DC)[63]、DSA[60]和IDC[31]。这些方法建议匹配从原始数据和合成数据计算的损失梯度。CAFE [53] 和 DM [61] 引入了特征分布匹配策略来减少大梯度样本的潜在偏差。最近的工作 [4] 试图最小化原始样本和合成样本之间的训练轨迹的差异。

2.2 核心集选择

核心集选择已被积极探索用于压缩数据集,旨在从目标数据集中选择最具代表性的样本的子集。以往的方法提出了不同的选择标准:geometry-based [8, 1, 44, 46], uncertainty-based [10], error-based [50, 41], decision-boundary-based [18, 38], gradient-matching [39, 28], bilevel optimization [29] and submodularity-based methods[26]。其中,上下文多样性 (CD) [1]、Herding [57] 和 k-Center Greedy [44] 试图根据它们与剩余样本的相似性去除冗余样本。Cal [38] 和 Deepfool [18] 认为核心集应该根据它们的学习困难来选择。Craig [39] 和 GradMatch [28] 试图在网络上训练时找到与整个数据集具有相似梯度值的最佳核心集。Glister [29] 引入了一个验证集来最大化整个数据集的对数似然,其中涉及耗时的双层优化。FL[26]和Graph Cut (GC)[26]同时考虑多样性和信息。

2.3 局限性和分析

DD 方法很难应用于大型数据集或架构,例如 ImageNet-1K 或 ResNet 系列,这主要是由于以下限制:泛化性差、可扩展性差和大型数据集的高计算成本。
在这里插入图片描述

3 方法

如第 2 节所述,基于 DD 方法的合成数据集在训练看不见的网络架构方面表现不佳,因为匹配指标与所使用的网络相结合。因此,我们积极探索对模型架构不敏感的数据选择策略。在本节中,我们首先介绍核心集选择方法的预备知识,并从理论上分析其局限性。特别是,我们选择基于 GraphCut 的方法 [26] 为例。然后,我们详细介绍了我们提出的数据集量化 (DQ) 方法。

3.1 核心集选择方法的预备知识

基于核心集的算法解决了 DD 方法的局限性。然而,几乎所有的coreset选择方法只以一次性的方式从整个数据集中选择单个子集。我们凭经验观察到它不可避免地引入了严重的选择偏差——位于数据集分布高密度区域的样本比其他样本更频繁地被选择——并产生多样性有限的选择结果。我们为观察提供了更详细的理论分析。
核心集选择的理论分析。几乎所有的coreset选择方法都使用heuristic metric来选择样本,这很难避免在heuristic metric下选择一些具有相似性能的样本。GraphCut[26]是一种最新的方法,我们选择它作为分析核心集选择过程的示例。 D = ( x k , y k ) k = 1 M D={(x_k,y_k)}^M_{k=1} D=(xk,yk)k=1M表示M个标注样例。我们默认从 D 中选择 K 个样本以形成核心集。核心集初始化为 S 1 1 ← ∅ S^1_1\leftarrow\emptyset S11,并且更新为 S 1 k ← S 1 k − 1 ∪ x k S^k_1\leftarrow S^{k-1}_1\cup x_k S1kS1k1xk。请注意, S n S_n Sn表示第n个bin, S n k S_n^k Snk表示第n个bin的前k个样例,并且 x k x_k xk表示第k个样例。我们将特征提取器定义为 f (·),在 GraphCut 中,通过最大化特征空间中的子模块增益 P ( x k ) P(x_k) P(xk) 来选择样本,定义如下
在这里插入图片描述

其中 S 1 k − 1 S^{k-1}_1 S1k1表示所选样本集, D / S 1 k − 1 D/S^{k-1}_1 D/S1k1表示剩余样本集。GraphCut 旨在最大化 P ( x k ) P(x_k) P(xk):它期望最大化 x k x_k xk和所选集合之间的多样性,同时最小化 x k x_k xk和剩余集合之间的距离。因此, S 1 S_1 S1 有望成为覆盖原始分布的核心集,同时保持最大的多样性。不过,当K远小于M, C 1 ( x k ) C_1(x_k) C1(xk)的和值远小于 C 2 ( x k ) C_2(x_k) C2(xk) x k x_k xk和剩余集之间的距离在增益计算中采用了主导位置。因此,正如预期的那样,所选 K 个样本的多样性并不能保证,特别是当数据比率较低时。

3.2 DQ概述

基于上述观察和分析,我们提出了数据集量化(DQ),这是一种量化大规模数据集以进行无损训练的新框架,其中考虑了数据效率、可扩展性和计算成本。在本文中,我们首先通过最大化子模块增益将数据集划分为几个不重叠的 bin。
在这里插入图片描述

如图3,给定一个数据集 D,使用预定义大小 K 的 bin 从 D 递归采样小信息集 bin,产生一组小 bin [ S 1 , . . . , S n , . . . , S N ] [S_1,...,S_n,...,S_N] [S1,...,Sn,...,SN]其中 N = M/K。每个bin S n = ( x j ( n ) , y j ( n ) ) j = 1 K ⊂ D S_n = {(x^{(n)}_j,y^{(n)}_j)} ^K_{j=1} \subset D Sn=(xj(n),yj(n))j=1KD在递归选择过程中,受限于原始特征分布的数据间多样性和代表性。早期步骤生成的 bin 主要受与剩余集的距离的限制,而后期的 bin 受到数据间多样性的限制。为了更好地捕获完整数据集的分布,并从以上两个角度平衡影响,然后通过从这些bin中均匀采样集成核心集S *进行训练。最终,通过从图像中删除非信息patchs来进一步减轻存储负担,从而去除冗余信息。
数据集 bin 生成,每个 bin 通过最大化等式1中声称的子模块增益来选择。DQ 从 D 递归地选择 bin,其中第 n 个 bin 中的第 i 个样本的选择公式如下:
在这里插入图片描述

Bin采样:在生成具有各种特征的数据集 bin 后,为了获得多样化和信息丰富的子集,使用采样器 g(·,·) 从每个 bin 中采样某个部分并形成最终的紧凑集。该过程正式定义为
在这里插入图片描述

此外,我们通过将每个样本的冗余数据划分为patch来去除每个样本中的冗余数据。受 Masked Auto-Encoder (MAE) [20] 的启发,它仅使用其中的一些patch来恢复图像,我们删除了不太重要的patch,以减少每张图片用于描述的像素数量。

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

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

相关文章

代码随想录算法训练营第11天

20. 有效的括号 方法: 1. 如果 !st.empty() return false2.如果st.top() ! s[i] return false3. 如果 st.empty() return false注意: 以下这种写法 不满足 题目要求的第二点,不能以正确的顺序闭合 if(s[i] st.top()){return true;s…

基于springboot+vue的图书管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

RabbitMQ如何保证消息不丢

如何保证Queue消息能不丢呢? RabbitMQ在接收到消息后,默认并不会立即进行持久化,而是先把消息暂存在内存中,这时候如果MQ挂了,那么消息就会丢失。所以需要通过持久化机制来保证消息可以被持久化下来。 队列和交换机的…

11. C语言标准函数库

C语言制定了一组使用方式通用的函数,称为C语言标准函数库,用于实现编程常用功能,标准函数库由编译器系统提供,并按功能分类存储在不同源代码文件中,调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…

Tensorflow2.0笔记 - 常见激活函数sigmoid,tanh和relu

本笔记主要记录常见的三个激活函数sigmoid,tanh和relu,关于激活函数详细的描述,可以参考这里: 详解激活函数(Sigmoid/Tanh/ReLU/Leaky ReLu等) - 知乎 import tensorflow as tf import numpy as nptf.__ve…

『python爬虫』ip代理池使用 协采云 账密模式(保姆级图文)

目录 实现效果实现思路代码示例总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 实现效果 在官网原版demo基础上小改了一下,修正了接口错误(把2023改成2024就可以了),原版demo只能测试单个ip,我这里批量测试所有…

为什么MySQL中多表联查效率低,连接查询实现的原理是什么?

MySQL中多表联查效率低的原因主要涉及到以下几个方面: 数据量大: 当多个表通过连接查询时,如果这些表的数据量很大,那么查询就需要处理更多的数据,这自然会降低查询效率。 连接操作复杂性: 连接查询需要对参与连接的每个表中的数…

从零学习Linux操作系统 第三十二部分 ansible中剧本的应用

一、什么是playbook及playbook的组成 1.Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 play就是一个个模块用列表的方式体现出来 playbook的语法是用YAML的预防进行书写的 2.YAML 简介 是一种表达资料序列的格式,类似XM…

【从零开始学GIS再到精通GIS】专题图制作-地图渲染-地图整饰

本篇主要介绍如何在gis中进行专题图制作-地图渲染-地图整饰;示例数据下载链接该网站更新了很多有关地理的数据。 1 数据准备:点、线、面等矢量数据、栅格数据的准备等(下一更会详细介绍数据处理等方面的内容); 2 加载…

记录一则 线上域名证书更新及cdn证书更新

本篇为阿里云免费证书更新记录。 登录阿里云账号 搜索数字证书管理服务管理控制台 点击创建证书 输入你的域名 填写相关信息(注:域名验证方式选择文件验证) 等待审核通过(时间不久,一般为半小时内) …

Vue2高级篇

Vue高级 Vue生命周期 生命周期又称为生命周期回调函数、生命周期函数、生命周期钩子, 是Vue在运行过程中的关键时刻帮我们调用的一些指函数, 生命周期函数名字不可修改, 其中的this指向的是vm或组件实例对象. 常用的生命周期钩子: mounted: 发送ajax请求、启动定时器、绑定…

【Web安全】SQL各类注入与绕过

【Web安全】SQL各类注入与绕过 【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection 【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection 【Web安全靶场】sqli-labs-master 38-53 Stacked-Injections 【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二…

python并发编程:IO模型

一 IO模型 二 network IO 再说一下IO发生时涉及的对象和步骤。对于一个network IO \(这里我们以read举例\),它会涉及到两个系统对象,一个是调用这个IO的process \(or thread\),另一个就是系统内核\(kernel\)。当一个read操作发生时&#xff…

无代理方式实现VMware的迁移?详细解析

在当今数字化时代,数据的安全性和可用性对于企业至关重要。尤其是在VMware转变订阅策略后,原本永久订阅的产品转变为以年付费订阅的形式,导致客户不得不支付更多的费用,大幅增加了成本。同时,客户也对VMware未来发展前…

k8s-kubeapps图形化管理 21

结合harbor仓库 由于kubeapps不读取hosts解析,因此需要添加本地仓库域名解析(dns解析) 更改context为全局模式 添加repo仓库 复制ca证书 添加成功 图形化部署 更新部署应用版本 再次进行部署 上传nginx 每隔十分钟会自动进行刷新 在本地仓库…

人人都写过的6个bug

大家好&#xff0c;我是知微。 程序员写bug几乎是家常便饭&#xff0c;也是我们每个人成长过程中难以避免的一部分。 为了缓解这份“尴尬”&#xff0c;今天想和大家分享一些曾经都会遇到过的bug&#xff0c;让我们一起来看看这些“经典之作”。 1、数组越界 #include <…

Python爬虫:http和https介绍及请求

HTTP和HTTPS 学习目标&#xff1a; 记忆 http、https的概念和区别记忆 浏览器发送http请求的过程记忆 http请求头的形式记忆 http响应头的形式了解 http响应状态码 1 为什么要复习http和https 在发送请求&#xff0c;获取响应的过程中 就是发送http或https的请求&#xff0c…

DMA 链表模式(LLI)深度解析

在进行一次 DMA 读或者写的时候&#xff0c;可以配置多个链表&#xff0c;从而当一个链表的数据传输完成时&#xff0c;会跳到下一个链表的起始地址&#xff0c;并继续传输数据&#xff0c;直到链表的下一个地址为 0。如果 DMA 使能了完成中断&#xff0c;则当 DMA 发送或者接收…

程序计数器介绍

程序计数器是计算机处理器中的寄存器&#xff0c;它包含当前正在执行的指令的地址(位置)。当每个指令被获取&#xff0c;程序计数器的存储地址加一。在每个指令被获取之后&#xff0c;程序计数器指向顺序中的下一个指令。当计算机重启或复位时&#xff0c;程序计数器通常恢复到…

java微服务技术选型,Java学习的三个终极问题及学习路线规划

前言 在网络技术中基于浏览器的B/S结构无论在PC端还是手机端都充当着至关重要的角色。 PC端自不必说&#xff0c;手机中很多应用虽然是以APP的形式存在&#xff0c;但它采用的还是B/S结构。如今日头条、微信的朋友圈等&#xff0c;这些应用在内部封装了浏览器&#xff0c;后端…