发布时间:2024-02-29 18:01
本文梳理了用于简单分类任务的各种知识蒸馏(KD)策略,并实现了一系列经典的知识蒸馏技术。
- 知识蒸馏论文综述: Knowledge Distillation: A Survey
- 知识蒸馏论文分类: https://github.com/FLHonker/Awesome-Knowledge-Distillation
近年来,深度神经网络在工业界和学术界都取得了成功,尤其是在计算机视觉任务方面。深度学习的巨大成功主要归因于其可扩展性以编码大规模数据并操纵数十亿个模型参数。但是,将这些繁琐的深度模型部署在资源有限的设备(例如,移动电话和嵌入式设备)上是一个挑战,这不仅是因为计算复杂性高,而且还有庞大的存储需求。为此,已经开发了多种模型压缩和加速技术。作为模型压缩和加速的代表类型,知识蒸馏有效地从大型教师模型中学习小型学生模型。它已迅速受到业界的关注。本文从知识类别,训练框架,师生架构,蒸馏算法,性能比较和应用的角度对知识蒸馏进行了全面的调查。此外,简要概述了知识蒸馏中的挑战,并讨论和转发了对未来研究的评论。
知识蒸馏,已经受到业界越来越多的关注。 大型深度模型在实践中往往会获得良好的性能,因为当考虑新数据时,过度参数化会提高泛化性能。 在知识蒸馏中,小模型(学生模型)通常是由一个大模型(教师模型)监督,算法的关键问题是如何从老师模型转换的知识传授给学生模型。 一个知识蒸馏系统由三个主要部分组成:知识,蒸馏算法,和师生架构。
用于模型压缩的知识蒸馏类似于人类学习的方式。受此启发,最近的知识蒸馏方法已扩展到师生学习,相互学习,辅助教学,终身学习和自学。知识蒸馏的大多数扩展都集中在压缩深度神经网络上。由此产生的轻量级学生网络可以轻松部署在视觉识别,语音识别和自然语言处理(NLP)等应用程序中。此外,知识蒸馏中的知识从一种模型到另一种模型的转移可以扩展到其他任务,例如对抗攻击,数据增强,数据隐私和安全性。通过知识蒸馏的动机进行模型压缩,知识转移的思想已被进一步用于压缩训练数据,即数据集蒸馏,这将知识从大型数据集转移到小型数据集以减轻深度模型的训练负担。
早期知识蒸馏框架通常包含一个或多个大型的预训练教师模型和小型的学生模型。教师模型通常比学生模型大得多。主要思想是在教师模型的指导下训练高效的学生模型以获得相当的准确性。来自教师模型的监督信号(通常称为教师模型学到的“知识”)可以帮助学生模型模仿教师模型的行为。
在典型的图像分类任务中,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 T→0 时,软目标变为 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))=i∑−pi(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} ∂zsi∂LD(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}} ∂zsi∂LD(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} ∂zsi∂LD(p(zt,T),p(zs,T))=T1(N+∑jTzsj1+Tzsi−N+∑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) ∂zsi∂LD(p(zt,T),p(zs,T))=NT21(zsi−zti)
因此,根据上式,在高温和零均值 logits 的情况下,蒸馏损失等于匹配教师模型和学生模型之间的 logit ,即最小化 ( z s i − z t i ) \left(z_{s i}-z_{t i}\right) (zsi−zti)。 因此,通过与高温匹配的 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))=∑i−yilog(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 是学生模型的参数,并且是调节参数。 为了轻松理解知识蒸馏,下图显示了传统知识蒸馏与教师和学生模型联合的特定体系结构。在下图所示的知识蒸馏中,始终首先对教师模型进行预训练,然后再进行训练。 仅使用来自预训练教师模型的软目标的知识来训练学生模型。 实际上,这就是离线知识提炼与基于响应的知识。
基于响应的知识通常是指教师模型最后输出层的神经响应。主要思想是直接模仿教师模型的最终预测。基于响应的知识蒸馏简单但有效地进行了模型压缩,已被广泛用于不同的任务和应用中。最流行的基于响应的图像分类知识被称为软目标。基于响应的知识的蒸馏损失可以表示为
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以及边界框的偏移量。在语义地标定位任务中,例如人体姿态估计,教师模型的响应可能包括每个地标的热图。最近,基于响应的知识得到了进一步的探索,以解决将地面标签信息作为条件目标的问题。
基于响应的知识的概念是简单易懂的,尤其是在“黑暗知识(dark knowledge)”的情况下。 从另一个角度看,软目标的有效性类似于标签平滑或正则化器。 但是,基于响应的知识通常依赖于最后一层的输出(例如,软目标),因此无法解决教师模型在监督,这对于使用非常深层神经网络的表示学习非常重要。由于 soft logits 实际上是类概率分布,因此基于响应的知识蒸馏也仅限于监督学习。
深度神经网络擅长通过增加抽象来学习多个级别的特征表示。这就是代表性学习。因此,最后一层的输出和中间层的输出,即特征图,都可以用作监督学生模型训练的知识。具体来说,来自中间层的基于特征的知识是基于响应的知识的良好扩展,尤其是对于更薄和更深的网络的训练而言。
中间表示法首先在 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模型如下图所示。
本文还从特征类型,源层和蒸馏损失的角度总结了不同类型的基于特征的知识,如下表所示。
具体地说, 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 层的大小之间存在显着差异,因此还需要探索如何正确匹配教师和学生的特征表示。
基于响应的知识和基于特征的知识都使用教师模型中特定层的输出。基于关系的知识进一步探索了不同层或数据样本之间的关系。
为了探索不同特征图之间的关系,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模型如下图所示。
可以将提取的知识从不同的角度进行分类,例如数据的结构化知识,有关输入功能的特权信息。 下表显示了基于关系的知识的不同网络类别的摘要。
尽管最近提供了一些类型的基于关系的知识,但是如何根据特征图或数据样本对关系信息进行建模(作为知识)仍然值得进一步研究。
大多数以前的知识蒸馏方法都可以脱机工作。在常见的知识蒸馏中,知识从预先训练的教师模型转移到学生模型。因此,整个训练过程有两个阶段,即:
离线蒸馏的第一阶段通常不作为知识蒸馏的一部分进行讨论,即,假定教师模型是预先定义的。很少关注教师模型结构及其与学生模型的关系。因此,离线方法主要集中于改进知识转移的不同部分,包括知识的设计以及用于匹配特征或分布匹配的损失函数。离线方法的主要优点在于它们简单易行。例如,教师模型可以包含使用可能位于不同机器上的不同软件包训练的一组模型。可以提取知识并将其存储在缓存中。
离线蒸馏方法通常采用单向知识转移和两阶段训练程序。然而,不可避免的是,复杂的高容量教师模型具有很长的训练时间,而离线蒸馏中对学生模型的训练通常在教师模型的指导下是有效的。此外,大型教师和小型学生之间的能力差距始终存在,而学生在很大程度上依赖于教师。
尽管离线蒸馏方法简单有效,但离线蒸馏中的一些问题已引起研究界的越来越多的关注。为了克服离线蒸馏的局限性,提出了在线蒸馏以进一步改善学生模型的性能,特别是在没有大容量高性能教师模型的情况下。在在线蒸馏中,教师模型和学生模型同时更新,并且整个知识蒸馏框架是端到端可训练的。
在最近三年中,已经提出了多种在线知识蒸馏方法。具体来说,在深度相互学习中(Zhang等人,2018b),多个神经网络以协作方式工作。在训练过程中,任何一个网络都可以作为学生模型,其他模型可以作为老师。为了提高泛化能力,通过使用 soft Logits 的集合来扩展深度相互学习(Guo等,2020)。 Chen等。 (2020a)进一步将辅助同伴(auxiliary peers)和小组负责人(group leader)引入深度相互学习中,以形成一套多样化的同伴模型。为了降低计算成本,Zhu和Gong(2018)提出了一种多分支架构,其中每个分支表示一个学生模型,不同分支共享相同的骨干网络。 Kim等人(2019b)没有使用Logits,引入了特征融合模块来构建教师分类器。谢等。 (2019)用便宜的卷积运算代替了卷积层以形成学生模型。 Anil等。 (2018)使用在线蒸馏来训练大规模分布式神经网络,并提出了在线蒸馏的一种变体,称为共蒸馏。并行共蒸馏以相同的架构训练多个模型,并且通过从其他模型转移知识来训练任何一个模型。最近,提出了一种在线对抗知识蒸馏方法,以利用来自类别概率和特征图的知识,同时由鉴别者训练多个网络(Chung等,2020)。
在线蒸馏是一种具有高效并行计算功能的单阶段端到端训练方案。然而,现有的在线方法(例如,相互学习)通常不能解决在线设置中的高能力教师,这使得在在线设置中进一步探索教师与学生模型之间的关系成为一个有趣的话题。
在自我蒸馏中,教师和学生模型采用相同的网络。这可以视为在线蒸馏的特殊情况。具体来说,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)的想法,即在教师模型的指导下联合搜索学生结构和知识转移,将是未来研究的一个有趣课题。
由于注意力可以很好地反映卷积神经网络的神经元激活,因此在知识蒸馏中使用了一些注意力机制来改善学生网络的性能。在这些基于注意力的KD方法中,定义了不同的注意力转移机制,用于从教师网络向学生蒸馏知识网络。注意转移的核心是定义用于特征嵌入神经网络各层的关注图。也就是说,使用关注图功能来传递关于特征嵌入的知识。
网络量化通过将高精度网络(例如32位浮点)转换为低精度网络(例如2位和8位)来降低神经网络的计算复杂度。同时,知识蒸馏的目的是训练小型模型以产生与复杂模型相当的性能。目前已经有多篇文章提出了在量化过程使用教师-学生框架中的一些KD方法。量化蒸馏方法的框架如下图所示。
具体来说,Polino等。 (2018)提出了一种量化蒸馏方法,将知识转移到权重量化的学生网络中。在(Mishra和Marr,2018年)中,提出的量化KD被称为“学徒”。高精度教师网络将知识转移到小型的低精度学生网络。为了确保小型学生网络准确地模仿大型教师网络,首先在特征图上对高精度教师网络进行量化,然后将知识从量化教师转移到量化学生网络(Wei等人,2018年) )。 Kim等。 (2019a)提出了基于量化学生网络的自学,以及基于师生网络与知识转移的共同研究的量化意识知识蒸馏。此外,Shin等。 (2019)使用蒸馏和量化进行了深度神经网络的经验分析,同时考虑了知识蒸馏的超参数,例如教师网络的大小和蒸馏温度。
终身学习,包括持续学习和元学习,旨在以与人类相似的方式进行学习。它积累了以前学到的知识,还将学到的知识转移到未来的学习中。知识蒸馏提供了一种有效的方法来保存和转移所学知识,而不会造成灾难性的遗忘。最近,基于终生学习的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)是最流行的自动机器学习(或AutoML)技术之一,旨在自动识别深度神经模型并自适应地学习适当的深度神经结构。在知识蒸馏中,知识转移的成功不仅取决于老师的知识,还取决于学生的架构。但是,大型教师模型和小型学生模型之间可能存在能力差距,从而使学生难以向老师学习。为了解决这个问题,已经有工作采用 NAS 来找到 oracle-based 和 architecture-aware 的合适的学生架构实现知识蒸馏。此外,知识蒸馏被用于提高神经架构搜索的效率,例如,具有蒸馏架构知识的 NAS(AdaNAS)以及教师指导的架构搜索(TGSA)。在TGSA中,指导每个体系结构搜索步骤以模仿教师网络的中间特征表示,通过有效搜索学生的可能结构,老师可以有效地监督特征转移。
知识蒸馏是用于模型压缩的出色技术。通过捕获教师的知识并在教师学习中使用蒸馏策略,它可以提高轻量级学生模型的性能。近来,许多知识蒸馏方法致力于改善性能,尤其是在图像分类任务中。在本节中,为了清楚地证明知识蒸馏的有效性,总结了一些典型的KD方法在两个流行的图像分类数据集上的分类性能。
这两个数据集是 CIFAR10 和 CIFAR100,分别由分别来自 10 和 100 个类别的 32×32 RGB 图像组成。两者都具有 50000 个训练图像和 10000 个测试图像,并且每个类具有相同数量的训练和测试图像。为了公平比较,KD 方法的实验分类准确度结果(%)直接来自相应的原始论文,如 CIFAR10 的表5和 CIFAR100 的表6所示。当使用不同类型的知识,蒸馏方案和教师/学生模型的结构时,报告了不同方法的性能。具体而言,括号中的准确度是教师和学生模型的分类结果,它们是经过单独训练的。应该注意的是,DML 和 DCM 的成对精度是在线蒸馏后师生的表现。
从表5和表6的性能比较中,可以得出以下几点结论:
通过不同知识蒸馏方法的性能比较,可以很容易地得出结论,知识蒸馏是一种有效且有效的深度模型压缩技术。
近年来,知识蒸馏及其应用引起了相当大的关注。 本文从知识,蒸馏方案,师生架构,蒸馏算法,性能比较和应用的角度对知识蒸馏进行了全面综述。 下面,讨论知识蒸馏的挑战,并对知识蒸馏的未来研究提供一些见识。
对于知识蒸馏,关键是:1)从教师那里提取丰富的知识; 2)从教师那里转移知识以指导学生的训练。因此,本文从以下几个方面讨论知识蒸馏的挑战:知识的均等性,蒸馏的类型,师生体系结构的设计以及知识蒸馏的理论基础。
大多数KD方法利用各种知识的组合,包括基于响应的知识,基于特征的知识和基于关系的知识。因此,重要的是要了解每种知识类型的影响,并知道不同种类的知识如何以互补的方式互相帮助。例如,基于响应的知识具有相似的动机来进行标签平滑和模型正则化; 基于特征的知识通常用于模仿教师的中间过程,而基于关系的知识则用于捕获不同样本之间的关系。为此,在统一和互补的框架中对不同类型的知识进行建模仍然是挑战。例如,来自不同提示层的知识可能对学生模型的训练有不同的影响:1)基于响应的知识来自最后一层; 2)来自较深的提示/指导层的基于特征的知识可能会遭受过度规范化的困扰。
如何将丰富的知识从老师传授给学生是知识蒸馏的关键一步。通常,现有的蒸馏方法可分为离线蒸馏,在线蒸馏和自蒸馏。离线蒸馏通常用于从复杂的教师模型中转移知识,而教师模型和学生模型在在线蒸馏和自我蒸馏的设置中具有可比性。为了提高知识转移的效率,应进一步研究模型复杂性与现有蒸馏方案或其他新颖蒸馏方案之间的关系。
目前,大多数KD方法都将重点放在新型知识或蒸馏损失函数上,而对师生体系结构的设计研究不足。实际上,除了知识和蒸馏算法之外,教师和学生的结构之间的关系也显着影响知识蒸馏的性能。例如,一方面,最近的一些研究发现,由于教师模型和学生模型之间的模型能力差距,学生模型无法从某些教师模型中学习到很多东西;另一方面,从对神经网络容量的一些早期理论分析来看,浅层网络能够学习与深层神经网络相同的表示。因此,设计有效的学生模型或构建合适的教师模型仍然是知识蒸馏中的难题。
尽管有大量的知识蒸馏方法和应用,但对知识蒸馏的理解(包括理论解释和实证评估)仍然不够。例如,蒸馏可以被视为一种获得特权信息的学习形式。线性教师模型和学生模型的假设使得能够通过蒸馏来研究学生学习特征的理论解释。此外,Cho和Hariharan(2019)对知识蒸馏的功效进行了一些实证评估和分析。但是,仍然很难获得对知识提升的可概括性的深刻理解,尤其是如何衡量知识的质量或师生架构的质量。
为了提高知识蒸馏的性能,最重要的因素包括:怎样设计师生网络体系结构,从老师网络中学习什么样的知识,以及在何处提炼到学生网络中。
深层神经网络的模型压缩和加速方法通常分为四个不同类别,即模型剪枝和量化,低秩分解,紧凑型卷积滤波器和知识蒸馏。在现有的知识蒸馏方法中,只有很少的相关工作讨论了知识蒸馏与其他压缩方法的结合。例如,量化知识蒸馏可以看作是一种参数修剪方法,它将网络量化整合到师生架构中。因此,为了学习用于在便携式平台上部署的高效轻巧的深度模型,由于大多数压缩技术都需要重新训练/微调过程,因此需要通过知识蒸馏和其他压缩技术进行混合压缩的方法。此外,如何决定使用不同压缩方法的正确顺序将是未来研究的有趣话题。
除了用于深度神经网络加速的模型压缩之外,由于教师架构上知识转移的自然特性,知识蒸馏还可以用于其他问题。最近,知识蒸馏已应用于数据隐私和安全性,深度模型的对抗攻击,跨模态,多个域,灾难性遗忘,加速深度模型的学习,神经结构搜索的效率,自我监督和数据增强。另一个有趣的例子是,知识从小型教师网络向大型学生网络的转移可以加速学生的学习。这与传统的知识蒸馏有很大不同。大型模型从未标记的数据中学习的特征表示也可以通过蒸馏来监督目标模型。为此,将知识蒸馏扩展到其他目的和应用可能是有意义的未来方向。
知识蒸馏的学习类似于人类的学习。将知识转移推广到经典和传统的机器学习方法是可行的。例如,基于知识蒸馏的思想,传统的两阶段分类适用于单老师单学生问题。此外,知识蒸馏可以灵活地部署到各种学习方案中,例如对抗学习,自动机器学习,终身学习,和强化学习。因此,将来将知识蒸馏与其他学习方案整合起来以应对实际挑战将是有用的。
Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表、地图)
【推荐系统】推荐系统数据流的经典技术架构+微软、阿里、微软等10大深度学习CTR模型最全演化图谱
深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结
MySQL存储过程输入参数(in),输出参数(out),输入输出参数(inout)
【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)
【Pygame实战】你说神奇不神奇?吃豆人+切水果结合出一款你没玩过的新游戏!(附源码)