深度学习模型压缩方法:知识蒸馏方法总结
本文将介绍深度学习模型压缩方法中的知识蒸馏,内容从知识蒸馏简介、知识的种类、蒸馏机制、师生网络结构、蒸馏算法以及蒸馏方法等六部部分展开。

一、知识蒸馏简介
知识蒸馏是指用教师模型来指导学生模型训练,通过蒸馏的方式让学生模型学习到教师模型的知识。在模型压缩中,教师模型是一个提前训练好的复杂模型,而学生模型则是一个规模较小的模型。如下图所示,由训练好的教师模型,在相同的数据下,通过将教师网络对该样本的预测值作为学生模型的预测目标指导学生模型学习。这个预测值一般是指教师网络输出类的概率。教师模型的参数规模大,能够表达更好的泛化能力,学生模型的参数规模较小,如果用通常方法直接训练,往往达不到教师模型的泛化能力,所以通过教师模型的指导,让学生模型学习教师模型的泛化能力,以达到或媲美教师模型的准确度。

二、知识种类
知识可以分为4类:输出特征知识,中间特征知识,关系特征知识和结构特征知识。

学生模型通过学习教师模型提供的答案,以学习教师模型对目标的泛化能力。
2、中间特征知识
中间特征知识是指教师模型的中间层上输出的相关信息。如果将输出特征知识比作是问题的答案,那么中间特征知识可以看做问题的求解过程。将中间特征知识作为学习目标,可以让学生模型学习与教师模型类似的求解过程 。也可以使用隔层、逐层和逐块等不同粒度大小将教师模型的中间特征知识迁移给学生模型。
3、关系特征知识
关系特征知识是指教师模型不同层和不同数据样本之间的关系知识。关系特征知识中学生模型所学习的内容不局限模型的某一层,而是对模型多层的信息进行模仿。关系特征知识可以比作求解问题的方法 。
4、结构特征知识
结构特征知识是教师模型的完整知识体系 ,不仅包括上面提到的各种特征知识,还包括教师模型的区域特征分布等知识。结构特征知识通过多种知识的互补,促使学生模型达到与教师模型一样丰富的预测能力。
三、蒸馏机制
根据教师网络是否和学生网络一起更新,可以将知识蒸馏分为离线蒸馏,在线蒸馏和自蒸馏三种蒸馏方式:
1、离线蒸馏
离线蒸馏可以理解为知识渊博的老师给学生传授知识:
早期的知识蒸馏方法都属于离线蒸馏,将一个预训练好的教师模型的知识迁移到学生网络,这一过程通常包括两个阶段:
第一阶段、在蒸馏前,教师网络在训练集上进行训练。
第二阶段、教师网络通过logits层信息或者中间层信息提取知识,引导学生网络进行训练。
第一个阶段我们通常不把它当作知识蒸馏的一部分,因为默认教师网络本身就是已经训练好的。一般离线蒸馏算法关注的是提升知识迁移的不同部分 ,例如:知识的形式,损失函数的设计,分布的匹配等等。
离线蒸馏的优点 是实现起来比较简单,形式上通常是单向的知识迁移,即从教师网络到学生网络,同时需要训练教师网络和知识蒸馏这两个阶段的训练。
缺点 是教师网络通常比较庞大,模型复杂,需要大量的训练时间,需要注意教师网络和学生网络之间的差异,当差异过大的时候,学生网络可能很难学习好这些知识。
2、在线蒸馏
在线蒸馏可以理解为教师和学生一起学习 :离线蒸馏方法虽然简单有效,但也存在上述的一些问题。为了克服离线蒸馏的局限性,提出了在线蒸馏以进一步改善学生模型的性能。在在线蒸馏中,教师模型和学生模型同时更新,并且整个知识蒸馏框架是端到端可训练的。

