核心集:DeepCore: A Comprehensive Library for CoresetSelection in Deep Learning

目录

一、TL;DR

二、为什么研究核心集?

三、问题定义和如何做

3.1 问题定义

3.2 业界方法

3.2.1 基于几何的方法

3.2.2 基于不确定性的方法

3.2.3 基于误差/损失的方法

3.2.5 GraNd 和 EL2N 分数

3.2.6 重要性采样

3.2.7 基于决策边界的办法

3.2.8 基于梯度匹配的方法

四、综述-应用(直接翻译)

4.1 数据高效学习

4.2 持续学习

4.3 主动学习

五、DeepCore的库能力和bechmark

5.1 为什么要提出DeepCore

5.2 DeepCore实现了什么coreset算法

5.3 CIFAR10的benchmark

5.4 Imagenet的benchmark

5.5 跨架构的benchmark(模型无关性)


一、TL;DR

  1. 核心集的目的是选择最具信息量的训练子集,但之前的coreset选择方法不是为了深度学习设计的,会导致效果差

  2. 作者贡献了deepcore的工具,集成了最近很多关于深度学习的核心集选择方法

  3. 在Imagenet/cifar10等数据集上验证,结论如下:

    1. 在CIFAR10数据集上,基于次模函数的方法在小核心集<1%时表现最佳,比其他方法高出5%以上。

    2. 在ImageNet数据集上,基于误差的方法(如遗忘和GraNd)在小核心集(少于10%)时表现较好。

    3. 当核心集大小增加到30%以上时,随机选择成为了一个强大且稳定的基线,大多数方法难以超越。

二、为什么研究核心集?

  1. NN化的规模越来越大,训练数据集也在不断扩展,这需要大量的内存和计算资源才能达到最先进的性能,核心集的选择能够极大的降低计算成本,其目标是从给定的大型训练数据集 T 中选择一个最具信息量的小型训练样本子集 S。在核心集上训练的模型,其泛化性能应与在原始训练集上训练的模型相近。
  2. 之前的传统的核心集选择方法在NN领域上是否work不太确定
  3. 作者使用deepcore这个库继承了12种核心集的选择方法

三、问题定义和如何做

3.1 问题定义

在学习任务中,我们给定一个大型训练集 T={(xi​,yi​)}i=1∣T∣​,其中 xi​∈X 是输入,yi​∈Y 是 xi​ 的真实标签,X 和 Y 分别表示输入空间和输出空间。核心集选择的目标是找到一个最具信息量的子集 S⊂T,满足 ∣S∣<∣T∣,使得在 S 上训练的模型 θS​ 与在完整训练集 T 上训练的模型 θT​ 具有相近的泛化性能。

3.2 业界方法

3.2.1 基于几何的方法

假设在特征空间中彼此接近的数据点倾向于具有相似的属性。因此,基于几何的方法试图移除那些提供冗余信息的数据点,剩下的数据点形成一个核心集 S,其中 ∣S∣≪∣T∣。

  1. Herding:Herding 方法根据核心集中心与原始数据集中心在特征空间中的距离选择数据点。该算法逐步且贪婪地每次向核心集中添加一个样本,以最小化两个中心之间的距离。
  2. k-Center Greedy:该方法试图解决最小最大设施选址问题,即从完整数据集 T 中选择 k 个样本作为 S,使得 T∖S 中的数据点与其在 S 中最近的数据点之间的最大距离最小化:

其中 D(⋅,⋅) 是距离函数。该问题是 NP-hard 的,文献中提出了一个称为 k-Center Greedy 的贪婪近似算法。k-Center Greedy 已成功扩展到广泛的应用场景,例如主动学习和高效的 GAN 训练。

3.2.2 基于不确定性的方法

置信度较低的样本可能对模型优化的影响大于置信度较高的样本,因此应包含在核心集中。以下是给定特定分类器和训练周期时常用的样本不确定性度量,其中 C 是类别数量:

最后根据这个分数来对降序选择样本

3.2.3 基于误差/损失的方法

在数据集中,对训练神经网络的误差或损失贡献更大的训练样本更为重要。可以通过每个样本的损失或梯度,或其在模型训练过程中对其他样本预测的影响来衡量重要性。选择重要性最大的样本作为核心集。

3.2.4 遗忘事件

Toneva 等人统计在训练过程中遗忘发生的次数,即在当前周期中对样本的误分类,而在前一个周期中已正确分类,形式上为 accti​>accti+1​,其中 accti​ 表示样本 i 在周期 t 时预测的正确性(真或假)。遗忘的次数揭示了训练数据的内在属性,允许移除那些难以遗忘的样本,以最小的性能下降。

3.2.5 GraNd 和 EL2N 分数

样本 (x,y) 在周期 t 的 GraNd 分数定义为:

它衡量了每个样本在早期周期 t 对训练损失下降的平均贡献,并且在几次不同的独立运行中。在早期训练阶段(例如,几个周期后)计算的分数效果良好,因此这种方法的计算成本较低。还提供了一种 GraNd 分数的近似值,称为 EL2N 分数,它衡量误差向量的范数:

3.2.6 重要性采样

在重要性采样(或自适应采样)中,我们定义 s(x,y) 是数据点 (x,y) 对总损失函数的上界(最坏情况)贡献,即敏感度分数。它可以表示为:

其中 L(x,y) 是具有参数 θ∈Θ 的非负成本函数。对于 T 中的每个数据点,被选中的概率设置为 p(x,y)=∑(x,y)∈T​s(x,y)s(x,y)​。根据这些概率构建核心集 S。在黑箱学习器和 Jtt中也提出了类似的想法,其中错误分类的样本将被加权或增加其采样概率。

3.2.7 基于决策边界的办法

由于分布在决策边界附近的数据点难以区分(百度的数据挖掘核心理念之一),因此,那些最接近决策边界的点也可以被用作核心集。

对抗性 DeepFool:尽管无法获取到确切的决策边界距离,但 Ducoffe 和 Precioso试图在输入空间 X 中寻找这些距离的近似值。通过对样本施加扰动,直到样本的预测标签发生改变,那些需要最小对抗性扰动的数据点最接近决策边界。

对比主动学习:为了找到决策边界附近的数据点,对比主动学习(Contrastive Active Learning, CAL)选择那些预测似然与邻居差异最大的样本,以构建核心集。

3.2.8 基于梯度匹配的方法

四、综述-应用(直接翻译)

4.1 数据高效学习

核心集选择的基本应用是实现高效的机器学习。在核心集上训练模型可以在保留测试性能的同时降低训练成本。特别是在神经架构搜索(NAS)中,需要训练并评估成千上万甚至数百万个深度模型,且这些模型都在同一数据集上进行评估。核心集可以作为代理数据集,高效地训练和评估候选模型,从而显著降低计算成本

4.2 持续学习

核心集选择也是构建持续学习或增量学习记忆的关键技术,用于缓解灾难性遗忘问题。在流行的持续学习设置中,维护一个记忆缓冲区以存储来自先前任务的信息量大的训练样本,以便在未来的任务中进行复习。研究表明,持续学习的性能在很大程度上依赖于记忆的质量,即核心集。

4.3 主动学习

主动学习旨在通过从未标记池 P 中选择信息量大的样本进行标记,以最小的查询成本实现更好的性能。因此,它可以被视为一个核心集选择问题。

除了上述应用之外,核心集选择还在许多其他机器学习问题中得到研究并成功应用,例如对抗噪声的鲁棒学习、聚类、半监督学习、无监督学习、高效的 GAN 训练、回归任务等。

五、DeepCore的库能力和bechmark

5.1 为什么要提出DeepCore

       核心集选择方法已在不同的实验设置下被提出并测试,这些设置包括数据集、模型架构、核心集大小、数据增强、训练策略等。但是相互之间比较不太公平,有的是在MNIST,有的是在Imagenet、即使数据集一样,不同的paper用的数据增强等策略也不一样,因此提出deepcore,在同一个维度上比较。

5.2 DeepCore实现了什么coreset算法

根据第三节实现了如下的方法:

  1. 基于几何的方法:上下文多样性(Contextual Diversity, CD)、Herding和k-Center Greedy。

  2. 基于不确定性的方法:最低置信度(Least Confidence)、熵(Entropy)和边缘(Margin)。

  3. 基于误差/损失的方法:遗忘(Forgetting)和GraNd。

  4. 基于决策边界的方法:CAL和DeepFool。

  5. 基于梯度匹配的方法:Craig和GradMatch。

  6. 双层优化方法:Glister。

  7. 基于次模性的方法:图割(Graph Cut, GC)和设施选址(Facility Location, FL)函数。 我们还将随机选择(Random selection)作为基线。

5.3 CIFAR10的benchmark

