万字综述 | 一文读懂知识蒸馏_多师生架构-程序员宅基地

技术标签: 知识蒸馏  综述  

本文梳理了用于简单分类任务的各种知识蒸馏(KD)策略,并实现了一系列经典的知识蒸馏技术。

  • 知识蒸馏论文综述: Knowledge Distillation: A Survey
  • 知识蒸馏论文分类: https://github.com/FLHonker/Awesome-Knowledge-Distillation

摘要

近年来,深度神经网络在工业界和学术界都取得了成功,尤其是在计算机视觉任务方面。深度学习的巨大成功主要归因于其可扩展性以编码大规模数据并操纵数十亿个模型参数。但是,将这些繁琐的深度模型部署在资源有限的设备(例如,移动电话和嵌入式设备)上是一个挑战,这不仅是因为计算复杂性高,而且还有庞大的存储需求。为此,已经开发了多种模型压缩和加速技术。作为模型压缩和加速的代表类型,知识蒸馏有效地从大型教师模型中学习小型学生模型。它已迅速受到业界的关注。本文从知识类别,训练框架,师生架构,蒸馏算法,性能比较和应用的角度对知识蒸馏进行了全面的调查。此外,简要概述了知识蒸馏中的挑战,并讨论和转发了对未来研究的评论。
综述的研究切入点

知识蒸馏简介

知识蒸馏,已经受到业界越来越多的关注。 大型深度模型在实践中往往会获得良好的性能,因为当考虑新数据时,过度参数化会提高泛化性能。 在知识蒸馏中,小模型(学生模型)通常是由一个大模型(教师模型)监督,算法的关键问题是如何从老师模型转换的知识传授给学生模型。 一个知识蒸馏系统由三个主要部分组成:知识,蒸馏算法,和师生架构

知识蒸馏框架

用于模型压缩的知识蒸馏类似于人类学习的方式。受此启发,最近的知识蒸馏方法已扩展到师生学习,相互学习,辅助教学,终身学习和自学。知识蒸馏的大多数扩展都集中在压缩深度神经网络上。由此产生的轻量级学生网络可以轻松部署在视觉识别,语音识别和自然语言处理(NLP)等应用程序中。此外,知识蒸馏中的知识从一种模型到另一种模型的转移可以扩展到其他任务,例如对抗攻击,数据增强,数据隐私和安全性。通过知识蒸馏的动机进行模型压缩,知识转移的思想已被进一步用于压缩训练数据,即数据集蒸馏,这将知识从大型数据集转移到小型数据集以减轻深度模型的训练负担

早期知识蒸馏框架通常包含一个或多个大型的预训练教师模型和小型的学生模型。教师模型通常比学生模型大得多。主要思想是在教师模型的指导下训练高效的学生模型以获得相当的准确性。来自教师模型的监督信号(通常称为教师模型学到的“知识”)可以帮助学生模型模仿教师模型的行为。
Hard targets vs. Soft targets

在典型的图像分类任务中,logit(例如深层神经网络中最后一层的输出)被用作教师模型中知识的载体,而训练数据样本未明确提供该模型。例如,猫的图像被错误地归类为狗的可能性非常低,但是这种错误的可能性仍然比将猫误认为汽车的可能性高很多倍。另一个示例是,手写数字2的图像与数字3相比,与数字7更相似。这种由教师模型学习的知识也称为暗知识(“dark knowledge”)

早期的知识蒸馏中转移 dark knowledge 的方法如下。 给定对数向量 z z z 作为深度模型的最后一个全连接层的输出,则 z i z_i zi 是第 i 类的对数,则输入属于第 i 类的概率 p i p_i pi 可以为 由softmax 函数估算:
p i = exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) p_{i}=\frac{\exp \left(z_{i}\right)}{\sum_{j} \exp \left(z_{j}\right)} pi=jexp(zj)exp(zi)

因此,通过教师模型获得的软目标的预测包含暗知识,并且可以用作监督者,以将知识从教师模型转移到学生模型。 同样,one-hot 标签也称为硬目标。关于软目标和硬目标的直观示例如图3所示。此外,引入温度因子T来控制每个软目标的重要性

p i = exp ⁡ ( z i / T ) ∑ j exp ⁡ ( z j / T ) p_{i}=\frac{\exp \left(z_{i} / T\right)}{\sum_{j} \exp \left(z_{j} / T\right)} pi=jexp(zj/T)exp(zi/T)

较高的温度会在各个类别上产生较弱的概率分布。 具体来说,当 T → ∞ T \rightarrow \infty T 时,所有类别都具有相同的概率。 当 T → 0 T \rightarrow 0 T0 时,软目标变为 one-hot 标记,即硬目标。教师模型提供的软目标(distillation loss)和ground-truth label提供的硬目标(student loss)对于提高学生模型的绩效都非常重要。

定义蒸馏损失以匹配教师模型和学生模型之间的 logits ,即:
L D ( p ( z t , T ) , p ( z s , T ) ) = ∑ i − p i ( z t i , T ) log ⁡ ( p i ( z s i , T ) ) L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)=\sum_{i}-p_{i}\left(z_{t i}, T\right) \log \left(p_{i}\left(z_{s i}, T\right)\right) LD(p(zt,T),p(zs,T))=ipi(zti,T)log(pi(zsi,T))

其中 z t z_t zt z s z_s zs 分别是教师和学生模型的logits。 教师模型的logits通过交叉熵梯度与学生模型的 logits 匹配, 然后可以将相对于 logit z s i z_{si} zsi 的梯度评估为:

∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i = p i ( z s i , T ) − p i ( z t i , T ) T = 1 T ( exp ⁡ ( z s i / T ) ∑ j exp ⁡ ( z s j / T ) − exp ⁡ ( z t i / T ) ∑ j exp ⁡ ( z t j / T ) ) \begin{array}{l} \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}}=\frac{p_{i}\left(z_{s i}, T\right)-p_{i}\left(z_{t i}, T\right)}{T} \\ =\frac{1}{T}\left(\frac{\exp \left(z_{s i} / T\right)}{\sum_{j} \exp \left(z_{s j} / T\right)}-\frac{\exp \left(z_{t i} / T\right)}{\sum_{j} \exp \left(z_{t j} / T\right)}\right) \end{array} zsiLD(p(zt,T),p(zs,T))=Tpi(zsi,T)pi(zti,T)=T1(jexp(zsj/T)exp(zsi/T)jexp(ztj/T)exp(zti/T))

