知识蒸馏

Distilling the Knowledge

涉及两个模型,形式不限

teacher-model:复杂

student-model:简单

s-model通过学习t-model的softmax层的概率分布学习其泛化能力

如图所示,s-model概率分布为p,t-model的概率分布为q

真实的类别为h,t-model预测的类别为g

 

 则最后s-model向t-model学习的loss为

 

1.相互学习策略(DML,Deep Mutual Learning)

打破预先定义好的强弱关系,没有学生和老师的区别

只有学生和学生之间的相互学习

loss函数和蒸馏学习(DK)差不多

不过DML有几个特点去保证训练效果

1.每个网络从不同的初始状态开始

每个网络的初始状态不同意味着学习的方向和侧重点也会有所改变

2.网络效果随队列中网络数量的增加而增加

意思就是采百家所长,每个网络学习到的东西有差别,可以相互弥补

3.适用于异构群组(学生网络的差别越大越好)

每个网络差别的越大,学习到的中间特征差别就越大

4.相互训练的大型网络也能提高性能

说明异构网络不仅仅局限于简单的小模型,对于大型的网络也可以使用DML

5.整个队列可以整合成一个高效的集成模型

就是可以把使用到的各个模型进行打包

总结一下DML的思想就是

集百家所长,所涉及的网络差异性越多,差异性越大,越能相互弥补和学习不同的特征,训练后的效果越好

2.FitNet(Hint for Thin Deep Nets)

先让s-model学习t_model如何产生内部feature,再应用baseline KD

意思就是原本的baseline KD让s-model学习t-model的答案,这次连解题过程一起学习

解题过程怎么学习?

很简单啊,loss值嘛。

比较t-model和s-model中间特征之间的差别就行了呀

根据图中所示只要比较W(Hint)和W(Guided)之间的差别就行了

那么还有一个问题,两个网络不一样呢,所以中间特征的tensor形状不一样啊

那就找个中间变量化成一样的呗

所以搞一个W(r)将学生网络的特征tensor转化成和老师网络的特征tensor形状一致

思想和做法搞明白了,把公式一带:

解题过程学习完了,再学习一下答案

3. Attention to Attention Transfor

顾名思义,划重点

t-model和s-model的差别很大

只能拿出大学生期末必备技能--划重点了

对重要的特征进行学习,学生拟合重点信息

希望student和teacher之间attention mapping越接近越好

什么是attention mapping?

就是找主要特征

 怎么找到主要特征

我们的一个潜在假设是,隐层神经元激活(网络在预测时的结果)的绝对值可以用于指示这个神经元的重要性,这样我们可以计算通道维度的统计量

这句意思就是将特征的3-D tensor转化为在通道维度上叠加的特征图

 

 有下面几种求解方式:

原论文大佬通过实验得到几种方式的结果差异

 实验结果为当p=2时结果时最好的,也就是说L2范数的平方吧

(L1和L2 详解(范数、损失函数、正则化) - 人工智能的文章 - 知乎 https://zhuanlan.zhihu.com/p/137073968)

 现在我们得到重点特征图了,接下来要做的就是将attention map和KD结合起来

损失函数

我还没有看过这个损失函数的物理意义,暂时只是用来代公式

 其中Q(s)和Q(t)分别代表student和teacher的attention map,bate为超参数。整个损失函数相当于原本KD损失函数加上一个惩罚项

(PAYING MORE ATTENTION TO ATTENTION: 通过注意力迁移提高CNN性能 - Cugtyt的文章 - 知乎 https://zhuanlan.zhihu.com/p/55643612)

4.Knowledge Distillation with Adversarial Samples Supporting Decision Boundary

这是一种划重点样本的方法

什么是划重点样本?

接近不同类别边界的样本更具代表性

对于模棱两可,接近边界的样本要是能准确分类,挑战性和泛化能力都会有很大的提高

怎么得到重点样本?

对于这些边界样本一个个找那就麻烦死了,何况自己找出来的还不一定对

所以论文采用了一种对抗攻击的思想

adversarial attack:对样本增加微小的干扰,使网络的输出结果错误

根据这种思想,可以利用原样本增加细微的差别,生成其他类别的样本

这种差别很小,人类看不出来

具体过程

fb(x)表示x在原类别的网络输出概率,fk(x)表示x在目标类别的网络输出概率

当loss值等于0,样本在两个类别的边界,当loss小于0时就完成了从b类别到k类别的转换

 通过不断迭代的方式,使得实例不断向边界移动

 

更多推荐