- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私、安全和专有风险。在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式,在预训练教师网络指导下实时训练生成对抗网络来合成一个大规模的样本集用于知识蒸馏。论文重新审视了这种常见的无数据知识蒸馏范式,表明通过“小规模逆向数据进行知识蒸馏”的视角,整体训练效率有相当大的提升空间。根据三个经验观察结果,这些观察结果表明在数据逆向和蒸馏过程中平衡类别分布在合成样本多样性和难度上的重要性,论文提出了小规模无数据知识蒸馏(SSD-KD)。在形式化上,SSD-KD引入了一个调节函数来平衡合成样本,并引入了一个优先采样函数来选择合适的样本,通过动态回放缓冲区和强化学习策略进行辅助。SSD-KD可以在极小规模的合成样本(例如,比原始训练数据规模小10 \(\times\) )条件下进行蒸馏训练,使得整体训练效率比许多主流方法快一个或两个数量级,同时保持卓越或竞争性的模型性能,这一点在流行的图像分类和语义分割基准上得到了验证.
来源:晓飞的算法工程笔记 公众号,转载请注明出处 。
论文: Small Scale Data-Free Knowledge Distillation 。
对于资源受限设备上的计算机视觉应用,如何学习便携的神经网络同时保持满意的预测准确性是关键问题。知识蒸馏(KD)利用预训练的大型教师网络的信息来促进在相同训练数据上的较小目标学生网络的训练,已经成为一种主流解决方案。传统的KD方法假设原始训练数据始终可用。然而,由于潜在的隐私、安全、专有或数据规模等问题,实际中通常无法访问教师网络训练时使用的源数据集。为了解决训练数据的限制,数据无关的知识蒸馏最近引起了越来越多的关注.
数据无关知识蒸馏(D-KD)的基本思想是基于预训练的教师网络构建合成样本进行知识蒸馏,这些合成样本应当匹配原始训练数据的潜在分布。现有的顶级D-KD方法通常采用对抗性反演和蒸馏范式.
然而,对抗性D-KD方法通常需要生成大量的合成样本(与原始训练数据集的规模相比),以确保可信的知识蒸馏。这给训练资源消耗带来了沉重负担,抑制了其在实际应用中的使用。在最近的一项工作中,作者提出了一种有效的元学习策略,该策略寻找共同特征并将其作为初始先验以减少生成器收敛所需的迭代步骤。尽管可以实现更快的数据合成,但仍然需要生成足够多的合成样本以确保有效的知识蒸馏。这忽略了后续知识蒸馏过程的效率,成为整体训练效率的主要瓶颈。总而言之,目前尚未有研究工作通过共同考虑数据反演和知识蒸馏过程来提高D-KD的整体训练效率.
为了弥补这一关键差距,论文提出首个完全高效的D-KD方法,即小规模无数据知识蒸馏(SSD-KD)。从一种新颖的“小数据规模”视角出发,提高了对抗反演和蒸馏范式的整体训练效率。在这项工作中,“数据规模”指的是在一个训练周期内用于知识蒸馏的总反演样本数量.
SSD-KD的提出主要源于三个观察的启发.
首先,论文观察到,当在不同的教师-学生网络对上将合成样本和原始样本的数据规模显著缩减到相同水平(例如,源训练数据集大小的10%)时,训练于合成样本的学生网络相比于训练于原始样本的对应网络显示出更好的性能,如图1所示。需要注意的是,合成样本是在全源数据集上预训练的教师网络的指导下生成的,这自然反映了原始数据分布的不同视角。在足够小的数据规模下,这使得合成样本在拟合整个源数据集的基础分布方面优于原始样本。这一启发性的观察表明,如果能够构建一个小规模的高质量合成样本集,将创造出一种通向完全高效D-KD的有希望的方法。从原则上讲,论文认为一个高质量的小规模合成数据集应该在合成样本的多样性和难度方面具有良好的类别分布平衡.
然而,论文其他两个观察表明,现有的D-KD方法,包括传统的和最有效的设计,都没有在小数据规模下平衡上述两个方面的类别分布的良好能力,如图2所示。需要注意的是,已经存在一些D-KD方法来增强合成样本的多样性,但合成样本在样本难度方面的多样性尚未被探讨.
基于上述观察和分析,论文提出了SSD-KD,引入了两个相互依赖的模块以显著提高主要的对抗性反演和蒸馏范式的整体训练效率。SSD-KD的第一个模块依赖于一种新颖的调制函数,该函数定义了一个多样性感知项和一个难度感知项,以明确的方式共同平衡合成样本在数据合成和知识蒸馏过程中的类别分布。第二个模块定义了一种新颖的优先采样函数,这一函数通过强化学习策略来实现,从候选样本中选择少量适当的合成样本,这些样本存储在一个动态重放缓冲区中用于知识蒸馏,从而进一步提高端到端的训练效率。得益于这两个模块,SSD-KD具有两个吸引人的优点。一方面,SSD-KD可以在极小规模的合成样本(比原始训练数据规模小10倍)上进行蒸馏训练,使得整体训练效率比许多主流的D-KD方法快一个或两个数量级,同时保持竞争力的模型性能。另一方面,SSD-KD在学生模型准确性方面获得了大幅度的提升,并且在将合成样本的数据规模放宽到相对较大的数量时(仍然小于现有D-KD方法的规模)保持了整体训练效率.
设 \({f_t(\cdot;\theta_t)}\) 为一个在原始任务数据集上预训练的教师模型,而该数据集现在已不可访问。D-KD的目标是首先通过反演教师模型学到的数据分布信息来构建一组合成训练样本 \(x\) ,然后在这些样本上训练一个目标学生模型 \({f_s(\cdot;\theta_s)}\) ,迫使学生模型模拟教师的功能。现有的D-KD方法大多使用生成对抗网络 \(g(;\theta_g)\) 来生成合成训练样本 \(x=g(z;\theta_g)\) ,其中 \(z\) 为潜在噪声输入,该生成对抗网络的训练是通过将教师模型作为鉴别器来进行的.
D-KD的优化包含一个常见的蒸馏正则化项,用于最小化教师-学生模型之间的功能差异 \(\mathcal{L}_{\text{KD}}({x})=D_\text{KD}(f_t(x; \theta_t)\| f_s(x; \theta_s))\) ,该差异基于KL散度。此外,还包含一个任务导向的正则化项 \(\mathcal{L}_{\text{Task}}({x})\) ,例如,使用教师模型的预测作为真实标签的交叉熵损失。除此之外,由于D-KD主要基于教师模型经过预训练后能够捕捉源训练数据分布的假设,近年来的D-KD方法引入了额外的损失项,以正则化数据反演过程中训练数据分布的统计量(批量归一化(BN)参数).
其中, \(\mu_l(\cdot)\) 和 \(\sigma_l(\cdot)\) 分别表示第 \(l\) 层特征图的批量均值和方差估计; \(\mathbb{E}(\cdot)\) 对批量归一化(BN)统计量的期望可以通过运行均值或方差进行近似替代.
D-KD的有效性在很大程度上依赖于从利用预训练教师模型知识反演得到的合成样本的质量。现行的对抗性D-KD范式包含两个过程,即数据反演和知识蒸馏。从效率和效果两个角度来看,一方面,数据反演过程在很大程度上影响学生模型的优化性能;另一方面,知识蒸馏的训练时间成本成为D-KD整体训练效率的一个重要限制因素.
SSD-KD专注于通过“用于知识蒸馏的小规模反演数据”这一视角来改进对抗性D-KD范式,着重于利用预训练教师模型和知识蒸馏过程的反馈来指导数据反演过程,从而显著加快整体训练效率。根据前述中的符号,SSD-KD的优化目标定义为 。
其中, 。
采用了一种多样性感知的调制函数 \(\phi(x)\) ,该函数根据教师模型对每个合成样本的预测类别分配不同的优先级.
在BN估计的约束下,通过 \(\phi(x)\) 鼓励生成器尽可能探索对教师模型来说更具挑战性的合成样本.
不采用随机采样策略来选择样本进行知识蒸馏,而是采用重加权策略来控制采样过程。符号 \(\circ\) 来表示应用基于优先级采样函数 \(\delta\) .
每个合成样本不仅由其调制函数 \(\phi(x)\) 进行优先级排序,而且在采样阶段还会重新加权,该阶段重用了与 \(\phi(x)\) 相同的中间值.
虽然D-KD流水线允许合成训练样本并用于在同一任务上训练学生模型,但存在大量数据冗余,这妨碍了D-KD方法的训练效率。SSD-KD是一种完全高效的D-KD方法,能够使用极小规模的合成数据,同时与现有的D-KD方法相比,达到具有竞争力的性能.
SSD-KD的流程总结在算法1中,现有对抗性D-KD方法的优化流程(包括传统家族和更高效家族)与我们的SSD-KD的比较如图3所示.
图2展示了D-KD中由于合成数据的大量不平衡导致的数据冗余。右侧两个子图描绘了教师模型预测的类别分布,显示了数据类别的显著不平衡,而左侧两个子图展示了不同预测难度下的样本数量(难度通过教师模型预测的概率来衡量)。对于D-KD来说,这表明仅仅根据教师-学生差异来生成样本会导致样本难度分布非常不均,并倾向于获得容易预测的数据样本。对于数据样本全部合成的D-KD任务,数据生成过程需要同时考虑教师-学生差异和教师自身的预训练知识,基于此,SSD-KD提出了考虑多样性和难度的数据合成方法.
首先在数据反演过程中解决样本难度不平衡的问题。具体来说,维护一个回放缓冲区 \(\mathcal{B}\) ,它存储一定数量(记作 \(|\mathcal{B}|\) )的合成数据样本。对于 \(\mathcal{B}\) 中的每个数据样本 \(x\) ,惩罚与 \(x\) 共享相同预测类别(由教师模型预测)的样本总量。为实现这一点,采用了一个考虑多样性的平衡项,该项鼓励生成器合成具有不常见类别的样本.
借鉴在对象检测领域中使用焦点损失来处理高度不平衡样本的经验,进一步对每个样本 \(x\) 引入了一个基于预测概率 \(p_T(x)\) 的难度感知平衡项。在这里,困难的合成样本被认为是那些由教师模型预测信心较低的样本,这些样本会受到难度感知平衡项的鼓励.
总之,论文引入了一个调节函数 \(\phi(x)\) 来根据来自预训练教师模型的预测反馈调整生成器的优化。 \(\phi(x)\) 旨在平衡类别分布,并动态地区分容易和困难的合成样本,从而使容易的样本不会过度主导蒸馏过程。形式上,对于合成数据样本 \(x\in\mathcal{B}\) ,其调节函数 \(\phi(x)\) 的计算公式为 。
其中, \(c_T(x)\) 和 \(p_T(x)\) 分别指代预训练教师模型预测的类别索引和概率(或置信度); \(\mathbb{I}_{c_T(x')=c_T(x)}\) 表示一个指示函数,如果 \(x'\) 的预测类别与 \(x\) 相同,则该函数等于 \(1\) ,否则为 \(0\) ; \(\gamma\) 是一个超参数.
强调调节函数 \(\phi(x)\) 的两个特性:
尽管公式表明调节函数 \(\phi(x)\) 的值部分由当前的重放缓冲区 \(\mathcal{B}\) 决定,但需要注意的是, \(\mathcal{B}\) 是动态变化的,并且也受到 \(\phi(x)\) 的影响。这是因为公式中的项 \(\phi(x)\mathcal{L}_{\text{Task}}({x})\) 直接优化了生成器,该生成器合成数据样本以组成 \(\mathcal{B}\) 。从这个意义上说,考虑到 \(\mathcal{B}\) 和 \(\phi(x)\) 的相互影响,在训练过程中保持了类别多样性的平衡。在数据逆向过程中,平衡数据样本的类别尤为重要.
如图2所示,借助这两个平衡项,SSD-KD在样本类别和难度方面生成了温和的样本分布.
原始的优先经验重放方法更频繁地重用重要知识的转移,从而提高学习效率。与此不同的是,论文的优先采样方法并不从环境中获得奖励,而是设计为适应无数据的知识蒸馏并从框架自身获取反馈。换句话说,优先采样方法在无数据知识蒸馏方法中扮演了相反的角色:它专注于训练一小部分高度优先的样本,而不是均匀采样,从而加速训练过程.
从当前的重放缓冲区 \(\mathcal{B}\) 中采样合成数据 \(x\) ,论文提出了一种名为优先采样(Priority Sampling, PS)的采样策略来调节采样概率,而不是均匀采样。PS的基本功能是衡量 \(\mathcal{B}\) 中每个样本 \(x\) 的重要性,因此引入了优先采样函数 \(\delta_{i}(x)\) .
\(KL\) 表示softmax输出 \(f_t(x;\theta_t)\) 和 \(f_s(x;\theta_s)\) 之间的KL散度; \(\theta_t\) 和 \(\theta_s\) 依赖于训练步骤 \(i\) ; \(w_{i}(x)\) 是用于归一化 \(\mathcal{B}\) 中样本的校准项,如下面的公式所形式化,特别地,当 \(i=0\) 时, \(w_{-1}(x)=1\) .
使用随机更新进行知识蒸馏的训练,依赖于这些更新与其期望值具有相同的分布。优先采样数据会引入偏差,因为它可能会改变数据分布,从而影响估计值所收敛的解。因此,通过引入一个重要性采样(Importance Sampling, IS)权重 \(w_i(x)\) 来校正这种偏差,用于数据样本 \(x\) :
其中 \(\beta\) 是一个超参数; \(P_{i}(x)\) 是定义为的采样过渡概率 。
其中 \(\epsilon\) 是一个小的正数,用于防止在优先级为零时转移不被选择的极端情况.
优先采样函数 \(\delta(x)\) 具有两个显著特性:
delta
值的增加, \(\delta(x)\) 反映了当前 \(\mathcal{B}\) 中合成样本的教师模型与学生模型之间的更大信息差异。因此,学生模型应从信息差异更大的样本中进行优化,这有助于更快地获取教师模型。
如果本文对你有帮助,麻烦点个赞或在看呗~ 更多内容请关注 微信公众号【晓飞的算法工程笔记】 。
最后此篇关于SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究|CVPR'24的文章就讲到这里了,如果你想了解更多关于SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究|CVPR'24的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我计划使用 python 开发一个 Web/云应用程序,它执行以下操作, 1.上传Perl/Python抓取脚本并执行。 2. 上传脚本以按计划运行。 3. 使用不同的输入参数运行同一脚本的多个实例。
我正在开发一个应用程序,我想实现一个功能,可以在相同的用户设备之间共享,比方说,收藏夹、书签等。所以,我想实现类似 iCloud 的东西。 我想到了 2 个可能的想法:Backup Manager 和
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试从一系列短语中使一个单词云成为一个词云,而不是从单个单词中重复很多短语。我的数据看起来像这样,数据框的一列是短语列表。 df$names <- c("John", "John", "Jose
对于配置AWS服务(EC2/R53/VPC/S3/..),Terraform等技术在执行回滚、错误处理等方面的方法不可靠。 AWS CloudFormation 模板解决了这些问题。 CloudFor
我无法使用我的 Azure 帐户执行任何操作,例如创建服务器或数据库或任何操作。看起来这一切都围绕着我无法创建的资源组>我收到此错误: 这特别困难,因为我什至无法使用云外壳,因为我得到了这个:请求 C
是否有在客户端使用 socket.io 的云/托管推送系统?据我所知,没有一个系统使用 socket.io AFAIK: http://beaconpush.com/ http://pusher.co
有没有办法在我的计算机上本地运行 RStudio,但使用运行 R 作为引擎的远程计算机而不是本地 R 安装? 需要明确的是,我知道可以将 RStudio 服务器与 Web GUI 一起使用,但我问的是
我正在寻找在这种情况下可以使用的合适服务: 在视频模式下打开相机并将其流式传输到 azure 云。 并从另一方聆听(也包括客户)。 我读到了有关 Azure 媒体服务的信息。 但根据this我知道客户
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: Google App Engine, getting started 如何将 Java 应用程序部署到 Google
我有一个用 Java 7 编写的相当大的控制台应用程序,它管理大量的订单处理。 该应用程序使用大量订单 Web 服务、与数据库交互并将数据插入 ERP 系统。该应用程序的要求没有指定用户交互,因此在项
我已经阅读过有关 Windows Azure 的内容,但为了深入了解这项技术,我(显然)需要使用它。我有一个小型 ASP.NET 网站,流量很少,我认为在 Azure 上托管该网站会节省我的钱。除此之
我的 Activity 中有 3 个编辑文本(姓名、手机号码、职业)和一个按钮(保存)。每次用户单击按钮时,我都想将这三个数据保存到 Parse-cloud。然后新 Activity 在 imagev
我正在尝试通过node.js 将传感器数据发送到artik cloud。 (使用网络套接字和串行端口)。但它发送空。有人知道原因吗?我刚刚复制了教程中的代码,因此没有语法错误。 var webSock
我对 docker hub 和 docker cloud 有一点困惑。我有需要安装在客户端服务器中并运行容器的 docker 镜像。我相信这可以使用 docker hub 来完成,它允许在我的私有(p
晋城,华夏文化发祥地之一。两万年前留下高都遗址、塔水河、下川等人类遗址,女娲补天、愚公移山等神话传说,如今在云上有了崭新的魅力。 9月3日,阿里云数字中国行•晋城峰会期间,晋城市人民政府公布了
我刚开始使用 Airflow 插件,有点困惑。 我在 GCP (composer-1.13.4-airflow-1.10.12) 上使用 Cloud Composer 作为托管服务运行它 我按照文档编
据我所知,PHP 分析工具 XDebug 将其结果保存到文件中。然而,当应用程序运行在云分布式环境中时,处理此类文件是很困难的。处理这种情况的最佳做法是什么? XDebug 中是否有任何方法(最好是可
我们正在将 PHP 网站迁移到 Azure 云 Web 服务(Web 角色)。 目前,该网站通过驱动器盘符访问将用户提交的图像文件保存到文件系统。然后通过 URL 提供这些图像,例如content.e
我是一名优秀的程序员,十分优秀!