如果温度 T 比 logits 高得多, ∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}} zsiLD(p(zt,T),p(zs,T)) 则可以根据其泰勒级数近似得出:

∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i = 1 T ( 1 + z s i T N + ∑ j z s j T − 1 + z t i T N + ∑ j z t j T ) . \begin{array}{l} \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}} \\ =\frac{1}{T}\left(\frac{1+\frac{z_{s i}}{T}}{N+\sum_{j} \frac{z_{s j}}{T}}-\frac{1+\frac{z_{t i}}{T}}{N+\sum_{j} \frac{z_{t j}}{T}}\right) . \end{array} zsiLD(p(zt,T),p(zs,T))=T1(N+jTzsj1+TzsiN+jTztj1+Tzti).

如果进一步假设每个转移训练样本的 logits 为零 (比如, ∑ j z s j = ∑ j z t j = 0 \sum_{j} z_{s j}=\sum_{j} z_{t j}=0 jzsj=jztj=0),则上式可以简化为:

∂ L D ( p ( z t , T ) , p ( z s , T ) ) ∂ z s i = 1 N T 2 ( z s i − z t i ) \frac{\partial L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)}{\partial z_{s i}}=\frac{1}{N T^{2}}\left(z_{s i}-z_{t i}\right) zsiLD(p(zt,T),p(zs,T))=NT21(zsizti)

因此,根据上式,在高温和零均值 logits 的情况下,蒸馏损失等于匹配教师模型和学生模型之间的 logit ,即最小化 ( z s i − z t i ) \left(z_{s i}-z_{t i}\right) (zsizti)。 因此,通过与高温匹配的 logit 进行蒸馏可以传达非常有用的知识信息,这些信息是由教师模型学到的以训练学生模型。

学生损失(student loss)定义为 ground truth 标签和学生模型的软对数之间的交叉熵:
L S ( y , p ( z s , T ) ) = L C E ( y , p ( z s , T ) ) L_{S}\left(y, p\left(z_{s}, T\right)\right)=\mathcal{L}_{C E}\left(y, p\left(z_{s}, T\right)\right) LS(y,p(zs,T))=LCE(y,p(zs,T))

这里, L C E ( y , p ( z s , T ) ) = ∑ i − y i log ⁡ ( p i ( z s i , T ) ) \mathcal{L}_{C E}\left(y, p\left(z_{s}, T\right)\right)=\sum_{i}-y_{i} \log \left(p_{i}\left(z_{s i}, T\right)\right) LCE(y,p(zs,T))=iyilog(pi(zsi,T))代表交叉熵损失,y 是一个 ground truth 向量,其中只有一个元素为1,它表示转移训练样本的 ground truth 标签,其他元素为0。在蒸馏和学生损失中,两者均使用学生模型的相同 logit,但温度不同。 温度在学生损失中为T = 1,在蒸馏损失中为T = t。 最后,传统知识蒸馏的基准模型是蒸馏和学生损失的结合:

L ( x , W ) = α ∗ L D ( p ( z t , T ) , p ( z s , T ) ) + ( 1 − α ) ∗ L S ( y , p ( z s , T ) ) \begin{aligned} L(x, W)=& \alpha * L_{D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right) \\ &+(1-\alpha) * L_{S}\left(y, p\left(z_{s}, T\right)\right) \end{aligned} L(x,W)=αLD(p(zt,T),p(zs,T))+(1α)LS(y,p(zs,T))

其中 x x x 是转移集上的训练输入, W W W 是学生模型的参数,并且是调节参数。 为了轻松理解知识蒸馏,下图显示了传统知识蒸馏与教师和学生模型联合的特定体系结构。在下图所示的知识蒸馏中,始终首先对教师模型进行预训练,然后再进行训练。 仅使用来自预训练教师模型的软目标的知识来训练学生模型。 实际上,这就是离线知识提炼与基于响应的知识。

Student Loss vs. Distillation Loss

知识

知识的三种形式

Response-Based Knowledge

基于响应的知识通常是指教师模型最后输出层的神经响应。主要思想是直接模仿教师模型的最终预测。基于响应的知识蒸馏简单但有效地进行了模型压缩,已被广泛用于不同的任务和应用中。最流行的基于响应的图像分类知识被称为软目标。基于响应的知识的蒸馏损失可以表示为

L Res ⁡ D ( p ( z t ) , p ( z s ) ) = L K L ( p ( z s ) , p ( z t ) ) L_{\operatorname{Res} D}\left(p\left(z_{t}\right), p\left(z_{s}\right)\right)=\mathcal{L}_{K L}\left(p\left(z_{s}\right), p\left(z_{t}\right)\right) LResD(p(zt),p(zs))=LKL(p(zs),p(zt))

其中 L K L \mathcal{L}_{K L} LKL表示Kullback-Leibler(KL)散度损失。典型的基于响应的KD模型如下图所示。基于响应的知识可用于不同类型的模型预测。例如,对象检测任务中的响应可能包含logit以及边界框的偏移量。在语义地标定位任务中,例如人体姿态估计,教师模型的响应可能包括每个地标的热图。最近,基于响应的知识得到了进一步的探索,以解决将地面标签信息作为条件目标的问题。

Response-Based Knowledge示意图

基于响应的知识的概念是简单易懂的,尤其是在“黑暗知识(dark knowledge)”的情况下。 从另一个角度看,软目标的有效性类似于标签平滑或正则化器。 但是,基于响应的知识通常依赖于最后一层的输出(例如,软目标),因此无法解决教师模型在监督,这对于使用非常深层神经网络的表示学习非常重要。由于 soft logits 实际上是类概率分布,因此基于响应的知识蒸馏也仅限于监督学习。

