模型压缩的一种常用的方法--知识蒸馏入门

知识蒸馏(知识蒸馏)是模型压缩常用的方法。 与模型压缩中的剪枝和量化不同,知识蒸馏通过构建轻量级的小模型并使用性能更好的较大模型的监督信息来进行训练。 这个小模型旨在实现更好的性能和准确性。 它于 2015 年首次提出并应用于分类任务。我们称这种大模型(教师模型)和小模型(学生模型)。 模型输出的监督信息称为(知识​​),学习从中迁移监督信息的过程称为(蒸馏)。

1.2 知识蒸馏的类型

图1 知识蒸馏的类型

1. 离线蒸馏

离线蒸馏方法就是传统知识蒸馏,如上图(a)所示。 用户需要预先在已知的数据集上训练一个模型,然后使用得到的模型进行监督训练,以达到训练模型时蒸馏的目的。 而且,这样的训练精度比模型精度还要高。 值越大,蒸馏效果越明显。 一般来说,蒸馏训练过程中模型参数保持不变,以达到训练模型的目的。 将蒸馏后的损失函数损失计算与之前输出的预测值之间的差值,和损失相加作为整个训练损失来进行梯度更新,最终得到性能和精度更高的模型。

2. 半监督蒸馏

半监督蒸馏使用模型的预测信息作为标签,在网络上进行监督学习,如上面的(b)所示。 与传统的离线蒸馏方法不同,在训练模型之前,先输入部分无标签数据,将网络输出的标签作为监督信息再输入到网络中完成蒸馏过程,这样可以减少标注量用过的。 数据集以达到提高模型精度的目的。

3. 自监督蒸馏

与传统的离线蒸馏相比,自监督蒸馏不需要提前训练网络模型,而是通过网络本身的训练完成一个蒸馏过程,如上图(c)所示。 具体的实现方法有很多,比如先开始训练模型,在整个训练过程的最后几个epoch中使用之前训练好的模型作为监督模型,在剩下的epoch中蒸馏模型等。 这样做的好处是不需要提前训练模型,可以边训练边蒸馏,节省了整个蒸馏过程的训练时间。

1.3 知识蒸馏的作用

1. 提高模型精度

如果用户对当前网络模型A的精度不是很满意,可以先训练一个精度更高的模型B(通常参数更多,延迟更大),然后用这个训练好的模型B来评估模型A知识蒸馏以获得更高精度的模型。

2.减少模型延迟,压缩网络参数

如果用户对当前网络模型A的延迟不满意,可以先寻找延迟更低、参数数量更少的模型B。 一般来说,这个模型的准确率会比较低,然后训练一个更高准确率的模型C,用少量参数对模型B进行知识蒸馏,使模型B的准确率接近原始模型A,从而达到减少延迟的目的。

3.图像标签之间的域迁移

用户使用狗和猫数据集训练模型 A,并使用香蕉和苹果训练模型 B。 然后可以用这两个模型提炼出一个可以同时识别狗、猫、香蕉和苹果的模型。 集成和迁移不同的数据集。

图2 图像域迁移训练

4、减少贴标量

该功能可以通过半监督蒸馏来实现。 用户使用经过训练的网络模型来提炼未标记的数据集,以减少标记量。

1.4 知识蒸馏原理

图3 知识蒸馏原理介绍

一般来说,当使用蒸馏时,经常会发现参数较小的网络。 相比之下,这个轻量级网络无法很好地学习先前隐藏在数据集中的潜在关系,如上图所示。 与1个hot的输出相比,网络对输出的处理和标签的处理更加平滑,即将数字1输出为0.6(预测1)和0.4(预测0)然后输入到网络中,这类似于 这包含比 1 更多的信息。一个好的模型的目标不是拟合训练数据,而是学习如何泛化到新数据。 因此,蒸馏的目标是提高学习的泛化能力。 理论上,得到的结果会比简单拟合训练数据更好。 另外,对于分类任务,如果软的熵高于硬的熵,那么显然会学到更多的信息。 最终模型学到的是模型的泛化能力,而不是“过拟合训练数据”

2. 实践知识升华

模型市场中的目标检测算法目前支持知识蒸馏。 用户可以通过以下案例来入门并熟悉在检测网络中使用知识蒸馏的过程。

2.1 准备数据集

数据集使用公开的识别任务,下载地址://-。 用户下载数据集后,发布到数据集管理,同时对数据集进行拆分。 默认情况下,数据集按照8:2的比例分为train和eval。

2.2 订阅市场算法

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

图4 市场认购算法

然后进入算法管理界面,找到您已经订阅的算法,点击同步即可开始算法训练。

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender