知识蒸馏 综述 Knowledge Distillation: A Survey

Knowledge Distillation: A Survey

本文译自Knowledge Distillation: A Survey,论文地址:https://arxiv.org/abs/2006.05525

(有翻译不周之处,敬请指正)

1. Introduction

深度学习取得了巨大进步,但是受限于庞大的计算量和参数量很难实际应用与资源受限设备上。

为了使深度模型更加高效,主要有以下两个方向的研究:

  1. 高效的网络模块构建:如MobileNets, ShuffeNets

  2. 模型压缩和加速技术,包括:

  • 参数裁剪和共享(模型量化,模型二值化,结构化矩阵,参数共享等)

  • 低秩分解

  • 卷积核压缩

  • 知识蒸馏(Knowledge Distillation, KD)

2006年, Bucilua等人最先提出将大模型的知识迁移到小模型的想法。2015年,Hinton才正式提出广为人知的知识蒸馏(KD)的概念。其主要的想法是:学生模型通过模仿教师模型来获得和教师模型相当的精度,关键问题是如何将教师模型的知识迁移到学生模型。通常来说,一个知识蒸馏系统由以下三部分组成:知识(knowledge)、蒸馏算法(distillation algorithm)、教师-学生架构(teacher-student architecture)。典型的教师-学生框架如图1所示:

关于KD一些理论上的理解和证明:成功的蒸馏和数据结构,目标函数的偏好,学生分类器的强单调性紧密相关。由于模型能力之间的gap,并不是越大的模型作为teacher越好(大学教授可能教不了幼儿园的熊孩子)。

KD和人类的学习过程很相似,受此启发,有了各种各样的学习方式:传统的教师学生网络、互学习(学习小组)、辅助教学(助教来减少gap)、lifelong learning(学无止境)、自蒸馏(自学成才)等等。

蒸馏后的学生模型更容易部署,此外,蒸馏过程中学习到的知识还可以用于对抗攻击、数据增广、隐私保护等。还有一部分研究使用KD来进行训练数据的压缩。

本文的目的:

  1. 从知识、蒸馏、结构三个方面总览知识蒸馏

  2. 回顾最近知识蒸馏在算法和应用层面的发展

  3. 提供一些更深层次的见解

此外,顺便安利另一篇KD的综述【Knowledge distillation and student-teacher learning for visual intelligence: A review and new outlooks】,其重点关注视觉领域的教师学生模型架构的发展和挑战,与本综述还是有所不同的。

本文的组织结构如开头的图2所示。

2. Knowledge

知识是KD的三驾马车之一,本节主要关注KD中不同的知识类型。最朴素的KD采用教师模型的logits(通常指网络最后全连接层的输入、softmax层前的输出)作为教师的知识。此外,中间层的激活值、神经元或者特征也可以作为知识;不同的激活单元、神经元或者样本对之间的关系也有可能包含丰富的信息。甚至教师模型本身的参数或者层间连接也包含着某种类型的知识。

我们把以上各种形式的知识分为以下几类,如图3所示:

  • 基于响应的知识

  • 基于特征的知识

  • 基于关系的知识

2.1 基于响应的知识

基于响应的知识通常指教师模型最后一层的输出,想法来源于直接模拟教师模型最终的输出,这类知识直观有效,在不同的任务和应用场景上有着广泛的应用,其形式化定义如下:

L_{ResD}(z_t,z_s)=L_R(z_t,z_s),

其中z_t和z_s分别是教师模型和学生模型的logits,一个典型的基于的响应的KD如图4所示:

图像分类领域最广为人知的基于响应的知识是soft target,soft target是输入属于某一类的概率,计算方式如下:

p(z_i,T)=\frac{exp(z_i/T)}{\begin{matrix} \sum_{j} exp(z_j/T) \end{matrix}},

Hinton认为soft target包含着教师模型的暗知识,相应的distillation loss可以表示为:

L_{ResD}(p(z_t,T),p(z_s,T))=L_R(p(z_t,T),p(z_s,T)),

其中的L_R经常使用KL散度。显然,优化上述distillation loss可以让学生模型的logits尽可能的接近教师模型的logits,为了更好地理解经典蒸馏模型中distillation loss的作用,请看图5:

2.2 基于特征的知识

深度学习能够学习分层渐进的抽象特征,这就是广为人知的表示学习。因此无论是最后一层的输出还是中间层的输出都可以被当做知识来监督学生模型的学习。基于特征的知识可以作为基于响应的知识的补充,对训练瘦神型网络很有帮助。