Feature-Based Knowledge

深度神经网络擅长通过增加抽象来学习多个级别的特征表示。这就是代表性学习。因此,最后一层的输出和中间层的输出,即特征图,都可以用作监督学生模型训练的知识。具体来说,来自中间层的基于特征的知识是基于响应的知识的良好扩展,尤其是对于更薄和更深的网络的训练而言。

中间表示法首先在 Fitnets 中引入,通过提供 hints,以改善学生模型的训练。主要思想是直接匹配老师和学生的特征激活。受此启发,已经提出了多种其他方法来间接匹配特征从原始特征图中得出了一个“注意图”来表达知识。 Huang和Wang(2017)使用神经元选择性转移对注意力图进行了概括。 Passalis和Tefas(2018)通过匹配特征空间中的概率分布来传递知识。为了更容易地转移教师知识,Kim等人。 (2018年)引入了所谓的“因素”,作为一种更易于理解的中间表示形式。为了缩小师生之间的绩效差距,Jin等人。 (2019)提出了路线约束式提示学习,该方法通过教师提示层的输出来监督学生。最近,Heo等。 (2019c)建议使用隐藏神经元的激活边界进行知识转移。有趣的是,教师模型中间层的参数共享以及基于响应的知识也可以被用作教师知识(Zhou et al。,2018)。

通常,基于特征的知识转移的蒸馏损失可以用公式表达为:

L F e a D ( f t ( x ) , f s ( x ) ) = L F ( Φ t ( f t ( x ) ) , Φ s ( f s ( x ) ) ) L_{F e a D}\left(f_{t}(x), f_{s}(x)\right)=\mathcal{L}_{F}\left(\Phi_{t}\left(f_{t}(x)\right), \Phi_{s}\left(f_{s}(x)\right)\right) LFeaD(ft(x),fs(x))=LF(Φt(ft(x)),Φs(fs(x)))

其中 f t ( x ) , f s f_{t}(x), f_{s} ft(x),fs 分别是教师模型和学生模型的中间层的特征图。转换函数 Φ t ( f t ( x ) ) , Φ s ( f s ( x ) ) \Phi_{t}\left(f_{t}(x)\right), \Phi_{s}\left(f_{s}(x)\right) Φt(ft(x)),Φs(fs(x)) 通常在教师和学生模型的特征图不是同一形状时应用。 L F ( . ) \mathcal{L}_{F}(.) LF(.) 表示用于匹配老师和学生模型的特征图的相似度函数。一个通用的基于特征的KD模型如下图所示。

Feature-Based Knowledge示意图

本文还从特征类型,源层和蒸馏损失的角度总结了不同类型的基于特征的知识,如下表所示。

Feature-Based Knowledge方法汇总

具体地说, L 2 ( . ) , L 1 ( . ) , L C E ( . ) , L M M D ( . ) \mathcal{L}_{2}(.), \mathcal{L}_{1}(.), \mathcal{L}_{CE}(.), \mathcal{L}_{MMD}(.) L2(.),L1(.),LCE(.),LMMD(.)分别表示l2-范数距离,l1-范数距离,交叉熵损失和最大平均差异损失。尽管基于特征的知识转移为学生模型的学习提供了有利的信息,但是如何有效地从教师模型中选择提示层和从学生模型中选择引导层仍然有待进一步研究。由于 hint 层和 guided 层的大小之间存在显着差异,因此还需要探索如何正确匹配教师和学生的特征表示

Relation-Based Knowledge

基于响应的知识和基于特征的知识都使用教师模型中特定层的输出。基于关系的知识进一步探索了不同层或数据样本之间的关系

为了探索不同特征图之间的关系,Yim等人。 (2017)提出了一种解决方案流程(FSP),该流程由两层之间的Gram矩阵定义。 FSP 矩阵总结了特征图对之间的关​​系。它是使用两层要素之间的内积来计算的。利用特征图之间的相关性作为蒸馏的知识,(Lee et al。,2018)提出了通过奇异值分解的知识蒸馏来提取特征图中的关键信息。为了利用多位教师的知识,Zhang和Peng(2018)分别以每个教师模型的 logits 和特征为节点,形成了两个图。具体来说,在知识转移之前,不同的教师的重要性和关系通过 logits 和表示图进行建模(Zhang and Peng,2018)。 Lee and Song(2019)提出了基于多头图的知识蒸馏。图知识是通过多头注意力网络在任意两个特征图之间的内部数据关系。为了探索成对的提示信息,学生模型还模拟了教师模型的成对的提示层之间的互信息(Passalis等,2020b)。通常,基于特征图的关系的知识的蒸馏损失可以表示为:
L Rel ⁡ D ( f t , f s ) = L R 1 ( Ψ t ( f ^ t , f ˇ t ) , Ψ s ( f ^ s , f ˇ s ) ) L_{\operatorname{Rel} D}\left(f_{t}, f_{s}\right)=\mathcal{L}_{R^{1}}\left(\Psi_{t}\left(\hat{f}_{t}, \check{f}_{t}\right), \Psi_{s}\left(\hat{f}_{s}, \check{f}_{s}\right)\right) LRelD(ft,fs)=LR1(Ψt(f^t,fˇt),Ψs(f^s,fˇs))

其中 f t {f}_{t} ft f s {f}_{s} fs 分别是老师和学生模型的特征图。 教师模型选取的成对特征图表达为: f ^ t , f ˇ t \hat{f}_{t}, \check{f}_{t} f^t,fˇt,学生模型选择的成对特征图表达为: f ^ s , f ˇ s \hat{f}_{s}, \check{f}_{s} f^s,fˇs Ψ t ( . ) \Psi_{t}(.) Ψt(.) Ψ s ( . ) \Psi_{s}(.) Ψs(.)是来自教师和学生模型的成对特征图的相似性函数。 L R 1 ( . ) \mathcal{L}_{R^{1}}(.) LR1(.) 表示教师和学生特征图之间的相关函数。

