知识蒸馏算法_原理&综述


  • 权重剪枝:结构化剪枝,整层整层地剪,整通道整通道地剪
  • 通道剪枝:非结构化剪枝,一根树杈子,一根树杈子剪
  • 加速卷积运算:将卷积运算转换成张量运算,这里面有很多卡脖子的技术,这也是MATLAB软件非常牛的关键,底层有很多数值运算的功能,都是MATLAB的核心技术,这点是无法被Python这种开源的编程语言所取代的;也是无法被开源计算库所取代的,特别是发射一个火箭,谁也没法保证到小数点后几位,但是MATLAB却可以;这里面有很多卡脖子的技术。
  • 如果使用OpenVino的话,可以使用Intel神经网络计算棒
  • FPGA和集成电路,也可以部署人工智能算法
  • 比如说MnasNet和MobileNetV3就是把NAS和轻量化网络进行了结合,就是让人工智能自己去设计一个轻量化的网络,而不用人去设计了
  • 预训练大模型的知识蒸馏

  • 论文来自于NIPS会议,是计算机视觉领域的顶级论文

  • 所以在训练教师网络的时候,可以使用hard target去训练,但是,当训练出了教师网络后,教师网络对这张图片的预测结果,也就是这个soft targets能够传递更多的信息

  • 那么也就可以使用这个soft target去训练学生网络

  • 那么现在目标就明确了,用包含了很多信息的标签去训练学生网络,这样效率就会更高

  • 现在还要进行一个操作,这个softtarget,还是不够soft,需要让它更加soft,也就是要知道这些非正确类别的概率,并把它解耦出来,给他暴露出来,所以这个时候就需要引入一个蒸馏温度T,这个温度T越高,这个soft label就越soft

  • 可以看出,当T越大,就越soft;当T=100的时候,这4类,就已经基本一样了,等于是基本没有贫富差距了

  • T越小的话,两极分化就越来越严重

  • softmax,本来就是将概率转换为0~1之间,并且使得其求和为1

  • 更软的soft-target去训练学生网络,那些非正确类别的概率就暴露得更彻底,更容易让学生网络去学习

  • 所以这里就可以举一个具体的例子:

  • 那学生网络与教师网络之间,是如何通过蒸馏来进行学习的呢?

  • 知识蒸馏的图解如下图所示:

  • distillation是有一个师傅在手把手教你,告诉你,这是一个马,更像驴,而不像车,驴和车有多像,有多不像;而下面的这个hardloss就是在告诉你,这个课本有一张马的插图,插图告诉你,这就是马,不是别的东西;所以,这两项,有一个师傅带,还有一个课本看;就是和我们普通人学习的过程是很像的。

  • 我们的目标就是,微调学生网络中的权重,使得最终的损失函数最小化;具体通过什么方法呢,就是通过梯度下降,反向传播的方法。

  • 你可以把学生网络中的若干个权重当做水龙头,我们要微调每一个水龙头,使得最终的total loss最小。

  • 它里面的所有权重,最终就可以使得,最终的损失函数最小化,或者说收敛到一个低值。

  • 前面这两个图是训练过程,后面这个图是预测过程,也叫做部署过程。

  • 少样本,甚至0样本,的学习,可以通过知识蒸馏来实现

就好比,我们从来没有见过大熊猫,但是天天有一个人来给我们讲解大熊猫是什么样,给我们讲大熊猫跟老虎有什么区别;当我们再见到大熊猫的时候,其实也知道这是一只大熊猫了。

右边,就是李宏毅老师的课程上面的图片

  • 这篇论文还在语音识别领域进行了应用,发现蒸馏之后,效果是非常好的,可以把单个模型集成10倍来训练一个教师网络,也可以用教师网络来训练一个更小的学生网络;可以看到,徒弟和老师,是非常类似的;而且,学生会更加轻量化。

  • 用softtarget去训练,而不是用hardlabel去训练的话,还有一个好处,就是可以防止过拟合。

  • 如果出现了过拟合,那么就要进行早停,dropout,正则化,那么一系列防止过拟合的操作,得密切监视测试集中准确率的变化。

  • 如果在测试集中,loss出现先增后降的现象,那么就要进行早停的操作。

  • 但是使用soft target去训练就没有这个问题,准确率一直都是在增加的,直到收敛,不会出现先增后降的情况

  • 迁移学习:把一个领域学习的东西,泛化到另一个领域,比如把猫狗域迁移到了医疗X光领域

  • 知识蒸馏:把一个模型的知识,迁移到另一个模型上,通常是大模型迁移到小模型

  • 迁移学习指的是领域之间的迁移,知识蒸馏指的是模型之间的蒸馏


  • 知识蒸馏背后的机理

这也是研究的热点,也是适合水论文的一个点

教师网络就会引导这个黄圈进行收敛,最终收敛到橙圈里面去

越靠近教师网路就越好,因为教师网络的性能更好

对bert进行知识蒸馏,也达到了很好的效果

为什么知识蒸馏是有效的?

知识蒸馏,就是学生网络在浩如烟海的书籍里面去翻书,但是教师网络指导一下,就不会漫无目的的翻书了

Label Smooth是为了防止网络对某一个类别过度自信,也就是会导致网络对某一个类别的输出趋向于无穷大,为了防止这一现象的发生,通常就是给其它类别也赋予一个常数的概率

知识蒸馏现代的前沿研究方向

每一个方向都是适合发很多论文的,适合自己来做毕业论文,或者适合自己做小论文的

可以和人工智能的所有领域发生化学反应

这个图展示了有多个老师,也就是多模态的一种范式

上面是3种蒸馏方法

上面这个就是有一些中间层的蒸馏,也就是脑回路的传授

下面这个博客,描述的是知识蒸馏的综述和历史发展

知识蒸馏的代码库





扩展阅读


Author: Ruimin Huang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ruimin Huang !
  TOC