最直接的想法是匹配中间特征的激活函数值,特别地,Zagoruyko and Komodakis (2017) 提出用attention map来表示知识;Huang and Wang (2017) 通过使用神经元选择性变换泛化了attention map;Passalis and Tefas (2018) 通过进行特征空间的概率分布匹配来进行知识迁移;Kim et al. (2018)引入了所谓的'factors'作为更容易理解的中间表示;为了减少教师和学生之间的gap,Jin et al. (2019)提出了用教师网络提示层(hint layers)的输出来监督学生的路径限制的提示学习(route constrained hint learning);Heo et al.(2019)提出使用激活值的边界进行知识迁移;(Zhou et al., 2018)直接使用中间层的参数和基于响应的知识来作为教师的知识;为了匹配教师和学生之间的语义信息,Chen et al. (2021)提出 cross-layer KD,通过注意力定位自适应地为每个学生网络中的层分配教师网络中的层。

总的来说,基于特征的知识对应的distillation loss可以表示如下;

L_{FeaD}(f_t(x),f_s(x))=L_F\left({\Phi}_t(f_t(x)),\Phi_s(f_s(x))\right),

f(x)表示中间层的特征,phi表示转化函数,用于教师和学生模型的特征形状不一样的时候,L_F表示相似性度量函数。以上loss在模型中的作用如图6。同时表1给出了从特征类型、来源层、蒸馏损失三方面总结的各种基于特征的知识。

还有有待研究的问题:如何有效的选择教师网络中的提示层和学生网络中的被指导层?不同形状下的特征如何进行有效的匹配?

2.3 基于关系的知识

基于关系的知识指的是不同feature-map或者不同数据样本之间的关系。

基于不同特征图之间的关系的损失函数定义如下:

L_{RelD}(f_t,f_s)=\mathcal{L}_{R^1}\left(\mathit{\Psi_t}(\hat{f_t},\check{f_t}),\mathit{\Psi_s}(\hat{f_s},\check{f_s})\right),

其中f是特征,\Psi是相似性度量函数,L_R是相关性函数。

基于不同样本之间关系的损失函数定义如下:

L_{RelD}(F_t,F_s)=\mathcal{L}_{R^2}\left(\mathit{\psi_t}(t_i,t_j),\mathit{\psi_s}(s_i,s_j)\right),

其中t是特征表示,\psi是相似性度量函数,L_R是相关性函数。

一个典型的基于样本之间关系的KD模型如图7所示,基于关系的知识总结见表2。

3. Distillation Schemes

根据教师模型是否在训练过程中一同更新,蒸馏方案可分为三种:离线蒸馏、在线蒸馏和自蒸馏。如图8:

3.1 Offline Distillation

离线蒸馏一般包含两个阶段:训练教师模型和蒸馏学生模型。其优点是简单容易实现,重点放在知识和蒸馏损失的设计上。缺点是无反馈、无法避免教师大模型的耗时训练、教师模型和学生模型存在gap、学生模型对教师模型依赖性强等。

3.2 Online Distillation

在线蒸馏方案中教师模型和学生模型同时更新,整个蒸馏过程是端到端的。

值得一提的是深度互学习 (Zhang et al., 2018b)中,众多网络合作学习,任何一个网络都可以作为学生而其他网络作为教师。多分支架构,众多不同分支的学生网络共享网络骨架(Zhu and Gong, 2018)等等。

在线蒸馏是一个支持高效并行计算的单阶段端到端的蒸馏方案,但是大容量教师模型和学生模型的关系仍需要进一步探索。

3.3 Self-Distillation

自蒸馏方案中,教师模型和学生模型是同一个网络,这可以看作是在线蒸馏的一个特例。

Zhang et al. (2019b) 的提出使用深层的知识来监督浅层的知识。 Hou et al., 2019提出自注意力蒸馏用于车道线检测,其使用深层的attention-map来监督浅层。Yang et al., 2019b提出快照蒸馏,使用早期epoch的网络来监督当前epoch的网络(过去的自己监督现在的自己???)。此外,也有一些自蒸馏的理论分析(Mobahi et al., 2020)和实验验证(Zhang and Sabuncu, 2020)。

4 Teacher-Student Architecture