传统的知识转移方法通常涉及个人知识的提炼。老师的软目标直接提炼给学生。实际上,提炼的知识不仅包含特征信息,还包含数据样本的相互关系。具体来说,刘等。 (2019g)通过实例关系图提出了一种鲁棒而有效的知识提炼方法。实例关系图中传递的知识包含实例特征,实例关系和特征空间转换跨层。 Park等。 (2019)提出了一种关系知识蒸馏,该知识蒸馏了实例关系中的知识。基于流形学习的思想,通过特征嵌入来学习学生网络,这保留了教师网络中间层中样本的特征相似性(Chen等人,2020b)。使用数据的特征表示将数据样本之间的关系建模为概率分布(Passalis和Tefas,2018; Passalis等,2020a)。师生的概率分布与知识转移相匹配。 (Tung and Mori,2019)提出了一种保留相似性的知识提炼方法。尤其是,将教师网络中输入对的相似激活所产生的保持相似性的知识转移到学生网络中,并保持成对相似性。 Peng等。 (2019a)提出了一种基于相关一致性的知识蒸馏方法,其中蒸馏的知识既包含实例级信息,又包含实例之间的相关性。使用关联一致性进行蒸馏,学生网络可以了解实例之间的关联。

如上所述,基于实例关系的基于关系的知识的蒸馏损失可以表述为:
L Rel ⁡ D ( F t , F s ) = L R 2 ( ψ t ( t i , t j ) , ψ s ( s i , s j ) ) L_{\operatorname{Rel} D}\left(F_{t}, F_{s}\right)=\mathcal{L}_{R^{2}}\left(\psi_{t}\left(t_{i}, t_{j}\right), \psi_{s}\left(s_{i}, s_{j}\right)\right) LRelD(Ft,Fs)=LR2(ψt(ti,tj),ψs(si,sj))

其中, ( t i , t j ) ∈ F t \left(t_{i}, t_{j}\right) \in F_{t} (ti,tj)Ft ( s i , s j ) ∈ F s \left(s_{i}, s_{j}\right) \in F_{s} (si,sj)Fs F t F_{t} Ft F s F_{s} Fs分别是老师和学生模型中的要素表示集。 ψ t ( . ) \psi_{t}(.) ψt(.) ψ s ( . ) \psi_{s}(.) ψs(.) ( t i , t j ) \left(t_{i}, t_{j}\right) (ti,tj) ( s i , s j ) \left(s_{i}, s_{j}\right) (si,sj) 的相似度函数。 L R 2 ( . ) \mathcal{L}_{R^{2}}(.) LR2(.) 是教师和学生特征表示之间的相关函数。 典型的基于实例关系的KD模型如下图所示。

Relation-Based Knowledge示意图

可以将提取的知识从不同的角度进行分类,例如数据的结构化知识,有关输入功能的特权信息。 下表显示了基于关系的知识的不同网络类别的摘要。

Relation-Based Knowledge方法汇总

尽管最近提供了一些类型的基于关系的知识,但是如何根据特征图或数据样本对关系信息进行建模(作为知识)仍然值得进一步研究

蒸馏

蒸馏的几种形式

离线蒸馏(Offline Distillation)

大多数以前的知识蒸馏方法都可以脱机工作。在常见的知识蒸馏中,知识从预先训练的教师模型转移到学生模型。因此,整个训练过程有两个阶段,即:

  • 大型教师模型是在蒸馏之前首先在一组训练样本上训练的。
  • 教师模型用于提取logit或中间特征形式的知识,然后用于指导蒸馏过程中学生模型的训练。

离线蒸馏的第一阶段通常不作为知识蒸馏的一部分进行讨论,即,假定教师模型是预先定义的。很少关注教师模型结构及其与学生模型的关系。因此,离线方法主要集中于改进知识转移的不同部分,包括知识的设计以及用于匹配特征或分布匹配的损失函数。离线方法的主要优点在于它们简单易行。例如,教师模型可以包含使用可能位于不同机器上的不同软件包训练的一组模型。可以提取知识并将其存储在缓存中。

离线蒸馏方法通常采用单向知识转移和两阶段训练程序。然而,不可避免的是,复杂的高容量教师模型具有很长的训练时间,而离线蒸馏中对学生模型的训练通常在教师模型的指导下是有效的。此外,大型教师和小型学生之间的能力差距始终存在,而学生在很大程度上依赖于教师。

在线蒸馏(Online Distillation)

尽管离线蒸馏方法简单有效,但离线蒸馏中的一些问题已引起研究界的越来越多的关注。为了克服离线蒸馏的局限性,提出了在线蒸馏以进一步改善学生模型的性能,特别是在没有大容量高性能教师模型的情况下。在在线蒸馏中,教师模型和学生模型同时更新,并且整个知识蒸馏框架是端到端可训练的。

在最近三年中,已经提出了多种在线知识蒸馏方法。具体来说,在深度相互学习中(Zhang等人,2018b),多个神经网络以协作方式工作。在训练过程中,任何一个网络都可以作为学生模型,其他模型可以作为老师。为了提高泛化能力,通过使用 soft Logits 的集合来扩展深度相互学习(Guo等,2020)。 Chen等。 (2020a)进一步将辅助同伴(auxiliary peers)和小组负责人(group leader)引入深度相互学习中,以形成一套多样化的同伴模型。为了降低计算成本,Zhu和Gong(2018)提出了一种多分支架构,其中每个分支表示一个学生模型,不同分支共享相同的骨干网络。 Kim等人(2019b)没有使用Logits,引入了特征融合模块来构建教师分类器。谢等。 (2019)用便宜的卷积运算代替了卷积层以形成学生模型。 Anil等。 (2018)使用在线蒸馏来训练大规模分布式神经网络,并提出了在线蒸馏的一种变体,称为共蒸馏。并行共蒸馏以相同的架构训练多个模型,并且通过从其他模型转移知识来训练任何一个模型。最近,提出了一种在线对抗知识蒸馏方法,以利用来自类别概率和特征图的知识,同时由鉴别者训练多个网络(Chung等,2020)。

