摘要:常识蒸馏(knowledge distillation)是模型压缩的一种罕用的办法

一、常识蒸馏入门

1.1 概念介绍

常识蒸馏(knowledge distillation)是模型压缩的一种罕用的办法,不同于模型压缩中的剪枝和量化,常识蒸馏是通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。最早是由Hinton在2015年首次提出并利用在分类工作下面,这个大模型咱们称之为teacher(老师模型),小模型咱们称之为Student(学生模型)。来自Teacher模型输入的监督信息称之为knowledge(常识),而student学习迁徙来自teacher的监督信息的过程称之为Distillation(蒸馏)。

1.2 常识蒸馏的品种

图1 常识蒸馏的品种

1、 离线蒸馏

离线蒸馏形式即为传统的常识蒸馏,如上图(a)。用户须要在已知数据集下面提前训练好一个teacher模型,而后在对student模型进行训练的时候,利用所获取的teacher模型进行监督训练来达到蒸馏的目标,而且这个teacher的训练精度要比student模型精度要高,差值越大,蒸馏成果也就越显著。一般来讲,teacher的模型参数在蒸馏训练的过程中放弃不变,达到训练student模型的目标。蒸馏的损失函数distillation loss计算teacher和student之前输入预测值的差异,和student的loss加在一起作为整个训练loss,来进行梯度更新,最终失去一个更高性能和精度的student模型。

2、 半监督蒸馏

半监督形式的蒸馏利用了teacher模型的预测信息作为标签,来对student网络进行监督学习,如上图(b)。那么不同于传统离线蒸馏的形式,在对student模型训练之前,先输出局部的未标记的数据,利用teacher网络输入标签作为监督信息再输出到student网络中,来实现蒸馏过程,这样就能够应用更少标注量的数据集,达到晋升模型精度的目标。

3、 自监督蒸馏

自监督蒸馏相比于传统的离线蒸馏的形式是不须要提前训练一个teacher网络模型,而是student网络自身的训练实现一个蒸馏过程,如上图(c)。具体实现形式 有多种,例如先开始训练student模型,在整个训练过程的最初几个epoch的时候,利用后面训练的student作为监督模型,在剩下的epoch中,对模型进行蒸馏。这样做的益处是不须要提前训练好teacher模型,就能够变训练边蒸馏,节俭整个蒸馏过程的训练工夫。

1.3 常识蒸馏的性能

1、晋升模型精度

用户如果对目前的网络模型A的精度不是很称心,那么能够先训练一个更高精度的teacher模型B(通常参数量更多,时延更大),而后用这个训练好的teacher模型B对student模型A进行常识蒸馏,失去一个更高精度的模型。

2、升高模型时延,压缩网络参数

用户如果对目前的网络模型A的时延不称心,能够先找到一个时延更低,参数量更小的模型B,通常来讲,这种模型精度也会比拟低,而后通过训练一个更高精度的teacher模型C来对这个参数量小的模型B进行常识蒸馏,使得该模型B的精度靠近最原始的模型A,从而达到升高时延的目标。

3、图片标签之间的域迁徙

用户应用狗和猫的数据集训练了一个teacher模型A,应用香蕉和苹果训练了一个teacher模型B,那么就能够用这两个模型同时蒸馏出一个能够辨认狗,猫,香蕉以及苹果的模型,将两个不同与的数据集进行集成和迁徙。

图2 图像域迁徙训练

4、升高标注量

该性能能够通过半监督的蒸馏形式来实现,用户利用训练好的teacher网络模型来对未标注的数据集进行蒸馏,达到升高标注量的目标。

1.4 常识蒸馏的原理

图3 常识蒸馏原理介绍

