可以参考2021的另一篇解决相似问题的文章(Learning_Student_Networks_in_the_Wild)
data-free知识蒸馏(DFKD)由于其仅使用人造合成数据压缩模型的能力,近年来越来越受到研究界的关注。尽管取得了令人鼓舞的成果,但最先进的DFKD方法仍然存在数据合成效率低下的问题,这使得无数据训练过程非常耗时,因此不适用于大规模任务。在这项工作中,我们介绍了一种有效的方案,称为FastDFKD,它允许我们将DFKD加速一个数量级。我们方法的核心是一种新的策略,即重用训练数据中的共享公共特征,从而合成不同的数据实例。与之前独立优化一组数据的方法不同,我们建议学习一个元合成器,它寻找共同的特征作为快速数据合成的初始化。因此,FastDFKD只需几步就能实现数据合成,显著提高了无数据训练的效率。在CIFAR、NYV2和ImageNet上的实验表明,所提出的FastDFKD实现了10×甚至100×加速,同时保持了性能上的先进水平。代码在https://github.com/zju-vipa/Fast-Datafree.
最近,知识蒸馏(KD)已经成为一种流行的范例,可以重用如今流行于网络上的预训练模型。KD的目标是通过模仿经过培训的教师的行为来训练一个紧凑的学生模型,以便进行有效的推理(Hinton、Vinyals和Dean 2015;Yang等人2020;Fang等人2021a)。KD的传统设置要求拥有原始训练数据作为输入,以便训练学生。不幸的是,由于保密或版权原因,在许多情况下,原始数据无法发布,用户只能使用预先训练过的模型(Kolesnikov等人,2020年;Shen等人,2019年;Ye等人,2019年),这反过来又对将KD应用于更广泛的领域造成了重大障碍 。
为了解决这个问题,提出了无数据知识提取(DFKD)方法,假设根本无法访问训练数据(Lopes、Fenu和Starner 2017), 由于对训练数据的限制非常宽松,DFKD受到研究界越来越多的关注,包括计算机视觉(Chen et al.2019)、自然语言处理(Ma et al.2020)和图形学习(Deng和Zhang 2021)。通常,DKFD遵循一种通过生成来提取的范式,在这种范式中,合成数据集通常是通过“反转”预先培训过的教师来进行培训的(Yin等人,2019年)。为了学习一个可比较的学生模型,合成集应该包含足够的样本,以便教师能够全面地传授知识。因此,这对DFKD构成了重大挑战,因为合成大规模数据集不可避免地非常耗时,尤其是对于像ImageNet识别(Yin等人2019)和COCO检测(Chawla等人2021)这样的复杂任务。
在本文中,我们引入了一种新的方法,称为FastDFKD,以加速数据合成过程,从而使无数据知识提取更适用于大规模任务。我们的动机源于这样一个事实:来自同一领域的数据实例通常共享一些公共特征,因此这些共享特征应该被显式地用于数据合成。例如,“毛发”的纹理可能经常出现在动物数据集中,因此可以重复使用以创建不同的实例。不幸的是,现有的DFKD方法主要集中于独立合成样本,事实上,现有的DFKD方法都没有探索利用特征共享,这使得DFKD过程非常繁琐。
另一方面,所提出的FastDFKD方法表达性地探索了用于合成的样本之间的共同特征。FastDFKD遵循基于批次的数据合成策略(Yin等人2019;Fang等人2021b);然而,与之前独立合成不同样本的方法不同,FastDFKD专注于一个“学习合成”问题,在这个问题上,高效的合成器经过明确训练,可以捕捉快速适应的共同特征。公共特征共享的优点是,我们不需要为每个实例重复合成它们,这显著提高了合成效率。
具体而言,我们在Metal-Learning框架(Finn、Abbeel和Levine 2017)下开发了FastDFKD,旨在学习合成过程中的元生成器。FastDFKD包括两个优化循环:外循环和内循环。内部循环用于数据合成过程,其中通过调整和重新组织公共特征来创建一组样本。另一方面,外部循环使用内部循环的结果更新公共特性,以实现更好的元初始化。如图1所示,这样的元合成器在无数据蒸馏的情况下显著提高了数据合成的效率,同时保持了与现有技术相一致的性能。正如我们的实验所证明的那样,与现有技术相比,FastDFKD能够实现10倍的速度,在某些情况下甚至超过100倍的速度。
因此,我们的贡献是一种新的DFKD方案,称为FastDFKD,它允许我们通过公共特征重用显著加速无数据训练。在CIFAR、ImageNet和NYUv2数据集上的实验结果表明,FastDFKD的性能与最新技术相当,同时与现有方法相比,其加速系数为10,有时甚至超过100。
图1:CIFAR-100数据集上学生模型与GPU数据合成小时数的准确性(%)。我们的方法,称为“快”,达到了10×100×加速度和性能与现有方法席上。
无数据知识蒸馏:无数据知识提取的目的是从预先训练的教师模型中训练出一个紧凑的学生模型,而不需要访问原始的训练数据。它通常遵循一种通过生成提取的范例,在这种范例中,一个虚假的数据集将被合成并用于学生培训。在文献中,Lopes等人提出了第一种无数据的知识提取方法,该方法利用原始训练数据的统计信息在知识提取过程中重建合成集(Lopes、Fenu和Starner 2017)。这项开创性的工作催生了几部作品,在检测(Chawla等人2021年)、分割(方等人2019年)、文本分类(马等人2020年)、图形分类(邓和张2021年)和联合学习(朱、洪和周2021年)等多项任务上取得了令人印象深刻的进步。尽管取得了令人印象深刻的进展,但DFKD中仍然存在一个令人烦恼的问题,即数据合成效率低下,这使得无数据训练非常耗时。例如,(Luo等人,2020年)训练1000个生成器压缩ImageNet预训练的ResNet-50,以及(Yin等人,2019年)优化大量小批量数据合成。在这项工作中,我们重点研究了这个尚未得到充分研究的问题,即DFKD的效率,并提出了第一种加速无数据训练的方法。
元学习:元学习是一种流行的少镜头学习框架(Hospedales et al.2020),它遵循“learning to learn”范式,为目标任务找到一个有用的初始化。在各种元学习算法中,MAML是最具影响力的方法之一,因为它在多个基准测试中取得了令人印象深刻的结果(Finn、Abbeel和Levine 2017;Nichol、Achiam和Schulman 2018)。作为一种基于优化的元学习方法,MAML引入了两个优化循环来处理一组相关的任务:一个用于任务学习的内循环和一个用于训练meta-learner的外循环。内部和外部循环经过协作培训,以找到可以快速适应不同任务的元初始化,其中跨任务的一些一般知识由meta-learner获取(Finn、Abbeel和Levine 2017)。受元学习“learning to learn”范式的启发,我们开发了一种快速方法来训练DFKD问题的元合成器,该方法可以快速适应快速数据合成。
问题设置
给定一个教师模型ft(x;θt),在一个标记但不可访问的训练集上预先训练Dt=Σni{(xi,yi)|xi∈X,yi∈ Y}(参考: ),无数据知识蒸馏(DFKD)的目标是通过反转预先训练的模型的N个样本构建一个合成数据集D=Σni{xi|xi∈X} ,可以通过模仿教师的行为来训练可比较的学生模型fs(X;θs)。通常,D的合成由预先训练的反转loss驱动L:X→ R、 根据预培训教师模型中的一些统计信息,这表明输入样本x是否来自培训领域(Yin等人,2019年)。因此,单个数据点x的优化可以形式化如下:
为了获得大小为N的完整合成集D‘={x1,x2,…,xN},DFKD重复上述优化以构造一组样本,这将导致一系列方程1形式的优化问题。值得注意的是,不同实例xi的损失函数,表示为Li,可以是不同的,因此可以构造多样的数据集D来从教师那里获取全面的知识。为此,我们考虑DFKD的一个广义数据合成问题,它利用一组反转 loss:L= {L1,L2,…,LN}来处理合成数据集,如下:
在DFKD中,求解方程2的一种常用方法是以一批一批的方式直接优化不同的样本(Yin等人2019;Fang等人2019;Chawla等人2021)。如图2(a)所示,基于批处理的方法合成不同的独立的实例,只考虑样本之间的关系。尽管取得了令人鼓舞的结果,但DFKD方法通常存在数据合成效率低下的问题,因为制作大规模数据集需要解决方程1中的大量优化问题,每个问题都需要数千步才能收敛(Yin等人,2019年)。通常,来自同一领域的数据可能共享一些共同的特征,这些特征可以被重用以合成不同的样本。在这项工作中,我们提出了FastDFKD,这是一种新的、有效的学习共同特征的方法,可以加速方程2的优化。
图2:提出的元特征重用图,以及它与其他合成策略的区别。(a) 数据实例独立合成,无需特征重用;(b) 数据实例是按顺序合成的,重复使用以前的结果作为初始化。(c) 建议的公共特征重用学习元生成器以实现快速自适应。
无数据知识蒸馏
综述:我们提出的方法的核心是重用公共特征。我们的动机源于这样一个事实:来自同一领域的数据通常共享一些可重用的模式,这些模式可以被重用以合成不同的实例。以下各节从生成的角度为公共特征开发了一个新的定义,并建议FastDFKD通过元学习过程捕捉公共特征以进行快速合成。
相同特征:作为实现快速无数据训练的关键步骤,需要明确定义公共特征,以构建网络训练的优化目标。如图2(b)所示,一种简单的重用策略是顺序特征重用,在之前的合成中学习到的特征直接用作初始化来制作新样本。然而,这样一个简单的方案会有问题,因为学习到的特征只来自一个数据点,这可能并不总是可用于其他样本。为了解决这个问题,我们从生成的角度对公共特征进行了更自然的定义。让我们考虑生成码G(z;θ),它具有潜(latent)代码Z和可训练参数θ,满足每个样本xi∈ D’,可以发现潜代码Zi生成xi= G(Zi;θ)。生成器描述了不同实例xi的生成过程。在某种程度上,一组样本D’={x1,x2,…,xN}之间是否存在共同特征通常与不同数据实例的相似性高度相关,这意味着如果我们能够找到使不同样本的代码z={z1,z2,…,zN}在潜在空间中接近的最佳参数θ,生成器可以隐式捕获共同特征。基于此,可以通过解决以下问题来学习共同特征:
其中dz和dx指latent空间和输入空间中的距离度量。上述优化旨在找到数据集D’的生成过程,该数据集在潜在latent空间中的z距离尽可能小,这样,通过学习到的公共特征,可以通过在潜在代码z中导航有效地获得不同的样本。然而,在无数据设置下,合成数据集D‘在我们合成它之前是不可用的。因此,我们用DFKD的反演损失L替换等式3的dx上定义的第二项,这导致了公共特征学习的无数据目标:
然而,由于生成模型的容量有限,且GAN训练困难,学习一个完美的生成器来同时合成完整的合成集D’几乎是困难的(Luo等人,2020)。为了解决这个问题,我们对等式4做了一些放宽,并且不强制生成器G捕获整个数据集的所有特征。相反,我们训练了一个生成器,允许快速适应k步梯度下降中的不同样本,这自然会导致元学习问题。
元生成器:等式4很难优化,因为它需要用一个生成网络生成完整的数据集D‘,包括许多不可重用的特性。相反,我们可以训练一个只包含公共特征的生成器,并为数据合成过程动态合成其他缺失的特征,如图2(c)所示。具体而言,我们放松了公共特征学习的目标,以训练一个轻量级生成器,该生成器可以适应在k-step中合成不同的实例,形式化为元学习问题:
其中是元学习的内循环,它指的是从θ的估计值和代码Z^初始化的k步优化,用于合成XI。内部循环可以展开,如下所示:
值得注意的是,等式5的作用与等式4中的公共特征损失类似。内环,即k步自适应,旨在通过显式优化等式4的第二项来学习用于合成的生成器。另一方面,外循环试图通过隐式优化等式4的第一项,使不同的样本在k步优化中可达。
优化:优化方程6自然会导致元学习问题,需要一个有用的初始化(ˆz,ˆθ)来快速适应。经过k步梯度下降,我们得到了一组新的参数,在损失函数Li的指导下,它提供了梯度θ,如下所示:
其中θ∗ = U kLi(ˆz;ˆθ)指使用等式6的k步自适应的优化结果,x∗i=G(z*i;θ∗i)=G(U kLi(ˆz;ˆθ))是指在损失Li指导下的合成结果。然而,请注意,等式6中的k步自适应涉及k梯度更新:
式中,gk指在等式6的第k步计算的梯度,这将高阶梯度引入生成器训练,并使反向传播非常低效。受元学习领域先前工作(Nichol、Achiam和Schulman 2018)的启发,我们应用一阶近似来进一步加速梯度计算,将3中的高阶梯度视为常数,并用恒等式映射替换U’i(ˆθ)。在这种情况下,方程式7中的梯度计算仅涉及一阶梯度,可简化如下:
一阶近似直接使用内部循环中自适应生成器上计算的梯度来更新元生成器。此外,还有一种更有效的梯度近似,称为爬行动物(Nichol、Achiam和Schulman 2018),可以通过使用自适应生成器和元生成器之间的参数差近似等式9中的梯度来实现,这进一步将等式9简化为 :
综上所述,元生成器的优化如下所示:
方法总结
算法1总结了该方法,包括三个阶段:1)数据合成的k步自适应;2) 共同特征学习的元学习步骤;3) 通过优化如下式的KL偏差来更新学生模型的一些KD步骤:
其中B是从合成集合D’中取样的小批量。该方法允许较小的k值进行数据合成,显著提高了DFKD的效率。
见原文