在线蒸馏是一种具有高效并行计算功能的单阶段端到端训练方案。然而,现有的在线方法(例如,相互学习)通常不能解决在线设置中的高能力教师,这使得在在线设置中进一步探索教师与学生模型之间的关系成为一个有趣的话题。

自我蒸馏(Self-Distillation)

在自我蒸馏中,教师和学生模型采用相同的网络。这可以视为在线蒸馏的特殊情况。具体来说,Zhang等。 (2019b)提出了一种新的自蒸馏方法,其中将来自网络较深部分的知识蒸馏为浅层部分。与(Zhang et al。,2019b)中的自蒸馏相似,有人提出了一种自注意蒸馏方法进行车道检测(Hou et al。,2019)。该网络利用其自身层的注意力图作为其较低层的蒸馏目标。快照蒸馏(Yang et al。,2019b)是自我蒸馏的一种特殊变体,其中网络早期(教师)的知识被转移到其后期(学生)以支持在同一时期内的监督训练过程网络。为了进一步减少通过提前退出的推理时间,Phuong和Lampert(2019b)提出了基于蒸馏的训练方案,其中提前退出层尝试在训练过程中模仿后续退出层的输出。

另外,最近提出了一些有趣的自蒸馏方法。具体来说,袁等。提出了一种基于标签平滑规则化(label smoothing regularization)分析的无教师知识蒸馏方法(Yuan et al。,2020)。 Hahn和Choi提出了一种新颖的自我知识蒸馏方法,其中自我知识由预测概率而不是传统的软概率组成(Hahn和Choi,2019)。这些预测的概率由训练模型的特征表示来定义。它们反映了特征嵌入空间中数据的相似性。 Yun等。提出了分类自知识蒸馏,以匹配同一模型中同一来源内的类内样本和扩充样本之间的训练模型的输出分布(Yun et al。,2020)。此外,采用Lee等人(2019a)提出的自蒸馏进行数据增强,并将增强的自知性蒸馏为模型本身。还采用自我蒸馏中以一对一地优化具有相同架构的深度模型(教师或学生网络)(Furlanello等,2018; Bagherinezhad等,2018)。每个网络都使用教师优化来蒸馏先前网络的知识。

此外,还可以从人类师生学习的角度直观地了解离线,在线和自我蒸馏中。离线蒸馏是指知识渊博的老师向学生传授知识;在线蒸馏是指老师和学生互相学习;自我蒸馏是指学生自己学习知识。而且,就像人类学习一样,这三种蒸馏由于自身的优势可以结合起来互相补充。

师生架构

在知识蒸馏中,师生架构是形成知识转移的通用载体。换句话说,从老师到学生的知识获取和蒸馏的质量也取决于如何设计老师和学生的网络。在人类学习习惯方面,我们希望学生能够找到合适的老师。因此,如何在知识蒸馏中完成知识的提取和提取,如何选择或设计合适的师生结构是非常重要而又困难的问题。最近,在蒸馏过程中,教师和学生的模型设置几乎都预先设置了不变的大小和结构,从而容易造成模型容量差距。但是,几乎不存在如何特别设计教师和学生的体系结构以及为什么由这些模型设置确定其体系结构的方法。在本节中,将讨论下图所示的教师模型和学生模型的结构之间的关系。

师生架构关系

知识蒸馏以前曾被设计为压缩深度神经网络的方法之一。深度神经网络的复杂性主要来自两个维度:深度和宽度。通常需要将知识从更深和更广的神经网络转移到更浅和更薄的神经网络。学生网络通常选择为:

  • 教师网络的简化版本,每层中的层数更少且通道更少。
  • 教师网络的量化版本,其中保留了网络的结构。
  • 具有高效基本操作的小型网络。
  • 具有优化的全局网络结构的小型网络。
  • 与教师使用同一网络。

大型深层神经网络和小型学生神经网络之间的模型能力差距会降低知识转移的速度。为了有效地将知识转移到学生网络,已提出了多种方法来控制模型复杂度的可控降低。具体来说,Mirzadeh等。 (2020)引入了助教来减轻教师模型和学生模型之间的训练差距。(Gao et al。,2020)通过残差学习进一步缩小了差距,即使用辅助结构来学习残差。另一方面,最近的几种方法也集中在最小化学生模型和教师模型的结构差异上。例如,Polino等。 (2018)将网络量化与知识蒸馏相结合,即学生模型很小,是教师模型的量化版本。 Nowak和Corso(2018)提出了一种结构压缩方法,该方法涉及将多层学习的知识转移到单层。 Wang等。 (2018a)逐步执行从教师网络到学生网络的块状知识转移,同时保留接受领域。在在线环境中,教师网络通常是学生网络的集合,其中学生模型彼此共享相似的结构(或相同的结构)。

最近,深度可分离卷积已被广泛用于为移动或嵌入式设备设计有效的神经网络。受神经架构搜索(或NAS)成功的启发,通过基于有效元操作或块的全局结构搜索,小型神经网络的性能得到了进一步改善。此外,动态搜索知识转移机制的想法也出现在知识蒸馏中,例如,使用强化学习以数据驱动的方式自动删除冗余层,并在给定教师网络条件下搜索最佳学生网络

以前的大多数工作都着重于设计教师和学生模型的结构或它们之间的知识转移方案。 为了使小型学生模型与大型教师模型很好地匹配,以提高知识蒸馏的绩效,自适应的师生学习体系结构是必要的。 最近,在知识蒸馏中进行神经体系结构搜索(NAS)的想法,即在教师模型的指导下联合搜索学生结构和知识转移,将是未来研究的一个有趣课题。

蒸馏算法

对抗蒸馏(Adversarial Distillation)

对抗蒸馏

多教师蒸馏(Multi-Teacher Distillation)

多教师蒸馏

跨模态蒸馏(Cross-Modal Distillation)

跨模态蒸馏

跨模态蒸馏方法汇总

图蒸馏(Graph-Based Distillation)

图蒸馏

注意力蒸馏(Attention-Based Distillation)

由于注意力可以很好地反映卷积神经网络的神经元激活,因此在知识蒸馏中使用了一些注意力机制来改善学生网络的性能。在这些基于注意力的KD方法中,定义了不同的注意力转移机制,用于从教师网络向学生蒸馏知识网络。注意转移的核心是定义用于特征嵌入神经网络各层的关注图。也就是说,使用关注图功能来传递关于特征嵌入的知识

无数据蒸馏(Data-Free Distillation)

无数据蒸馏

Data-Free Learning of Student Networks

量化蒸馏(Quantized Distillation)

网络量化通过将高精度网络(例如32位浮点)转换为低精度网络(例如2位和8位)来降低神经网络的计算复杂度。同时,知识蒸馏的目的是训练小型模型以产生与复杂模型相当的性能。目前已经有多篇文章提出了在量化过程使用教师-学生框架中的一些KD方法。量化蒸馏方法的框架如下图所示。

量化蒸馏框架

具体来说,Polino等。 (2018)提出了一种量化蒸馏方法,将知识转移到权重量化的学生网络中。在(Mishra和Marr,2018年)中,提出的量化KD被称为“学徒”。高精度教师网络将知识转移到小型的低精度学生网络。为了确保小型学生网络准确地模仿大型教师网络,首先在特征图上对高精度教师网络进行量化,然后将知识从量化教师转移到量化学生网络(Wei等人,2018年) )。 Kim等。 (2019a)提出了基于量化学生网络的自学,以及基于师生网络与知识转移的共同研究的量化意识知识蒸馏。此外,Shin等。 (2019)使用蒸馏和量化进行了深度神经网络的经验分析,同时考虑了知识蒸馏的超参数,例如教师网络的大小和蒸馏温度。

终身蒸馏(Lifelong Distillation)

终身学习,包括持续学习和元学习,旨在以与人类相似的方式进行学习。它积累了以前学到的知识,还将学到的知识转移到未来的学习中。知识蒸馏提供了一种有效的方法来保存和转移所学知识,而不会造成灾难性的遗忘。最近,基于终生学习的KD变体数量不断增加。

关于元学习: Jang等。 (2019)设计了元转移网络,可以确定在师生架构中转移的内容和地点。 Flennerhag等。 (2019)提出了一个轻量级的框架,称为Leap,用于通过将知识从一种学习过程转移到另一种学习过程来对任务流形进行元学习。 Peng等。 (2019b)设计了一种用于少拍图像识别的新知识转移网络架构。该体系结构同时合并了来自图像和先验知识的视觉信息。刘等。 (2019e)提出了一种用于图像检索的语义感知知识保存方法。从图像模态和语义信息中获得的教师知识将得到保存和转移。

此外,为了解决终身学习中的灾难性遗忘问题,全局蒸馏(Lee等人,2019b),基于知识蒸馏的终身GAN(Zhai等人,2019),多模型蒸馏(Zhou等人,2020) )和其他基于KD的方法(Li and Hoiem,2017; Shmelkov et al。,2017)已经开发出来,以提取学习到的知识并在新任务上教给学生网络。

NAS蒸馏(NAS-Based Distillation)

神经体系结构搜索(NAS)是最流行的自动机器学习(或AutoML)技术之一,旨在自动识别深度神经模型并自适应地学习适当的深度神经结构。在知识蒸馏中,知识转移的成功不仅取决于老师的知识,还取决于学生的架构。但是,大型教师模型和小型学生模型之间可能存在能力差距,从而使学生难以向老师学习。为了解决这个问题,已经有工作采用 NAS 来找到 oracle-based 和 architecture-aware 的合适的学生架构实现知识蒸馏。此外,知识蒸馏被用于提高神经架构搜索的效率,例如,具有蒸馏架构知识的 NAS(AdaNAS)以及教师指导的架构搜索(TGSA)。在TGSA中,指导每个体系结构搜索步骤以模仿教师网络的中间特征表示,通过有效搜索学生的可能结构,老师可以有效地监督特征转移。
TGSA方法示意图

性能对比

知识蒸馏是用于模型压缩的出色技术。通过捕获教师的知识并在教师学习中使用蒸馏策略,它可以提高轻量级学生模型的性能。近来,许多知识蒸馏方法致力于改善性能,尤其是在图像分类任务中。在本节中,为了清楚地证明知识蒸馏的有效性,总结了一些典型的KD方法在两个流行的图像分类数据集上的分类性能。

这两个数据集是 CIFAR10 和 CIFAR100,分别由分别来自 10 和 100 个类别的 32×32 RGB 图像组成。两者都具有 50000 个训练图像和 10000 个测试图像,并且每个类具有相同数量的训练和测试图像。为了公平比较,KD 方法的实验分类准确度结果(%)直接来自相应的原始论文,如 CIFAR10 的表5和 CIFAR100 的表6所示。当使用不同类型的知识,蒸馏方案和教师/学生模型的结构时,报告了不同方法的性能。具体而言,括号中的准确度是教师和学生模型的分类结果,它们是经过单独训练的。应该注意的是,DML 和 DCM 的成对精度是在线蒸馏后师生的表现。

CIFAR-10

CIFAR-10方法性能对比

CIFAR-100

CIFAR-100方法性能对比

从表5和表6的性能比较中,可以得出以下几点结论:

  • 知识蒸馏可以简单地在不同的深度模型上实现,并且可以通过知识蒸馏轻松地实现不同深度模型的模型压缩。
  • 通过协作学习进行在线知识蒸馏可以显着提高深度模型的性能。
  • 自知蒸馏可以很好地改善深度模型的性能。
  • 轻量级深层模型(学生)的性能可以通过大容量教师模型中的知识转移而轻松提高。

通过不同知识蒸馏方法的性能比较,可以很容易地得出结论,知识蒸馏是一种有效且有效的深度模型压缩技术。

总结和讨论