个别应用蒸馏的时候,往往会找一个参数量更小的student网络,那么相比于teacher来说,这个轻量级的网络不能很好的学习到数据集之前暗藏的潜在关系,如上图所示,相比于one hot的输入,teacher网络是将输入的logits进行了softmax,更加平滑的解决了标签,行将数字1输入成了0.6(对1的预测)和0.4(对0的预测)而后输出到student网络中,相比于1来说,这种softmax含有更多的信息。好模型的指标不是拟合训练数据,而是学习如何泛化到新的数据。所以蒸馏的指标是让student学习到teacher的泛化能力,实践上失去的后果会比单纯拟合训练数据的student要好。另外,对于分类工作,如果soft targets的熵比hard targets高,那显然student会学习到更多的信息。最终student模型学习的是teacher模型的泛化能力,而不是“过拟合训练数据”

二、入手实际常识蒸馏

ModelArts模型市场中的efficientDet指标检测算法目前曾经反对常识蒸馏,用户能够通过上面的一个案例,来入门和相熟常识蒸馏在检测网络中的应用流程。

2.1 筹备数据集

数据集应用kaggle公开的Images of Canine Coccidiosis Parasite的辨认工作,下载地址:https://www.kaggle.com/kvinic...。用户下载数据集之后,公布到ModelArts的数据集治理中,同时进行数据集切分,默认依照8:2的比例切分成train和eval两种。

2.2 订阅市场算法efficientDet

进到模型市场算法界面,找到efficientDet算法,点击“订阅”按钮

图4 市场订阅efficientDet算法

而后到算法治理界面,找到曾经订阅的efficientDet,点击同步,就能够进行算法训练

图5 算法治理同步订阅算法

2.3 训练student网络模型

起一个efficientDet的训练作业,model_name=efficientdet-d0,数据集选用2.1公布的曾经切分好的数据集,抉择好输入门路,点击创立,具体创立参数如下:

图6 创立student网络的训练作业

失去训练的模型精度信息在评估后果界面,如下:

图7 student模型训练后果

能够看到student的模型精度在0.8473。

2.4 训练teacher网络模型

下一步就是训练一个teacher模型,依照efficientDet文档的形容,这里抉择efficientdet-d3,同时须要增加一个参数,表明该训练作业生成的模型是用来作为常识蒸馏的teacher模型,新起一个训练作业,具体参数如下:

图8 teacher模型训练作业参数

失去的模型精度在评估后果一栏,具体如下:

图9 teacher模型训练后果

能够看到teacher的模型精度在0.875。

2.5 应用常识蒸馏晋升student模型精度

有了teacher网络,下一步就是进行常识蒸馏了,依照官网文档,须要填写teacher model url,具体填写的内容就是2.4训练输入门路上面的model目录,留神须要选到model目录的那一层级,同时须要增加参数use_offline_kd=True,具体模型参数如下所示:

图10 采纳常识蒸馏的student模型训练作业参数

失去模型精度在评估后果一栏,具体如下:

图11 应用常识蒸馏之后的student模型训练后果

能够看到通过常识蒸馏之后的student的模型精度晋升到了0.863,精度相比于之前的student网络晋升了1.6%百分点。

2.6 在线推理部署

训练之后的模型就能够进行模型部署了,具体点击“创立模型”

图12 创立模型

界面会主动读取模型训练的保留门路,点击创立:

图13 导入模型

模型部署胜利之后,点击创立在线服务:

图14 部署在线服务

部署胜利就能够进行在线预测了:

图15 模型推理后果展现

三、常识蒸馏目前的应用领域

目前常识蒸馏的算法曾经广泛应用到图像语义辨认,指标检测等场景中,并且针对不同的钻研场景,蒸馏办法都做了局部的定制化批改,同时,在行人检测,人脸识别,姿势检测,图像域迁徙,视频检测等方面,常识蒸馏也是作为一种晋升模型性能和精度的重要办法,随着深度学习的倒退,这种技术也会更加的成熟和稳固。

参考文献:

[1]Data Distillation: Towards Omni-Supervised Learning

[2]On the Efficacy of Knowledge Distillation

[3]Knowledge Distillation and Student-Teacher Learning for Visual Intelligence: A Review and New Outlooks

[4]Towards Understanding Knowledge Distillation

[5]Model Compression via Distillation and Quantization

**[点击关注,第一工夫理解华为云陈腐技术~](https://bbs.huaweicloud.com/b...
)**