多教师多学生模型知识蒸馏

这两天要研究这个方向,准备先找几篇论文看看。
第一篇: 【MULTI-TEACHER KNOWLEDGE DISTILLATION FOR COMPRESSED VIDEO ACTION RECOGNITION ON DEEP NEURAL NETWORKS】
在google一搜multi-teacher knowledge distillation就出来这一篇,虽然看着不太靠谱,但是看论文主要是为了找灵感,所以我还是打算认真看看。碰巧今天又在重感冒,脑子迷迷糊糊的,就用了大量时间看相关工作的介绍,当作是复习之前的知识蒸馏的基本原理啦。
墨迹到下午脑子清醒了点,就开始挑刺啦。有一说一,我写作业的时候都不会用重复甩公式的法子来凑字数,这篇论文介绍个别人已经介绍了几百遍的蒸馏原理还能把一样的公式放两遍的???明明都在一页上,怕我们看不着吗???语法错误不谈了,看得我脑壳疼。直接说说这个模型。
我本来以为多老师模型传递知识是个多么高级的方法啊,原来就直接加权平均???加权平均还能发个论文的???这不就是个模型集成吗???作者们估计也觉得不好意思了,再后面说多学生的时候就一句话带过了“n the results of the separate students was fused for final prediction.” 我看了眼图,明白了,还是加权平均。虽然论文不长,一看就是水论文,但是整篇论文唯一一个原创公式就是加权平均也太扯啦。
q t T = μ 1 × q t 1 T + μ 2 × q t 2 T + μ 3 × q t 3 T μ 1 + μ 2 + μ 3 q^T_t=\frac{\mu_1\times q^T_{t_1}+\mu_2\times q^T_{t_2}+\mu_3\times q^T_{t_3}}{\mu_1+\mu_2+\mu_3} qtT?=μ1?+μ2?+μ3?μ1?×qt1?T?+μ2?×qt2?T?+μ3?×qt3?T??
一个加权平均还整的挺高级有分母有分子的,最扯的是我还真就认认真真看了半天。
果然看论文的时候还是需要在脑子清醒的时候看。
第二篇 【多教师多学生模型知识蒸馏】【Deep Mutual Learning】
深度互学习这个idea易于理解并且看起来十分可行。核心思想是同时训练的不同模型在次要分类上的差异成为了可以用来相互借鉴的额外信息。即使是一起训练的模型,在方向上也存在差异,这个idea就是让两个或多个模型边训练边学习,一边学习groundtruth一边学习同伴给出的信息,即互为导师也互为学生。
两个模型的损失函数分别为
L Θ 1 = L C 1 + D K L ( p 2 ∣ ∣ p 1 ) L_{\Theta_1}=L_{C_1}+D_{KL}(p_2||p_1) LΘ1??=LC1??+DKL?(p2?∣∣p1?)
L Θ 2 = L C 1 + D K L ( p 1 ∣ ∣ p 2 ) L_{\Theta_2}=L_{C_1}+D_{KL}(p_1||p_2) LΘ2??=LC1??+DKL?(p1?∣∣p2?)
在训练过程中,模型是交替更新的,更新完第一个模型后,再计算下一个模型要更新的梯度,依此反复。
再多个模型一起学习的情况下,第二个损失函数要取多模型的均值。在蒸馏学习中,硬目标损失永远是占主导的,别的损失起到的都是指导作用。也可以把剩下多个模型看成一个集成来进行指导,不过看成集成的效果不如分开指导的效果好。
L Θ k = L C k + 1 K ? 1 ∑ l = 1 , l ≠ k k D K L ( p l ∣ ∣ p k ) L_{\Theta_k}=L_{C_k}+\frac{1}{K-1}\sum^k_{l=1,l\ne k}D_{KL}(p_l||p_k) LΘk??=LCk??+K?11?l=1,l?=k∑k?DKL?(pl?∣∣pk?)
目前已经开始按照这个做了,先用了两个模型,然后暗搓搓地加上了soft target这一部分,结果还没跑出来,训练速度相对来说有点慢,感觉要跑很久的样子。
第三篇 【Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation】
这篇论文把一个网络看成了好几个小分类器,对每个小分类器都计算损失。损失主要有三种:

  1. 标签和来自所有分类器的输出的交叉熵损失。
  2. 学生和老师的softmax层的kl散度损失。
  3. 中间层的L2损失。
这里的老师模型指的是最深层的分类器,学生模型指所有浅层的分类器。中间层的部分使用啦bottleneck使得特征图大小变得一致,和之前使用普通regressor的思想其实是一样的。
创新点在于模型内部蒸馏,虽然用的各种损失都是之前别人提出来的,但也还算可以吧。不过可能不是很适合我正在做的这个模型,有时间的话可以多看看。

    推荐阅读