近年来,知识蒸馏及其应用引起了相当大的关注。 本文从知识,蒸馏方案,师生架构,蒸馏算法,性能比较和应用的角度对知识蒸馏进行了全面综述。 下面,讨论知识蒸馏的挑战,并对知识蒸馏的未来研究提供一些见识。

挑战

对于知识蒸馏,关键是:1)从教师那里提取丰富的知识; 2)从教师那里转移知识以指导学生的训练。因此,本文从以下几个方面讨论知识蒸馏的挑战:知识的均等性,蒸馏的类型,师生体系结构的设计以及知识蒸馏的理论基础

大多数KD方法利用各种知识的组合,包括基于响应的知识,基于特征的知识和基于关系的知识。因此,重要的是要了解每种知识类型的影响,并知道不同种类的知识如何以互补的方式互相帮助。例如,基于响应的知识具有相似的动机来进行标签平滑和模型正则化; 基于特征的知识通常用于模仿教师的中间过程,而基于关系的知识则用于捕获不同样本之间的关系。为此,在统一和互补的框架中对不同类型的知识进行建模仍然是挑战。例如,来自不同提示层的知识可能对学生模型的训练有不同的影响:1)基于响应的知识来自最后一层; 2)来自较深的提示/指导层的基于特征的知识可能会遭受过度规范化的困扰。

如何将丰富的知识从老师传授给学生是知识蒸馏的关键一步。通常,现有的蒸馏方法可分为离线蒸馏,在线蒸馏和自蒸馏。离线蒸馏通常用于从复杂的教师模型中转移知识,而教师模型和学生模型在在线蒸馏和自我蒸馏的设置中具有可比性。为了提高知识转移的效率,应进一步研究模型复杂性与现有蒸馏方案或其他新颖蒸馏方案之间的关系

目前,大多数KD方法都将重点放在新型知识或蒸馏损失函数上,而对师生体系结构的设计研究不足。实际上,除了知识和蒸馏算法之外,教师和学生的结构之间的关系也显着影响知识蒸馏的性能。例如,一方面,最近的一些研究发现,由于教师模型和学生模型之间的模型能力差距,学生模型无法从某些教师模型中学习到很多东西;另一方面,从对神经网络容量的一些早期理论分析来看,浅层网络能够学习与深层神经网络相同的表示。因此,设计有效的学生模型或构建合适的教师模型仍然是知识蒸馏中的难题。

尽管有大量的知识蒸馏方法和应用,但对知识蒸馏的理解(包括理论解释和实证评估)仍然不够。例如,蒸馏可以被视为一种获得特权信息的学习形式。线性教师模型和学生模型的假设使得能够通过蒸馏来研究学生学习特征的理论解释。此外,Cho和Hariharan(2019)对知识蒸馏的功效进行了一些实证评估和分析。但是,仍然很难获得对知识提升的可概括性的深刻理解,尤其是如何衡量知识的质量或师生架构的质量。

未来发展方向

为了提高知识蒸馏的性能,最重要的因素包括:怎样设计师生网络体系结构,从老师网络中学习什么样的知识,以及在何处提炼到学生网络中

深层神经网络的模型压缩和加速方法通常分为四个不同类别,即模型剪枝和量化,低秩分解,紧凑型卷积滤波器和知识蒸馏。在现有的知识蒸馏方法中,只有很少的相关工作讨论了知识蒸馏与其他压缩方法的结合。例如,量化知识蒸馏可以看作是一种参数修剪方法,它将网络量化整合到师生架构中。因此,为了学习用于在便携式平台上部署的高效轻巧的深度模型,由于大多数压缩技术都需要重新训练/微调过程,因此需要通过知识蒸馏和其他压缩技术进行混合压缩的方法。此外,如何决定使用不同压缩方法的正确顺序将是未来研究的有趣话题

除了用于深度神经网络加速的模型压缩之外,由于教师架构上知识转移的自然特性,知识蒸馏还可以用于其他问题。最近,知识蒸馏已应用于数据隐私和安全性,深度模型的对抗攻击,跨模态,多个域,灾难性遗忘,加速深度模型的学习,神经结构搜索的效率,自我监督和数据增强。另一个有趣的例子是,知识从小型教师网络向大型学生网络的转移可以加速学生的学习。这与传统的知识蒸馏有很大不同。大型模型从未标记的数据中学习的特征表示也可以通过蒸馏来监督目标模型。为此,将知识蒸馏扩展到其他目的和应用可能是有意义的未来方向。

知识蒸馏的学习类似于人类的学习。将知识转移推广到经典和传统的机器学习方法是可行的。例如,基于知识蒸馏的思想,传统的两阶段分类适用于单老师单学生问题。此外,知识蒸馏可以灵活地部署到各种学习方案中,例如对抗学习,自动机器学习,终身学习,和强化学习。因此,将来将知识蒸馏与其他学习方案整合起来以应对实际挑战将是有用的。


更多内容关注微信公众号【AI异构】

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012347027/article/details/111415197

智能推荐

数据指标体系命名规范-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏10次。原子指标定义原子指标 = 单一业务修饰词+基础指标词根,例如:支付金额-payment_amt命名规范派生指标定义派生指标 = 多业务修饰词+基础指标词根,派生指标继承原子指标的特性,例如:T+180体系课商品复购率,其中T+180是时间修饰词、体系课复购是业务修饰词、比率是基础指标词根命名规范日期类指标命名规范命名时要遵循:业务修饰词+基础指标词根+聚合修饰词(日期修饰词)。将日期后缀加到名称后面,如下图所示:聚合类型指标命名规范命名时要遵循:业务修饰词+基础指标词根+聚

怎样让一个div高度和浏览器高度一样_如何让div的高度等于浏览器可见区域的高度浏览器滚动div始终覆盖浏览器的整个-程序员宅基地

文章浏览阅读6.7k次,点赞2次,收藏2次。这个老生长谈的问题,不知困扰了多少前端开发人员,和后端程序员,其实很简单,这里写出来,让大家分享下,有很多人说,我已经设置div 100%了,怎么还没效果,我想说的是,有一个关键的东东,你没设置,html,body{height:100%;overflow:hidden;}哈哈,这回你会了吧,要同时设置。_如何让div的高度等于浏览器可见区域的高度浏览器滚动div始终覆盖浏览器的整个

cisco 2960 VLAN MAC_盘点Mac上的触控板(鼠标)增强工具-程序员宅基地

文章浏览阅读147次。今天小编给大家推荐几款Mac上好用的触控板/鼠标增强工具,拥有这些软件可以为触控板添加各种自定义的快捷键和手势动作,为鼠标的右键菜单添加功能,提高工作效率。一、BetterTouchTool触控板功能增强软件,一款专为Mac用户开发的Magic Mouse鼠标功能增强制作的软件。可以触发任意键盘快捷键和100多个预定义操作的组合,您几乎可以控制Mac的每个方面。BetterTouchTool fo...

cas 单点登录服务端客户端配置-程序员宅基地

文章浏览阅读124次。首先,下载cas-server-3.5.2-releasehttp://pan.baidu.com/s/1GJ8Gscas-client-3.2.1-releasehttp://pan.baidu.com/s/1glKFB提供俩个下载地址:先从服务端配置:我是新建一个web工程cas-server将 建几个文件夹src/libssrc/loc...

CSS 设置文字间距_css字间距-程序员宅基地

文章浏览阅读4.7w次,点赞17次,收藏53次。一、css word-spacing属性设置字间距(单词的间距)word-spacing 属性增加或减少单词间的空白(即字间隔);在这个属性中,“字” 定义为由空白符包围的一个字符串。也就是说该属性是以空格为基准进行调节间距的,如果多个字母被连在一起,则会被word-spacing视为一个单词;如果汉字被空格分隔,则分隔的多个汉字就被视为不同的单词,word-spacing属性此时有效。语法:word-spacing:值;normal:定义单词间的标准空间,默认值。 length:定义单词间的固定空_css字间距

关于安卓蓝牙2.0的app开发原理-程序员宅基地

文章浏览阅读805次。最近时间比较宽裕,觉得自己可以写一些东西来总结一下工作,索性就写一篇关于安卓蓝牙的开发总结吧安卓蓝牙开发其实也就是socket的开发,同时分为服务端和客户端,下面我就按照我的开发流程来降整个的安卓蓝牙2.0开发叙述一下,蓝牙4.0BLE我也会在之后给大家更新首先,我们要注册蓝牙相关的广播并在manifest中给出相应的权限(安卓6.0之后由于相应的底层改变,注册权限的时候不仅要给蓝牙的权限

随便推点

android11微信分享图片黑色,用微信发图片千万注意这件事,小心暴露隐私!(附解决方法)...-程序员宅基地

文章浏览阅读590次。原标题:用微信发图片千万注意这件事,小心暴露隐私!(附解决方法)近日,关于“微信发送原图暴露隐私”的说法刷爆了朋友圈,到底是真是假呢?手机原图会泄露隐私?是的!现在任何智能手机拍摄的照片,都含有一个叫Exif参数的东西。它包括光圈、快门、ISO、白平衡、日期时间等各种图像数据,最关键的一项是,位置信息!如果没有经过人为处理,这些图片的Exif参数会一直存在。 拍照时,因为软件调用了Exif中的GP..._raw格式照片微信发送显示黑色

Qt学习笔记(1)——Qt 信号槽_qt信号槽函数上机小结-程序员宅基地

文章浏览阅读267次。通过信号槽,能够使 Qt 各组件在不知道对方的情形下能够相互通讯。槽函数和普通的 C++ 成员函数没有很大的区别。它们也可以使 virtual 的;可以被重写;可以使public、protected 或者 private 的;可以由其它的 C++ 函数调用;参数可以是任何类型的。如果要说区别,那就是,槽函数可以和一个信号相连接,当这个信号发生时,它可以被自动调用。connect()语句的原型类..._qt信号槽函数上机小结

matplotlib绘制多张图、多子图、多例图_matplotlib同时绘制8个图-程序员宅基地

文章浏览阅读1.7k次。绘制多图关键:fig = plt.figure(1) 表示新建第几个图import matplotlib.pyplot as pltfig = plt.figure(1)plt_rec_loss = [1,2,3,4,5,6]plt_rec_recall = [4,3,6,5,8,9]plt.xlabel("epoch")plt.ylabel("loss")plt.plot(r..._matplotlib同时绘制8个图

RHCSA第五天作业-程序员宅基地

文章浏览阅读208次。1、新建几个普通用户wukong,wuneng,wujing,他们都属于xiyouji组的成员,其中wujing没有和系统交互的shell。[root@localhost ~]# groupadd xiyouji[root@localhost ~]# useradd -g xiyouji wukong[root@localhost ~]# useradd -g xiyouji wuneng[root@localhost ~]# useradd -g xiyouji wujing[root@loc

一个好用的数据分析工具:Cftool-程序员宅基地

文章浏览阅读4.8k次。同事最近在做数据分析,计算完全依赖于计算器,然后一个小规模的矩阵,就是用计算器一个个算出来;程序员看不下去,给他写了个exe,cmd下输入要求的数据,就直接给输出了。今天他在做数据分析,给了x-y数据,让我找拟合关系。先前接触过cftool,于是直接拿来用了:将x\y按照同样维度格式输入;命令行输入cftool,会出现一个窗口;将x\y数据加载;选择权重关系(同样权重就忽略此项);...

OpenCL错误码转字符串_cl_exec_status_error_for_events_in_wait_list-程序员宅基地

文章浏览阅读638次。OpenCL错误码转字符串(以中文表示)错误代码位:0 ~ -19、-30 ~ -68const char* errorCodeToString(cl_int errCode) { const char* err = NULL; switch (errCode) { case CL_SUCCESS: err = "CL_SUCCESS:命令成功执行,没有出现错误!"; break..._cl_exec_status_error_for_events_in_wait_list

推荐文章

热门文章

相关标签