热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

趣味深度学习系列(一):深度学习技术中的“教师”与“学生”

老师,您辛苦了“师者,所以传道受业解惑也。”教师,是神圣而伟大的职业,倾其所能,教书育人,桃李遍

老师,

您辛苦了

“师者,所以传道受业解惑也。”

教师,是神圣而伟大的职业,倾其所能,教书育人,桃李遍开花。

今天是教师节,首先祝所有的老师们节日快乐!

(图片源于网络)

提到深度学习、老师这两个关键词,第一时间是不是想到的是站在讲台上,写着复杂的损失函数和信息论的授课讲师,亦或是教学视频里面,带你劈哩叭啦一行一行敲代码的实践老师?

 

感谢恩师之余,你是否知道,在深度学习的技术中,有这样一个有趣的算法竟然也包含着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 模型剪裁

  • 支持通道均匀模型剪裁(uniform pruning)、基于敏感度的模型剪裁、基于进化算法的自动模型剪裁三种方式

  • 支持VGG、ResNet、MobileNet等各种类型的网络

  • 支持用户自定义剪裁范围

    2.3 量化训练

a:支持动态和静态两种量化训练方式

  • 动态策略: 在推理过程中,动态统计激活的量化参数。

  •  静态策略: 在推理过程中,对不同的输入,采用相同的从训练数据中统计得到的量化参数。

b:支持对权重全局量化和Channel-Wise量化

c:支持以兼容Paddle Mobile的格式保存模型

    2.4 轻量神经网络结构自动搜索

  • 支持基于进化算法的轻量神经网络结构自动搜索(Light-NAS)


    2.5 其它功能

  • 支持配置文件管理压缩任务超参数

  • 支持多种压缩策略组合使用

  • 蒸馏和模型剪裁压缩过程支持checkpoints功能

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 


推荐阅读
author-avatar
手机用户2502932551
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有