老师,
您辛苦了
“师者,所以传道受业解惑也。”
教师,是神圣而伟大的职业,倾其所能,教书育人,桃李遍开花。
今天是教师节,首先祝所有的老师们节日快乐!
(图片源于网络)
提到深度学习、老师这两个关键词,第一时间是不是想到的是站在讲台上,写着复杂的损失函数和信息论的授课讲师,亦或是教学视频里面,带你劈哩叭啦一行一行敲代码的实践老师?
感谢恩师之余,你是否知道,在深度学习的技术中,有这样一个有趣的算法竟然也包含着teacher和student的奥义?
不卖关子,它就是:
知识蒸馏(Distill)
一种既可以认为是迁移学习也可以认为是模型压缩的算法,最早由 Hinton 在 2015 年提出,不知道是不是也是受他多年教学生涯的启发呢。
化学课上的蒸馏,是不是又想起了高中的化学老师
深度学习技术里的模型蒸馏,虽然不是化学里面的概念,但其实也是一个非常形象的过程,在详细的技术介绍之前,我们先通俗的理解一下这个概念。
模型蒸馏,是指将一个复杂模型(teacher)所学习到的有效信息提取出来,迁移到一个更简单的模型(student)中去,这里就涉及到了“师”与“生”【知识传授】的概念。
我们都知道,对神经网络来说,模型结构越复杂,参数越多,网络能学习到的知识就越丰富,效果也越好。但是过于复杂的神经网络,它的运算量和资源消耗都是非常大的,不便于在移动端的部署。
我们将复杂网络类比成是teacher,teacher耗费大量的时间和精力,终于习得了大量的知识。此时,伟大的teacher将毕生所学中最精华的部分“蒸馏”和提炼出来,毫无保留地传授给student网络,能够让student 网络用很简单的结构,就掌握teacher网络中最精华最有价值的知识,从而达到逼近teacher的模型效果,可谓是“浓缩的都是精华”。
这就是对模型蒸馏最通俗的解释。
经模型蒸馏而得到的student网络,兼具结构简单、准确率高、运算量和资源消耗小等优点。模型蒸馏一般被归类到模型压缩算法中,算是众多模型压缩算法中的一个,在具体了解模型蒸馏之前,我们一起来看看它的大家族模型压缩工具集吧。
01
飞桨模型压缩工具集PaddleSlim
除模型蒸馏外,PaddleSlim还提供了模型剪裁、量化训练、轻量神经网络结构自动搜索等功能,并且支持多种压缩策略的组合使用,帮助您的模型减肥瘦身!
我们以MobileNetV1模型为Baseline,在ImageNet 1000类分类任务上对PaddleSlim的压缩效果进行了实测:
采用【ResNet50蒸馏训练+量化】的策略,模型大小由17.0M压缩至4.8M,实现了71.76%的压缩,精度不但没有损失反而提升了1.38%(top5)和1.06%(top1)。
采用【剪裁-50% FLOPS+量化】的策略,模型大小由17.0M压缩至2.3M,实现了86.47%的压缩,精度损失只有0.43%(top5)和1.71%(top1)。
详细数据如下:
以MobileNet v2为Baseline,基于模拟退火的自动剪枝策略和轻量级模型结构自动搜索功能Light-NAS在精度几乎无损的情况下,FLOPS 减少了17%。详细数据如下:
02
PaddleSlim压缩算法介绍
PaddleSlim提供了模型蒸馏、模型剪裁、量化训练、轻量神经网络结构自动搜索等多种压缩算法,下面我们逐一地进行介绍。
2.1 模型蒸馏
在PaddleSlim工具包中,支持两种模型蒸馏的方法。
(1) 传统的蒸馏方法
模型蒸馏的概念,最早由Hinton 在 2015 年提出,核心思想是用一个或多个训练好的 teacher(大模型)指导 student(小模型)进行训练,在论文「Distilling the Knowledge in a Neural Network」中,对于分类任务要学习的目标,将图片实际的类别概率信息称为 hard target(只有真实类别对应的概率为 1,其他为 0),而模型输出的类别概率信息称为 soft target(各个类别概率都为一个大于 0 的值)。
由于类别之间具有相关性,softtarget 相比 hard target 具有更高的信息熵,比如一张猫的图片,在 soft target 中,其分到狗的概率一般会大于分到汽车的概率,而不是 hardtarget 中将它们都设置为 0,导致没有区别。
使用大模型产生 softtarget 代替 hard target 能获得更多的信息和更小的梯度方差,可以达到更好的性能。一般模型蒸馏的流程如下,先训好一个大模型,让后让小模型去拟合大模型产生的 soft target,在蒸馏结束后,一般还会使用真实的 label 信息进行 fine-tuning,如下图所示:
另外,为了使 softtarget 中各个类别的概率值更加平滑,文章中还引入了一个温度系数 T 的概念,对大模型输出的概率值做一个平滑处理,具体公式如下:
T 一般被设置成一个大于 1 的数,T值越大,输出的概率值越平滑。
(2) 基于FSP的蒸馏方法
相比传统的蒸馏方法直接用小模型去拟合大模型产生的soft target,论文「A Gift from Knowledge Distillation: FastOptimization, Network Minimization and Transfer Learning」尝试用小模型去拟合大模型不同层特征之间的转换关系(flow of the solution procedure),用一个 FSP 矩阵(特征的内积)来表示不同层特征之间的关系,计算公式如下:
大模型和小模型不同层之间分别获得多个 FSP 矩阵,对于 Resnet 网络结构,每个 stage 可产生一个 FSP 矩阵,然后使用 L2 loss 让小模型的对应层 FSP 矩阵和大模型对应层的 FSP 矩阵尽量一致,具体公式如下:
基于FSP的蒸馏全过程如下图:
FSP蒸馏方法的效果是优于传统蒸馏方法的。
通俗一点的解释是,蒸馏的过程其实就是teacher(大模型)教 student(小模型)解决问题的过程。在教学的过程中,传统蒸馏方法是teacher直接告诉student这道问题的答案,让小模型记住;而FSP蒸馏方法则是让student学习teacher在解决问题时的中间过程和方法。
正所谓“授人以鱼不如授人以渔”,FSP蒸馏方法自然能取得更优的效果。
除了模型蒸馏之外,PaddleSlim还提供了多种模型压缩算法
2.2 模型剪裁
2.3 量化训练
a:支持动态和静态两种量化训练方式
b:支持对权重全局量化和Channel-Wise量化
c:支持以兼容Paddle Mobile的格式保存模型
2.4 轻量神经网络结构自动搜索
2.5 其它功能
03
传送门
PaddleSlim实战教程:
https://github.com/PaddlePaddle/models/blob/v1.5.1/PaddleSlim/docs/usage.md
想与更多的深度学习开发者交流,请加入飞桨官方QQ群:796771754。
如果您想详细了解更多飞桨PaddlePaddle的相关内容,请参阅以下文档。
官网地址:https://www.paddlepaddle.org.cn
项目地址:
https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleSlim