1、背景
随着深度学习的快速发展,优秀的模型层出不穷,比如图像领域的ResNet、自然语言处理领域的Bert,这些革命性的新技术使得应用效果快速提升。但是,好的模型性能并非无代价的,你会发现,深度学习模型正在变得越来越复杂,网络深度越来越深,模型参数量也在变得越来越多。而这会带来一个现实应用的问题:将这种复杂模型推上线,模型响应速度太慢,当流量大的时候撑不住。
2、含义
知识蒸馏就是目前一种比较流行的解决此类问题的技术方向。一般知识蒸馏采取Teacher-Student模式:将复杂模型作为Teacher,Student模型结构较为简单,用Teacher来辅助Student模型的训练,Teacher学习能力强,可以将它学到的暗知识(Dark Knowledge)迁移给学习能力相对弱的Student模型,以此来增强Student模型的泛化能力。复杂笨重但是效果好的Teacher模型不上线,就单纯是个导师角色,真正上战场挡抢撑流量的是灵活轻巧的Student小模型。比如Bert,因为太重,很难直接上线跑,目前很多公司都是采取知识蒸馏的方法,学会一个轻巧,但是因为被Teacher教导过,所以效果也很好的Student模型部署上线。
3、知识蒸馏典型方法
目前知识蒸馏已经成了独立研究方向,各种新技术层出不穷。但是如果粗略归纳一下的话,主流的知识蒸馏技术有两个技术发展主线:Logits方法及特征蒸馏方法。
3.1、Logits方法

首先得明白什么是Logits?
我们知道,对于一般的分类问题,比如图片分类,输入一张图片后,经过DNN网络各种非线性变换,在网络接近最后一层,会得到这张图片属于各个类别的大小数值 z_i ,某个类别的 z_i 数值越大,则模型认为输入图片属于这个类别的可能性就越大。什么是Logits? 这些汇总了网络内部各种信息后,得出的属于各个类别的汇总分值 z_i ,就是Logits, i代表第i个类别, z_i 代表属于第i类的可能性。因为Logits并非概率值,所以一般在Logits数值上会用Softmax函数进行变换,得出的概率值作为最终分类结果概率。Softmax一方面把Logits数值在各类别之间进行概率归一,使得各个类别归属数值满足概率分布;另外一方面,它会放大Logits数值之间的差异,使得Logits得分两极分化,Logits得分高的得到的概率值更偏大一些,而较低的Logits数值,得到的概率值则更小。上图中的公式 q_i ,就是一个变体的Softmax公式,如果把T拿掉或令T=1,则是个标准的Softmax公式, z_i 就是第i个类别的Logits数值, q_i 是Logits数值经过Softmax变换后,归属于第i个类别的概率值。
Logits蒸馏方法
知道了什么是Logits后,我们来说什么是Logits蒸馏方法。假设我们有一个Teacher网络,一个Student网络,输入同一个数据给这两个网络,Teacher会得到一个Logits向量,代表Teacher认为输入数据属于各个类别的可能性;Student也有一个Logits向量,代表了Student认为输入数据属于各个类别的可能性。最简单也是最早的知识蒸馏工作,就是让Student的Logits去拟合Teacher的Logits,即Student的损失函数为:
其中, z_t 是Teacher的Logits, z_s 是Student的Logits。在这里,Teacher的Logits就是传给Student的暗知识。
Hinton在论文Distilling the Knowledge in a Neural Network中提出了称为Softmax Temperature的改进方法,并第一次正式提出了“知识蒸馏”的叫法。Softmax Temperature改造了Softmax函数(公式参考上图),引入了温度T,这是一个超参数。如果我们把T设置成1,就是标准的Softmax函数,也就是极端两极分化版本。如果将T设大,则Softmax之后的Logits数值,各个类别之间的概率分值差距会缩小,也即是强化那些非最大类别的存在感;反之,则会加大类别间概率的两极分化。Hinton版本的知识蒸馏,让Student去拟合Teacher经过T影响后Softmax得到的,其实也是让Student去学习Teacher的Logits,无非是加入T后可以动态调节Logits的分布。Student的损失函数由两项组成,一个子项是Ground Truth,就是在训练集上的标准交叉熵损失,让Student去拟合训练数据,另外一个是蒸馏损失,让Student去拟合Teacher的Logits:
H是交叉熵损失函数, f(x) 是Student模型的映射函数, y 是Ground Truth Label, z_t 是Teacher的Logits, z_s 是Student的Logits, ST( ) 是Softmax Temperature函数, λ 用于调节蒸馏Loss的影响程度。
一般而言,温度T要设置成大于1的数值,这样会减小不同类别归属概率的两极分化程度,因为Logits方法中,Teacher能够提供给Student的额外信息就包含在Logits数值里。如果我们在蒸馏损失部分,将T设置成1,采用常规的Softmax,也就是说两极分化严重时,那么相对标准的训练数据,也就是交叉熵损失,两者等同,Student从蒸馏损失中就学不到任何额外的信息。
3.2 特征蒸馏方法

