参考:
github文章库1:Awesome Knowledge-Distillation(分类整理)
github文章库2:Awesome Knowledge-Distillation
代码库:
Knowledge-Distillation-Zoo
https://github.com/HobbitLong/RepDistiller(实现了许多基于特征的知识蒸馏方法)
Knowledge-Distillation 知识蒸馏论文集合(xys:2020年)
知识蒸馏简述(一)
知识蒸馏简述(二)
知识蒸馏是什么?一份入门随笔
【经典简读】知识蒸馏(Knowledge Distillation) 经典之作(xys:关于温度T的讨论)
知识蒸馏:深入理解温度的作用
综述
Knowledge Distillation & Student-Teacher Learning for Visual Intelligence: A Review & New Outlooks
2021-Knowledge Distillation A Survey
经典论文
-
论文:Distilling the Knowledge in a Neural Network(hinton开山之作)
解读 深度学习-论文阅读-知识蒸馏 -
在线多分支融合——Knowledge Distillation by On-the-Fly Native Ensemble
—github代码
(xys:该文章特别提到,需要采用半监督学习中的ramp up策略(1、该策略认为,半监督学习中的早期,无标签部分的权重要逐渐从0到1,并且这个上升过程要足够慢。2、官方源代码中用了80个epoch。3、该策略详见本人另一篇博文:https://editor.csdn.net/md/?articleId=86633225)) -
深度模型压缩论文(03)- ICCV2019–Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self distillation—(resnet不同层之间的蒸馏,有源码)
升级版:Multi-self-distillation learning via multi-classifiers within deep neural networks(resnet不同层之间的蒸馏)
深度互学习-Deep Mutual Learning:三人行必有我师
多教师蒸馏
【论文笔记_多教师知识蒸馏_2022】CONFIDENCE-AWARE MULTI-TEACHER KNOWLEDGE DISTILLATION----源代码:https://github.com/Rorozhl/CA-MKD
应用
阴影检测:2020-CVPR-A Multi-task Mean Teacher for Semi-supervised Shadow Detection
【论文笔记】CVPR2020 A Multi-task Mean Teacher for Semi-supervised Shadow Detection
知识蒸馏与模型压缩
深度学习模型压缩技术发展的怎么样了?—评价了各种不同的模型压缩方法。
A Survey of Model Compression and Acceleration for Deep Neural Networks—每种方法后都有小讨论
精华摘要
那么有没有一种方法可以从训练的庞大模型中抽取出它的精华,萃取知识,去掉一些繁琐的结构,轻松上线?
-
什么是模型知识
既然我们想到要萃取模型的知识,先来思考下什么是模型知识,顾名思义是模型本身蕴含的信息。
模型信息从两方面进行考虑:- 一方面,模型信息可以看做是模型的结构和学习到的参数,这个是比较直接的,目前预训练的模式就是这种思想;
- 另一方面,模型蕴含的知识信息可看做一个向量转换器(是一种转换方式),我们不需要关心这种转换方式是如何实现的,而只关心是否可以通过一个简单的结构学到这种转换方式。
Hinton提出可以通过一个简单模型直接学习复杂模型的概率分布结果,如果one-hot的目标是一种hard-targets,那么这种模型知识就是一种soft-targets。
-
soft-targets
soft-targets相比hard-targets是提供了更多信息,即使某些信息也许是错误的,因为模型不可能完美切合目标,但那也是一种美丽的错误。以手写数字识别任务为例,比如某张图片是数字"3",模型给出的概率分布是数字“3”的概率是0.8,数字"2"的概率是0.1,“8”的概率是0.0001,“9”的概率是0.00011,如果只从这张图片来看,是否可以认为,数字2相比数字8,9,会与3更相似,而8和9也是比较相似的。这种信息在hard-targets里面都是抽取不出来的。 -
soft-targets不那么好用,需要升温平滑
如果我们直接使用复杂模型得到的概率分布作为轻量模型的学习目标,对于那些对预测有很高置信的模型,非正确类别的概率是非常小的,那么这部分soft信息在损失函数中起的影响微乎其微,就被丢失了。
Hinton提出了升温蒸馏的概念,温度就是其中的关键点,升温蒸馏,降温预测,完美。
其中温度T就是用来做平滑的,T越大,平滑力度越大,使得轻量模型学习时可以关注到那些概率很小的类别;T越小,则相反,T=1时,就是平常所见的概率分布。
-
hard-targets不能丢,结合才好用
论文中没有完全丢弃hard-targets,而是与soft-targets结合使用,风味更佳。因为有时soft-targets并没有那么准确,那么hard-targets可以作为一座灯塔指引轻量模型学习的方向。这种思想与迁移学习的某些理论也是契合的。
那么对于轻量模型来说,此时就有两种loss,一种loss是训练soft-targets,这种目标是通过升温复杂模型得到的,另一种loss是训练hard-targets得到的,此时不升温,即T=1,最后的loss是这两种loss的加权和。在做反向传播时,loss1得到梯度应该乘以 T^2 ,具体为什么可以观察公式9可得到结论。 -
模型集成实验
hinton集成模型训练,即通过训练多个结构相同的模型得到较好的泛化效果,但当数据集的样本很大,类别数很大时,这样训练集成模型会费时费力,如JFT数据集有一亿张图片,15000个类别。
Hinton在论文中利用soft label设计了一种集成模型,降低计算量的同时取得较好的效果。这种集成模型中包含两类模型generalist model 和 specialist model,两类模型结构相同,目标不同。集成模型由一个generalist model 和多个specialist model组成。generalist model利用所有的数据集训练一个大模型对所有的类别进行打分。specialist model是将比较相似的类别进行进一步细分,输入的数据集一部分是相似类别的数据集,一部分是其他类别数据集的抽样,其他类别统归为一类。
如何衡量那些类别比较相似会直接决定那些类别构成一个specialist model,Hinton在这里没有直接使用真实类别来评估,而是通过generalist model 产出的类别概率分布,计算类别间的协方差矩阵,后通过k-means进行聚类,抱团在一起的类别则进一步训练specialist model。
由于specialist model依赖的数据集较小,容易发生过拟合,因此Hinton提出了两种方法来减少过拟合:一种是利用generalist model 的参数作为specialist model的初始化参数,另一种就是蒸馏的思路,利用generalist model 产生的soft-label,这里不再赘述。
在预测时,分为两步,第一步是通过generalist model 预测得到类别的概率分布 p g p^g pg,取Top1(也可以是其他数字)的类别;第二步将涉及到第一步top1类别的specialist model都挑出来进行预测,得到概率分布 p m p^m pm,然后求使得以下KL散度最小的 ,作为最后输出的概率