从人类的角度看,我们都希望学生能够找到一个合适的老师。因此为了知识的捕获和蒸馏成功进行,合适地设计教师网络和学生网络是一个即重要又困难的问题。目前大部分工作都采用预先设定好的固定的教师和学生网络架构,他们通常有着不同的模型规模和架构,所以很容易导致模型性能之间的gap。 本节主要讨论如下图所示的教师模型和学生模型之间的关系。

知识蒸馏的设计初衷是用更深更广的模型监督小模型来进行模型压缩。学生网络通常是:

  1. 减少层数或者通道数的简化版的教师网络

  2. 一个量化版的教师网络(保留了网络原始架构)

  3. 拥有高效算子的小网络

  4. 优化后的全局网络结构

  5. 和教师网络完全相同

5 Distillation Algorithms

最简单有效的进行蒸馏的方式是直接匹配基于响应的知识、基于特征的知识或者特征空间的分布,为了提升在更复杂问题中知识蒸馏的效果,更多不同的蒸馏算法被提出。本节将详细介绍这些算法。

5.1 Adversarial Distillation

教师模型学习训练数据的真实分布很困难,同时,学生模型准确的模仿教师模型也很困难。最近对抗学习得到了广泛关注,尤其是GAN在生成式网络上取得了巨大成功。其中,判别器评估一个样本是真实样本的概率,生成器通过构造假的样本来欺骗判别器。受此启发,许多对抗知识蒸馏方法被提出,希望通过这种方式来让教师和学生模型更好地理解真实数据分布。

如图10所示,基于GAN的蒸馏可分为三种:

  1. 生成器被用来生成数据,生成的数据可以直接被当做训练集或者被用来进行数据集增广

  2. 判别器用来区分教师模型和学生模型logits或者特征

  3. 在线蒸馏中,教师和学生模型共同作为生成器,共同优化

综上,GAN可以增强学生网络的学习能力,GAN和KD联合可以生成有价值的训练数据,KD可以被用来压缩GAN。

5.2 Multi-Teacher Distillation

不同的教师模型可以为学生模型提供不同的知识,教师网络可以独立或联合地应用于学生网络训练的不同阶段。最简单的方法是将多个教师模型的response平均后作为知识来监督学生模型的学习。一个通用的框架如图11所示:

Chen et al. (2019b)使用两个教师网络,一个使用基于响应的知识,一个使用基于特征的知识。Fukuda et al. (2017)每次迭代时随机地从教师模型池中选择一个......

5.3 Cross-Modal Distillation

某些模态的数据或标签在训练或测试时可能缺失,因此在不同模态间进行知识迁移很重要。

5.4 Graph-Based Distillation

大部分蒸馏算法关注单独样本的知识,最近的一些工作开始使用图结构来探索样本数据之间的关系。主要想法是:使用图作为教师知识的载体,以及使用图来控制来自教师的知识传递。

5.5 Attention-Based Distillation

因为注意力可以很好地反映神经元的激活情况,因此注意力经常被用来蒸馏,其关键是定义用于蒸馏的attention-map。

5.6 Data-Free Distillation

因为隐私、法规、安全和保密性等方面的考虑,一些data-free的蒸馏方法被提出。data-free意味着没有训练数据,数据大都是从教师模型中的特征表示合成的。

5.7 Quantized Distillation

模型量化通过降低模型参数的精度(位数)来减少计算量。

5.8 Lifelong Distillation

终生学习包括频繁学习、持续学习和元学习,目标是像人类一样学习,通过积累过去学到的知识并将其迁移到未来的学习中。知识蒸馏提供了一种有效的方式来避免灾难性遗忘。

5.9 NAS-Based Distillation

NAS(神经结构搜索)是最流行的自动学习技术,目标是自动地鉴别深度模型并自适应地学习合适的神经结构。知识蒸馏的成功不仅依靠教师模型的知识,还依靠学生模型的结构。为了减小教师模型和学生模型之间的gap,NAS常被用来寻找合适的学生模型,尤其是在oracle-based和architecture-aware知识蒸馏中。此外知识蒸馏也可以被用来提高NAS的效率。

6 Performance Comparison

本文用CIFAR10和CIFAR100两个数据集上的分类问题验证了现有蒸馏方法的性能,分别如表5和表6所示:

从上表的对比中我们可以发现:

  • 不同的深度模型都可以实现蒸馏

  • 知识蒸馏可以实现深度模型的模型压缩

  • 通过合作学习的在线蒸馏可以显著提升模型性能

  • 自蒸馏可以有效提升模型性能

  • 离线蒸馏常用基于特征的知识,在线蒸馏常用基于响应的知识

  • 轻量化学生模型的性能可以通过高性能教师模型的知识来得到提升

7 Application

知识蒸馏在AI的多个领域都有广泛的应用,包括视觉识别、语音识别、自然语言处理和推荐系统等,此外,知识蒸馏也可以用于数据隐私保护和抵抗对抗攻击。

7.1 KD in Visual Recognition

  • 对于大部分视觉任务,知识蒸馏都能提供一种有效的教师-学生学习方式,因为在高性能的教师模型的监督下,强量化的学生模型更容易训练。

  • 知识蒸馏可以充分利用复杂源数据场景下的不同类型的知识,如跨模态的数据、多领域的数据、多任务的数据、低分辨率的数据等。

7.2 KD in NLP

  • 知识蒸馏提供了一种有效的轻量化深度语言模型的方法。

  • 知识蒸馏可以简单高效地解决许多跨语言任务问题,因为跨语言模型之间可以进行迁移和共享。

  • 深度语言模型中,序列化的知识可以高效地进行迁移。

7.3 KD in Speech Recognition

  • 轻量化的学生模型可以满足语音识别的实际应用要求,如实时响应、高识别精度、受限资源条件等。

  • 因为语言数据的时序性质,许多教师-学生架构建立在RNN的基础上。

  • 时序层面上的知识蒸馏可以很好地应用在时序模型上,实际上,Frame-level的知识蒸馏通常使用基于响应的知识,Sequence-level的知识蒸馏通常使用基于特征的知识。

  • 知识蒸馏可以简单高效地解决许多跨领域或跨模态的语音识别问题。

7.4 KD in Other Application

推荐系统

对抗攻击、隐私保护

NAS、可解释性、联邦学习

8 Conclusion and Discussion

8.1 Challenges

知识的质量: 各种类型知识的作用以及如何互相影响,比如,基于响应的知识和label smoothing以及正则化有着相同的动机;基于特征的知识经常被用来模仿教师模型的中间结果;基于关系的知识用来捕获不同样本之间的关系。因此用一种统一的方式应用各种类型的知识仍然是个巨大的挑战。

蒸馏类型:一般来说大规模的复杂教师模型使用离线蒸馏,教师学生模型性能相当的使用在线蒸馏或者自蒸馏。因此模型复杂度与蒸馏类型之间的关系有待进一步研究。

教师学生架构:当前大多数研究集中在知识类型或者蒸馏损失函数的设计,而教师学生架构的研究相对较少。实际上,当存在gap时,学生模型几乎从教师模型那学不到多少东西。但是另一方面,一些早期的理论研究表明浅层的神经网络有能力学习到像深层网络一样的特征表示,因此如何设计高效的教师学生架构仍然是个具有挑战性的问题。

理论:尽管有很多关于知识蒸馏的方法和应用研究,但是关于知识蒸馏的理论解释和实验验证仍然相对较少。比如,知识蒸馏可以认为是带特权信息的学习。此外如何评价知识的质量和教师学生架构的好坏仍是个亟待解决的问题。

8.2 Future Directions

模型压缩和加速方法通常可分为以下四种类型:参数剪枝和共享、低秩分解、紧致卷积核和知识蒸馏。

只有为数不多的工作将知识蒸馏与其他模型压缩方法结合,如量化知识蒸馏。因此,混合压缩方法用于学习一个轻量化的模型非常必要,因为大部分模型压缩技术都有精细化调整的过程。更进一步,如何确定不同压缩方法的应用顺序,将是一个有趣的研究主题。

此外,知识蒸馏在数据隐私保护、对抗攻击、跨模态、灾难性遗忘、加速学习、NAS加速、自监督、数据增强等方面也可以有广泛应用。一个有趣的例子是用小的教师网络来监督大的学生网络可以加速学生网络的学习过程。从大模型中学到的无标签数据的特征表示也可以用来监督目标模型的学习。为此,知识蒸馏的其他拓展应用将是个有意义的研究方向。

知识蒸馏的学习过程和人类的学习过程类似,将其中的知识迁移过程推广到传统的机器学习方法是可行的。此外,知识蒸馏可以灵活地应用到其他的学习范式中,如对抗学习、元学习、标签噪声过滤、终生学习、强化学习等,这也是一些很有前景的研究方向。

猜你喜欢

转载自blog.csdn.net/daimaliang/article/details/116171775
今日推荐