当大教师网络模型尚未建立时,可能采用在线蒸馏方法。
3、自蒸馏
自蒸馏意味着:学生自己学习自己的知识:在自蒸馏中,教师和学生模型使用相同的网络 。自蒸馏可以看作是在线蒸馏的一种特殊情况,因为教师网络和学生网络使用的是相同的模型。
在蒸馏分类中,分为两类:第一类是基于不同样本信息进行相互蒸馏,以减少过拟合,通过最小化样本间的预测分布来提高性能。另一类是单个网络的自蒸馏,一般而言,这种策略可以优化网络性能,通过深层网络的特征指导浅层网络的学习。
四、师生网络架构
在知识蒸馏中,师生结构是形成知识转移的一般载体。换句话说,无论是知识的获取,还是蒸馏的质量,都取决于师生结构。从人类学习的习惯来看,我们希望一个学生能找到一个合适的老师。因此,要在知识蒸馏中很好地完成知识的获取和提炼,如何选择或设计合适的教师和学生结构是一个非常重要而又困难的问题。

深度神经网络的复杂性主要来自两个维度:深度和宽度。通常需要将知识从较深和较宽的神经网络转移到较浅和较细的神经网络。学生网络通常被选择为:
1、教师网络的简化版本,具有较少的层和每层中较少的信道。
2、教师网络的量化版本,其中网络的结构被保留。
3、具有高效基本操作的小型网络。
4、具有优化的整体网络结构的小型网络。
5、与教师相同的网络。
五、蒸馏算法
为了改进在更复杂的环境中传递知识的过程,已经出现了许多不同的知识蒸馏算法。下面,我们一起回顾知识蒸馏领域中最近提出的几种典型的蒸馏方法。

1、对抗蒸馏
在对抗性学习中,对抗网络中的鉴别器用来估计样本来自训练数据分布的概率,而生成器试图使用生成的数据样本来欺骗鉴别器。受此启发,已经出现了许多基于对抗的知识蒸馏方法,以使教师和学生网络能够更好地理解真实的数据分布。

2、多教师蒸馏
不同的教师架构可以为学生网络提供不同有用的知识。在训练学生网络期间,多个教师网络可以单独地,也可以整体地用于蒸馏。为了传递来自多个教师的知识,最简单的方法是使用来自所有教师的平均响应作为监督信号。
一般来说,由于来自不同教师的不同知识,多教师知识提炼可以提供丰富的知识并定制一个通用的学生模型。然而,如何有效地整合来自多个教师的不同类型的知识还需要进一步的研究。

3、交叉模式蒸馏
在训练或测试期间,某些数据或标签可能不可用。因此,在不同的模型之间传递知识是很重要的。然而,当模型存在差异时,跨模型知识蒸馏是一项具有挑战性的研究,例如,当不同模式之间缺乏配对的样本时。

4、基于图形的蒸馏
大多数知识蒸馏算法集中于将单个实例知识从教师传递给学生,而最近提出了一些方法是使用图来探索数据的内在关系。这些基于图的蒸馏方法的主要思想是:
图作为教师知识的工具或媒介;

5、无数据蒸馏
为了克服由隐私、合法性、安全性和保密性问题等原因引起的不可用数据的问题,出现了一些无数据知识蒸馏的方法。无数据蒸馏中的合成数据通常是从预训练教师模型的特征表示中生成的 。尽管无数据提取在数据不可用的情况下显示出巨大的潜力,但如何生成高质量的多样化训练数据以提高模型的泛化能力,仍是一个很大的挑战。

6、量化蒸馏
量化通过将高精度网络转换成低精度网络来降低神经网络的计算复杂度。同时,知识蒸馏的目的是训练一个具有与复杂模型相当性能的小模型。而量化蒸馏是一个大的高精度的教师网络将知识传递给一个小的低精度的学生网络。为了确保小的学生网络精确地模仿大的教师网络,首先在特征图上量化教师网络,然后将知识从量化的教师转移到量化的学生网络。

此外,还有许多
六、蒸馏流程
知识蒸馏可以分为4个步骤:
训练教师模型。这是一个相对简单的步骤。

步骤二和步骤三统一称为高温蒸馏的过程,T为温度参数。总的损失函数L由Lsoft和Lhard加权得到。Lsoft 对应的是高温,Lhard对应的是T=1。Lsoft中的piT是教师模型在温度等于T的条件下 softmax 在第i类上的输出值,qiT是指学生模型在温度等于T的条件下 softmax 输出在第i类上的值。高温时,T的值很大,由指数函数图像很容易可以知道,T越大,不同类的概率差异会越小。