实验和超参数设置

  • 优化器:使用随机梯度下降(SGD)作为优化器,批大小为128,初始学习率为0.1,采用余弦退火调度器,动量为0.9,权重衰减为 5×10−4,训练周期为200轮。

  • 数据增强:对32×32的训练图像应用随机裁剪(4像素填充)和随机翻转。

  • 核心集比例:分别选择整个训练集的0.1%、0.5%、1%、5%、10%、20%、30%、40%、50%、60%和90%作为核心集。

  • 全数据集训练:在完整数据集上的训练结果被视为性能的上限。

  • 特征提取:对于需要样本梯度、预测概率或特征向量的方法,使用在完整数据集上训练了10轮的ResNet-18模型来提取上述指标。当需要梯度向量 ∇θ​L(x,y;θ) 时,使用最终全连接层的参数梯度,如许多先前研究所建议的那样。这使得梯度向量可以在不进行全网络反向传播的情况下轻松获得。

  • 样本选择:虽然DeepCore支持平衡和不平衡的样本选择,但本文的所有实验均采用平衡选择,即每个类别选择相同数量的样本。

  • 次模函数方法的优势:在小比例(0.1%-1%)和大比例设置中,基于次模函数的方法均取得了良好的实验结果。特别是图割(Graph Cut, GC)方法表现突出,在选择0.1%到10%的训练数据时取得了最佳结果。当每类选择50个样本时(即整个训练集的1%),图割方法在测试精度上比其他方法高出超过5%。CAL方法在0.1%-5%的小比例设置中也表现出色,性能与设施选址(Facility Location, FL)相当。然而,随着核心集大小的增加,尤其是在选择超过30%的训练数据时,其优势逐渐消失。

  • 其他方法的表现:除了上述方法外,其他方法在0.1%-1%的小比例设置中均未能超越随机采样基线。遗忘(Forgetting)方法在30%比例设置中表现优于其他方法。在40%-60%的比例设置中,GraNd和基于不确定性分数的方法表现突出。在所有比例设置中,GradMatch和Herding仅勉强超过随机采样。需要注意的是,GradMatch在原始论文中的实验设置是自适应采样,即随着网络训练的进行迭代更新子集。为了进行公平比较,本文在选择核心集后将其固定用于所有训练周期。Herding最初是为从高斯混合中提取的固定表示而设计的,因此其性能在很大程度上取决于嵌入函数。需要注意的是,上述发现是基于一种超参数设置的,如果超参数发生变化,发现的结果可能会改变。例如,如果用于特征提取的模型完全训练,Herding可能会有更好的表现。我们将在后面研究一些超参数的影响。

5.4 Imagenet的benchmark

实验结果如表2(Tab. 2)所示。结果显示,基于误差的方法,如遗忘(Forgetting)GraNd,在ImageNet上通常表现更好。特别是,当选择少于10%的数据作为核心集时,遗忘方法明显优于随机选择(Random)。然而,当核心集的大小较大时(例如选择30%的数据),没有任何方法能够超越randomrandom仍然是一个强大且稳定的基线

5.5 跨架构的benchmark(模型无关性)

为了检验表现良好的方法是否具有模型无关性,即当在一种架构上选择核心集,然后在其他架构上进行测试时,核心集是否仍然表现良好。

结论:使用图割进行的次模选择在测试结果上表现稳定良好;GraNd显示出对计算梯度范数的模型的偏好,resnet和Inception存在差异;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus笔记-快速入门

大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

Redis - String相关命令

目录 setgetmsetmgetsetnx、setex、psetexincr、incrby、decr、decrby、incrbyfloatappendgetrangesetrangestrlen字符串类型编码方式总结 Redis - String Redis存储的字符串&#xff0c;是直接按二进制方式存储&#xff0c;不会做任何编码转换&#xff0c;存的是什么&#xff…

优选算法合集————双指针(专题二)

好久都没给大家带来算法专题啦&#xff0c;今天给大家带来滑动窗口专题的训练 题目一&#xff1a;长度最小的子数组 题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …

本地Ollama部署DeepSeek R1模型接入Word

目录 1.本地部署DeepSeek-R1模型 2.接入Word 3.效果演示 4.问题反馈 上一篇文章办公新利器&#xff1a;DeepSeekWord&#xff0c;让你的工作更高效-CSDN博客https://blog.csdn.net/qq_63708623/article/details/145418457?spm1001.2014.3001.5501https://blog.csdn.net/qq…

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…

文字加持:让 OpenCV 轻松在图像中插上文字

前言 在很多图像处理任务中,我们不仅需要提取图像信息,还希望在图像上加上一些文字,或是标注,或是动态展示。正如在一幅画上添加一个标语,或者在一个视频上加上动态字幕,cv2.putText 就是这个“文字魔术师”,它能让我们的图像从“沉默寡言”变得生动有趣。 今天,我们…

wsl+phpstorm+xdebug|windows子系统配置phpstorm开发调试|断点调试

安装wsl 安装apache php 安装xdebug扩展&#xff0c;并配置 这里是通过宝塔9.4面板安装的xdebug3.0 [xdebug] xdebug.modedebug xdebug.start_with_requesttrue xdebug.discover_client_hosttrue xdebug.client_host127.0.0.1配置PHPSTORM 注意&#xff1a;新建服务器一定要…

5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术

文章目录 前言一、Vue框架&#xff08;简化DOM操作的一个前端框架&#xff09;&#xff1a;基础入门1 Vue基本概念2 快速入门&#xff1a;创建Vue实例&#xff0c;初始化渲染&#xff08;1&#xff09;创建一个入门Vue实例&#xff08;2&#xff09;插值表达式&#xff1a;{{表…

语言月赛 202412【顽强拼搏奖的四种发法】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 顽强拼搏奖的四种发法 题目描述 在 XCPC 竞赛里&#xff0c;会有若干道题目&#xff0c;一支队伍可以对每道题目提交若干次。我们称一支队伍对一道题目的一次提交是有效的&#xff0c;当且仅当&#xff1a; 在本次提交…

nodejs:express + js-mdict 网页查询英汉词典,能播放声音

向 DeepSeek R1 提问&#xff1a; 我想写一个Web 前端网页&#xff0c;后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1a; mydict-app/ ├── public/ │ ├── index.html │ ├── st…

使用Pygame制作“太空侵略者”游戏

1. 前言 在 2D 游戏开发中&#xff0c;“太空侵略者”是一款入门难度适中、却能覆盖多种常见游戏机制的项目&#xff1a; 玩家控制飞船&#xff08;Player&#xff09;左右移动&#xff0c;发射子弹。敌人&#xff08;Enemy&#xff09;排列成一行或多行&#xff0c;从屏幕顶…

Linux find 命令 | grep 命令 | 查找 / 列出文件或目录路径 | 示例

注&#xff1a;本文为 “Linux find 命令 | grep 命令使用” 相关文章合辑。 未整理去重。 如何在 Linux 中查找文件 作者&#xff1a; Lewis Cowles 译者&#xff1a; LCTT geekpi | 2018-04-28 07:09 使用简单的命令在 Linux 下基于类型、内容等快速查找文件。 如果你是 W…

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。优点是跨平台&#xff0c;指令集小&#xff0c;编译器容易实现&#xff0c;缺点是性能下降&#xff0c;实现同样的功能需要更多…

排序算法与查找算法

1.十大经典排序算法 我们希望数据以一种有序的形式组织起来&#xff0c;无序的数据我们要尽量将其变得有序 一般说来有10种比较经典的排序算法 简单记忆为Miss D----D小姐 时间复杂度 &#xff1a;红色<绿色<蓝色 空间复杂度&#xff1a;圆越大越占空间 稳定性&…

Spring理论知识(Ⅴ)——Spring Web模块

Spring的组成 Spring由20个核心依赖组成&#xff0c;这20个核心依赖可以分为6个核心模块 Spring Web模块简介 众所周知&#xff0c;Java目前最大的一个用途就是作为Web应用的服务端&#xff08;Java Web&#xff09; Spring又是JavaEE中使用最广泛的开发框架&#xff0…

(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例

&#xff08;1&#xff09; 先介绍下后面的代码里要用到的基础函数&#xff1a; 以及&#xff1a; &#xff08;2&#xff09; 接着给出现代版的 读写 socket 参数的系统函数 &#xff1a; 以及&#xff1a; &#xff08;3&#xff09; 给出 一言的 范例代码&#xff0c;获取…

车载软件架构 --- 软件定义汽车面向服务架构的应用迁移

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外&#xff0c;大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙&#xff0c;固件无法达到目前最高版本7.6&#xff0c;这里以最常用的60E为例&#xff0c;演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多&#xff0c;文章分上、下…

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…

OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境

以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤&#xff0c;通常可以使用流复制&#xff08;Streaming Replication&#xff09;或基于Patroni等工具来实现高可用&#xff0c;以下以流复制为例&#xff1a; 安装PostgreSQL 配置软件源&#xff1a;可以使用O…