另外一种大的知识蒸馏思路是特征蒸馏方法,如上图所示。它不像Logits方法那样,Student只学习Teacher的Logits这种结果知识,而是学习Teacher网络结构中的中间层特征。最早采用这种模式的工作来自于自于论文:“FITNETS:Hints for Thin Deep Nets”,它强迫Student某些中间层的网络响应,要去逼近Teacher对应的中间层的网络响应。这种情况下,Teacher中间特征层的响应,就是传递给Student的暗知识。在此之后,出了各种新方法,但是大致思路还是这个思路,本质是Teacher将特征级知识迁移给Student。
4、知识蒸馏在推荐系统中应用场景(精排)

我们知道,工业界常见推荐系统一般有三个级联的过程:召回、粗排以及精排。召回环节从海量物品库里快速筛选部分用户可能感兴趣的物品,传给粗排模块,粗排环节通常采取使用少量特征的简单排序模型,对召回物料进行初步排序,并做截断,进一步将物品集合缩小到合理数量,向后传递给精排模块,精排环节采用利用较多特征的复杂模型,对少量物品进行精准排序。其中,粗排环节根据具体应用可选可不选。
4.1、蒸馏方法

目前推荐领域里,在精排环节采用知识蒸馏,主要采用Teacher和Student联合训练(Joint Learning)的方法,而目的是通过复杂Teacher来辅导小Student模型的训练,将Student推上线,增快模型响应速度。
如上图所示,所谓联合训练,指的是在离线训练Student模型的时候,增加复杂Teacher模型来辅助Student,两者同时进行训练,是一种训练过程中的辅导。从网络结构来说,Teacher和Student模型共享底层特征Embedding层,Teacher网络具有层深更深、神经元更多的MLP隐层,而Student则由较少层深及神经元个数的MLP隐层构成,两者的MLP部分参数各自私有。对于所有训练数据,会同时训练Teacher和Student网络,对于Teacher网络来说,就是常规的训练过程,以交叉熵作为Teacher的损失函数。而对于Student网络来说,损失函数由两个部分构成,一个子项是交叉熵,这是常规的损失函数,它促使Student网络去拟合训练数据;另外一个子项则迫使Student输出的Logits去拟合Teacher输出的Logits,所谓蒸馏,就体现在这个损失函数子项,通过这种手段让Teacher网络增强Student网络的模型泛化能力。也即:
H是交叉熵损失函数, f(x) 是Student模型的映射函数, y 是Ground Truth Label, z_t 是Teacher的Logits, z_s 是Student的Logits, λ 用于调节蒸馏Loss的影响程度。
这个模型是阿里巴巴在论文“Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net”中提出的,其要点有三:其一两个模型同时训练;其二,Teacher和Student共享特征Embedding;其三,通过Logits进行知识蒸馏。对细节部分感兴趣的同学可以参考原始文献。

5、知识蒸馏中单教师模型和多教师的区别
知识蒸馏中,可以有单教师模型和多教师模型两种情况。单教师模型是指只有一个大的模型作为教师,多教师模型是指有多个不同的大的模型作为教师。
单教师模型和多教师模型的区别主要有以下几点:
1、多教师模型可以利用多种知识来源,增加知识的多样性和丰富性,而单教师模型可能受限于单一的知识来源,导致知识的局限性和偏差。
2、多教师模型可以提高学生模型的泛化能力,因为多个教师模型可以互补彼此的优势和弥补彼此的缺陷,而单教师模型可能无法充分发挥教师模型的潜力,或者过度依赖教师模型的特点。
3、多教师模型可以增加学生模型的鲁棒性,因为多个教师模型可以抵抗噪声和异常,而单教师模型可能容易受到干扰和攻击。
【鲁棒性】在这里,鲁棒性是指学生模型在面对不同的输入数据或环境变化时,仍然能够保持或提升其预测的准确性和稳定性的能力。例如,如果学生模型是一个图像分类器,那么鲁棒性就是指它能够正确地识别出不同的图像,即使图像有一些旋转、缩放、裁剪、模糊、噪声等变化。如果学生模型是一个文本生成器,那么鲁棒性就是指它能够生成合理的文本,即使输入的文本有一些拼写错误、语法错误、语义歧义等问题。
4、多教师模型可以降低学生模型的训练难度,因为多个教师模型可以提供更多的指导和反馈,而单教师模型可能需要更多的训练数据和迭代次数。
因此,多教师模型相比单教师模型,有更多的优势和潜力,但也有更多的挑战和难点,例如如何选择合适的教师模型,如何平衡多个教师模型的影响,如何保持学生模型的紧凑性和高效性等。
