理解知识蒸馏

介绍

首先简单介绍下蒸馏在干什么,蒸馏就是两个模型,一个是老师模型,一个是学生模型。顾名思义,老师模型就是来知道学生模型。老师模型很庞大,就像一个大师,什么都懂;而学生模型相对较小,是一个轻量级的模型,其通过不断学习达到跟老师模型相近的精度。

为什么要训练学生模型呢?

是因为我们在追求精度的过程中使我们的模型越来越大,虽然获得了较高的精度,但模型过于庞大,无法真正应用到实际生产生活中,所以我们需要一个较小的模型,即学生模型。俗话说“教会徒弟饿死师傅”,我们的目的就是让学生模型达到较高的精度并且落地应用。

学习过程

在介绍之前我们需要了解一个概念:蒸馏温度T。引入这个概念是因为错误样本之间的区别也隐含了一些知识。
在这里插入图片描述
假设一个网络预测物体为马还是驴还是汽车,这里给出了网络预测结果。可以看出两个的区别,一个是hard targets非0即1;还有一个是soft targets 结果在0-1之间。后面这种包含了更多的信息:不光表明该物体最有可能是马,还表示其与汽车的区别程度和它与驴的区别程度的不同。
蒸馏温度T的作用如下所示:将各类别的概率拉近,来增大各类别之间的区别。再解释一下啊(可以看下面的猫狗马猪的预测概率图,当T=1时虽然狗的预测概率跟别的差距很明显,但其它类之间的差距较小;当T=3时,就可以将其他类之间的区别变大,使得模型不光学习到该物体是哪一类,还可以学习到更多别的类与这一物体的差距信息)。
另外改变T就是改变softmax函数,T=1时就是softmax函数,T改变时就变成了下图左上角的函数,我们就是通过改变它来改变概率分布的。
在这里插入图片描述
了解完T的概念后我们来看如何蒸馏,也就是老师怎么交学生。
在这里插入图片描述
学习过程总览图如上图所示,我们先训练好一个又大又好的老师模型,学生模型规模较小,可以是没训练过也可以是训练过一半。我们将输入分别传给两个模型,老师模型得到之后进行输出,将T设置为t(t大于1),这样做的目的可以理解为老师在教学生时,不光告诉它这个物体为马,还告诉他驴跟他有点像,但是汽车跟马和驴一点都不像。学生模型进行两种输出,一种跟老师模型一样,将T设置为t,与老师模型比较算损失函数;另一种是将T设置为1,与真实值Groudtruth进行损失计算。两个损失函数得到的值按比例相加得到总的损失值。
这是最经典的蒸馏模型,后续有很多对其的改进。就上述模型而言其实跟人类很像,学生不光要对着课本(groudtruth)学习,还要听老师传授的经验。还有一种改进是老师对学生模型的教授不仅仅在最后一步,可以在之前的某一层,这个也很容易理解:老师在教学生时把自己的脑回路也传授给学生“徒儿,这件事,为师第一层想到了这里,第五层想到了这里,最后一层想到了这里。”

发展趋势

到这里,蒸馏就大概给大家讲清楚了,这一概念其实很容易理解,因为跟人类求学的模式很像。所以我们对此有很多改进,比如“教学相长”,不止是老师教学生,学生也可以教老师;还有“三个臭皮匠顶个诸葛亮”,我们现实生活中就有助教的存在,可以设置一个助教的模型,另外还可以考虑多个老师或者多个学生。这些就留给大家思考吧。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馆长布鲁克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值