0 前语
常识蒸馏(Knowledge Distillation,简记为 KD)是一种经典的模型紧缩方法,中心思维是通过引导轻量化的学生模型“模仿”功用更好、结构更复杂的教师模型(或多模型的 ensemble),在不改变学生模型结构的状况下进步其功用。
2015 年 Hinton 团队提出的根据“呼应”(response-based)的常识蒸馏技能(一般将该文算法称为 vanilla-KD [1] )掀起了相关研讨热潮,这以后根据“特征”(feature-based)和根据“联系”(relation-based)的 KD 算法被陆续提出。
以上述三类蒸馏算法为根底,学术界不断涌现出致力于处理各特定问题、面向各特定场景的 KD 算法,如:
1)零练习数据状况下的 data-free KD;
2)教师模型也权重更新的 online KD、self KD;
3)面向检测、切割、自然语言处理等使命的 KD 算法等。
图 1 三类根底的常识蒸馏算法的常识来历示意图,源自参考文献 [[2]](https://arxiv.org/pdf/2006.05525.pdf)
本系列文章将以 MMRazor 算法库为依托,逐步揭开各类 KD 算法的神秘面纱。本文作为 KD 系列文章的头篇,将对 response-based、feature-based和relation-based 这三类根底 KD 算法进行要点介绍,为咱们后续的深化研讨、交流打下根底。
1 Response-based KD
图 2 根据呼应的常识蒸馏算法示意图,源自参考文献 [[2]](https://arxiv.org/pdf/2006.05525.pdf)
如上图所示,Response-based KD 算法以教师模型的分类猜测效果为“方针常识”。具体来说,这里的分类猜测效果指的是分类器最终一个全衔接层的输出(称为 logits)。
与模型的终究输出比较,logits 没有通过 softmax 进行归一化,非方针类别对应的输出值尚未被按捺(假设教师模型 logits 中方针类别的对应值最高)。
在得到教师和学生的 logits 后,运用温度系数 T
别离对教师和学生的 logits 进行“软化”,进而核算二者的差异, 具体的 loss 核算公式为:
Loss=L(p(zteacher,T),p(zstudent,T))Loss=L(p(z_{teacher},T),p(z_{student},T))
p(zi,T)=exp(zi/T)∑jexp(zj/T)p(z_i,T)=\frac{exp(z_i/T)}{\sum_j exp(z_j/T)}
其间 zz 为 logits,ziz_i 为 logtis 中第 i
个类别的对应值,丢失函数 L()
一般运用 KL 散度核算差异。T
一般取大于 1 的整数值,此刻方针类与非方针类的猜测值差异减小,logits 被“软化”。相反地,T 小于 1 时会进一步拉大方针类与非方针类的数值差异,logtis 趋向于 one-hot。
由上可知,response-based KD 算法的常识提取和 loss 核算进程十分简洁,且 logits 本身具有较好理解的实际意义(模型判别当前样本为各类别的决心多少),因而研讨者们将更多的注意力集中于 response-based KD 算法收效原因的解释。
1.1 Non-target class information
Vanilla-KD 以为:logits 供给的“软标签”信息比较于 one-hot 方式的真值标签(GT Label)有着更高的熵值,然后供给了更高的信息量以及数据之间更小的梯度差异。
文中举了一个 MNIST 数据集中的比如,关于某个手写数字 2,模型以为它是 3 的可能性为 10−610^{-6} ,是 7 的可能性为 10−910^{-9} 。其间便蕴含着“比较于 7 而言,当前的手写数字 2 与 3 愈加近似”的信息,然后供给了当前样本与各非方针类别的类间联系信息。
但 logits 中的非方针类别的猜测值一般相对过小(如上述猜测为 3 的可能性仅为10−610^{-6} ),因而文中运用大于 1 的温度系数 T
下降类间得分差异(增大非方针类的猜测值)。
DKD [3] ****算法将 logits 信息拆分红方针类与非方针类两部分,进一步验证并得到 logits 中的非方针类别供给的信息是 response-based KD 起效的关键。
DKD 首先对原始 KD 丢失进行拆解,然后解耦 KD 丢失为 target class knowledge distillation (TCKD)和 non-target class knowledge distillation(NCKD)两部分:
其间,TCKD 相当于方针类概率与(1-方针类概率)的二元猜测丢失,NCKD 则是不考虑方针类后的软标签蒸馏丢失。之后对 TCKD 和 NCKD 的效果做融化,效果如下表所示,其间二者一起运用代表着原始 KD 丢失。能够看到独自运用 NCKD 的效果十分好,甚至遍及优于完整的 KD 丢失,而独自运用 TCKD 带来的功用进步不大甚至会下降练习效果。
表 1 TCKD 和 NCKD 的融化试验效果
那么关于方针类别的蒸馏部分是否应该直接去除呢?TCKD 在哪些使命场景中是有用的呢?
1.2 Difficulty transfer
DKD 以为教师 logits 中方针类猜测值代表着教师模型对各样本的难度评价,举个比如,方针类别猜测值为 0.99 的样本要比 0.75 的样本更简单。
当数据集较为简单时(如 1.1 节试验中运用的 CIFAR-100 数据集),教师模型 logtis 中方针类猜测值均较高,样本难度信息的信息量很低时 TCKD 的效果会随之变差。
相反地,DKD 中相关试验标明,当通过数据增强、标签噪声化处理或使命本身较困难时,TCKD 的正面效果会愈加显着。运用数据增强后的试验效果如下所示(运用 CIFAR-100 数据集),能够看到此刻 TCKD 带来的正面效果显着。
表 2 运用数据增强的状况下,增加 TCKD 带来的功用收益,功用指标为 top-1 准确率
无独有偶,BAN [4] 算法也对 logtis 中的方针类猜测值进行了要点剖析验证。通过公式推导(具体推导进程见 BAN section 3.2)得到定论:教师 logits 中的方针类猜测值相当于各样本的加权因子。直接运用方针类猜测值进行丢失加权(Confidence Weighted by Teacher Max, CWTM)的效果如下所示(运用 CIFAR-100 数据集,指标为 test error),模型功用得到小幅进步。
表 3 CWTM 和 DKPP 用在不同模型上的蒸馏效果,功用指标为错误率,越小越好
需要阐明的是:BAN 为级联自蒸馏算法,上表中 Teacher 即为学生模型;DKPP 为 dark knowledge with Permuted Predictions 的简写,具体做法为打乱非方针类的猜测值,如原始为 [0.05, 0.2, 0.1, 0.6] 的 logits 打乱为 [0.2, 0.1, 0.05, 0.6]。
为什么 BAN 中运用打乱非方针类后的 logits 蒸馏(DKPP)仍然有用,且在 DenseNet80-80 和 80-120 模型中得到了比 CWTM 更好的功用呢?
1.3 Label smoothing
原因在于,此刻的软标签仍在起到相似标签滑润(label smoothing)的效果,然后进步了模型的泛化性。标签滑润是一种缓解模型过拟合问题的技能,它将 one-hot 方式的标签转换为如下方式,其间 \alpha 为人为设定的超参数。
参考文献 [5] 以为:one-hot 方式的标签会鼓舞模型将方针类别的概率猜测为 1、非方针类别的概率猜测为 0,然后导致 logtis 中方针类的值趋于无穷大。当练习数据质量较差(有偏分布显着)或数量较少时容易导致模型 over-confident。因而,为了进步模型的泛化才能,标签滑润将方针类的一部分标签值平均分给了非方针类。
能够发现,软标签与标签滑润有着异曲同工之妙,软标签在不经意间起到了标签滑润的效果。二者最主要的差异在于,软标签中非方针类的标签由教师给出,包括着类间联系信息。DKPP 打乱各类猜测值后导致类间联系紊乱,但仍起到了标签滑润的效果。
关于软标签丢失与标签滑润丢失的相同性、相异性等进一步联系剖析详见参考文献 [6],一起,关于运用标签滑润练习后的教师能否用于常识蒸馏等问题的探求可见参考文献 [6]、[7]、[8]。
1.4 Quantifying
进一步地,response-based KD 在模型练习进程中起到了哪些正面影响(除了终究功用的进步)呢?
参考文献 [9] 从信息量化的视点对蒸馏进程进行了深化剖析,该文章的深度剖析可见第一作者的知乎回答,本文不再班门弄斧。文章中验证为真的三个假设为:
- 1:比起直接从数据学习,蒸馏算法往往使得深度神经网络(DNN)学到更多的常识;
- 2:比起直接从数据学习,蒸馏算法往往使得 DNN 更倾向于一起学到不同常识;
- 3:比起直接从数据学习,蒸馏算法往往使得 DNN 的优化方向更为安稳。
1.5 太长不看,直接看定论
如果你没有足够的时刻浏览上面的各项论说,能够直接获取本节的定论:
1)logits 中的非方针类信息是 response-based KD 起效的关键;
2)方针类信息传递的是教师模型对各样本“难度”的评价,数据噪声较大、使命困难的状况下,难度传递的效果更为显着;
3)logits 比较于 one-hot label 而言,起到了相似标签滑润的效果,按捺了模型的 over-confidence 倾向,然后进步了模型泛化性;
4)从信息量化的视点来看,response-based KD 往往使得模型学到更多的常识、更倾向于一起学到不同的常识、优化方向更为安稳。
2 Feature-based KD
一般的常识蒸馏设置中,教师模型与学生模型的分类器(或检测器、解码器等)是一致的,二者的差异在于特征提取器(或称 backbone、encoder)才能的强弱。
关于深度神经网络而言,由输入数据笼统而来的特征的质量高低,很大程度上决议了模型功用的优劣。自然而然地,以教师模型特征提取器发生的中间层特征为学习对象的 feature-based KD 算法应运而生。
图 3 FitNets 蒸馏算法示意图
最早成功将上述思维应用于 KD 中的是 FitNets [10] 算法,文中将教师的中间层输出特征定义为 Hints
,以教师和学生特征图中对应方位的特征激活的差异为丢失。
一般状况下,教师特征图的通道数大于学生通道数,二者无法彻底对齐。为处理该问题,一般在学生特征图后接卷积层(或全衔接层、由多层卷积构成的卷积模块等),将学生特征图通道数与教师特征图通道数对齐,然后完成特征点的一一对应。
丢失函数核算公式如下所示,其间 ftf_t 和 fsf_s 别离代表教师和学生的特征图,t\phi_t 和 s\phi_s 别离代表对教师和学生特征的转换,然后完成二者的维度对齐,LFL_F 一般运用 L2L_2 丢失。
2.1 Connector
完成特征对齐功用的模块(上面说到的 t\phi_t 和 s\phi_s )是 feature-based KD 算法的中心模块(本文中称之为 connector
),也是很多算法的要点研讨对象。
如针对教师 connector 进行预练习的 Factor Transfer [11] 算法;以二值化方式筛选教师和学生原始特征的 AB [12] 算法;将特征值转换为注意力值的 AT [13] 算法等。
OFD [14] 对各相关算法进行总结,研讨了多种蒸馏算法采用的特征方位、 connector
的构成、丢失函数等要素对信息丢失的影响,汇总表如下所示:
表 4 各蒸馏算法的细节差异与信息丢失状况,表中的文献编号与本文不相对应
能够看到 connector
的样式多变,特征的选取方位也是多种多样,因而将上表中的算法集成到一个算法结构中看起来比较困难。那么,有没有一个算法库成功做到了这一点呢?
好消息!好消息! 上面说到的 FitNets、Factor Transfer、AB、AT Loss(AT 算法与蒸馏最相关的丢失核算部分)、OFD 等算法均被集成到了 MMRazor 算法库中,且中心模块 connector
被独自笼统出来作为可装备组件,十分便于咱们进行“算法魔改”(如为 FitNets 算法装备上 Factor Transfer 的 connector
并核算 AT Loss)。
Recorder 机制更是完成了 function
、method
、model
和parameter
等各类信息的“无痛”获取,咱们不需要额定进行代码编写,只需要稍微更改 config 装备便可获取你想要的信息。
表 5 MMRazor 中多种类型的 Recorder
2.2 Summary
Feature-based KD相关的研讨较多,本文不再进行深化讨论。稍作总结的话,该类别算法的中心关注点在于:
1)常识的定位(规划规矩选出更为重要的教师特征,这一点在检测蒸馏算法中十分重要)
2)怎么进行特征维度对齐、特征语义对齐、特征加权(connector
规划)
3)怎么进行常识的高效传递(特征 fusion、loss 规划)
3 Relation-based KD
最终一个蒸馏根底算法是 relation-based KD,有的研讨者会将该类别算法视为 feature-based KD 算法的一种。原因在于 relation-based KD 运用的信息也是模型特征,只不过核算的不是对应特征点之间的1对1差异,而是特征联系的差异。
relation-based KD 算法关心的要点是样本之间或特征层之间的联系,如别离构建教师和学生特征层之间联系矩阵的 FSP [15] 算法、别离构建相同 batch 内教师和学生各样本特征之间联系矩阵的 RKD [16] 算法,二者均核算联系矩阵的差异丢失。
图 4 根据联系的常识蒸馏算法示意图,上图来历自参考文献 [[2]](https://arxiv.org/pdf/2006.05525.pdf)
3.1 Relational Knowledge Distillation
以 RKD 算法为例,其间心思维如下图所示。RKD 以为联系是一种更 high-level 的信息,样本之间的联系差异信息优于单个样本在不同模型的表达差异信息,其间联系的差异一起包括两个样本之间的联系差异和三个样本之间的夹角差异。
图 5 RKD 算法中的“联系”示意图
将两两样本之间的联系组成的联系矩阵差异丢失记为 LRKD−DL_{RKD-D} ,核算公式如下所示:
其间,ll_{\delta} 为 Huber loss,D(ti,tj)\psi_{D}(t_i,t_j) 核算的是欧式距离,ti、tjt_i、t_j 为不同样本的特征。将三个样本之间的夹角组成的视点联系矩阵差异丢失记为 LRKD−AL_{RKD-A} ,核算公式如下所示:
其间,ll_{\delta} 为 Huber loss,A(ti,tj,tk)\psi_{A}(t_i,t_j,t_k) 核算夹角余弦值,具体核算公式为:
3.2 Summary
近年来,relation-based KD 算法在切割使命中不断获得突破。同一张图画中,像素点之间的特征联系差异或区域之间的特征联系差异成为蒸馏切割模型的有用手段。但在检测使命中 relation-based KD 算法获得的效果较少。
一个可能的原因在于,构建高质量的联系矩阵需要很多的样本,分类和切割(以像素点或区域为样本)使命的样本数量足够大;而受限于存储空间大小等硬件要素,检测使命同一个 batch 中的远景方针(object)数量较少且存在低质量远景方针(被遮挡的、含糊的物体等),因而制约了样本间联系蒸馏在检测使命上的应用。
4 Conclusion
本文对常识蒸馏中的三类根底算法进行了浅薄的介绍,近年来的 KD 算法大多是依托于这三类根底算法进行的优化晋级,信任本文对咱们在常识蒸馏的进一步研讨会有所帮助。
文中说到的 Vanilla-KD、DKD、AB、AT Loss、Factor Transfer、FitNets、OFD、RKD 等算法均已在 MMRazor 中完成,等待咱们的运用与批评指正。
咱们十分欢迎咱们:
1)提出运用进程中遇到的问题,包括但不限于 bug、结构规划优化建议、期望后续 MMRazor 新增某些功用、算法等;
2)在 MMRazor 中复现某个算法或某类算法 pipeline(优异的复现会坠落实习时机哦,爆率真的很高);
3)参加超级视客营活动并招领其间的 MMRazor 使命,收获技能生长与丰盛奖品;
4)帮 MMRazor 进行宣扬,增加运用者的数量(优异的宣扬大使同样会坠落实习时机哦)等。
另外,本系列常识蒸馏文章后续会包括“常识蒸馏在迁移学习中的应用”、“MMRazor 中的蒸馏算法复现指南”等优质内容,敬请等待~
5 参考文献
[1] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015, 2(7).
[2] Gou J, Yu B, Maybank S J, et al. Knowledge distillation: A survey[J]. International Journal of Computer Vision, 2021, 129(6): 1789-1819.
[3] Zhao B, Cui Q, Song R, et al. Decoupled Knowledge Distillation[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 11953-11962.
[4] Furlanello T, Lipton Z, Tschannen M, et al. Born again neural networks[C]//International Conference on Machine Learning. PMLR, 2018: 1607-1616.
[5] Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the inception architecture for computer vision[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 2818-2826.
[6] Shen Z, Liu Z, Xu D, et al. Is label smoothing truly incompatible with knowledge distillation: An empirical study[J]. arXiv preprint arXiv:2104.00676, 2021.
[7] Mller R, Kornblith S, Hinton G E. When does label smoothing help?[J]. Advances in neural information processing systems, 2019, 32.
[8] Chandrasegaran K, Tran N T, Zhao Y, et al. Revisiting Label Smoothing and Knowledge Distillation Compatibility: What was Missing?[C]//International Conference on Machine Learning. PMLR, 2022: 2890-2916.
[9] Zhang Q, Cheng X, Chen Y, et al. Quantifying the Knowledge in a DNN to Explain Knowledge Distillation for Classification[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2022.
[10] Romero A, Ballas N, Kahou S E, et al. Fitnets: Hints for thin deep nets[J]. arXiv preprint arXiv:1412.6550, 2014.
[11] Kim J, Park S U, Kwak N. Paraphrasing complex network: Network compression via factor transfer[J]. Advances in neural information processing systems, 2018, 31.
[12] Heo B, Lee M, Yun S, et al. Knowledge transfer via distillation of activation boundaries formed by hidden neurons[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2019, 33(01): 3779-3787.
[13] Zagoruyko S, Komodakis N. Paying more attention to attention: Improving the performance of convolutional neural networks via attention transfer[J]. arXiv preprint arXiv:1612.03928, 2016.
[14] Heo B, Kim J, Yun S, et al. A comprehensive overhaul of feature distillation[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 1921-1930.
[15] Yim J, Joo D, Bae J, et al. A gift from knowledge distillation: Fast optimization, network minimization and transfer learning[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4133-4141.
[16] Park W, Kim D, Lu Y, et al. Relational knowledge distillation[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 3967-3976.