论文分享:深度相互学习(Deep Mutual Learning)

写在前面

这是⼀篇CVPR2017年的⽂章,笔者今天才看到,表示惭愧,看完以后觉得写得很好,重点是简单干净且实用,我认为这篇⽂章算是⼀篇佳作,因此在这⾥给⼤家分享。这篇论⽂主要讲的通过多个模型的相互学习,从而提升各个模型各⾃的性能,效果优于模型蒸馏。与传统的优化⽅法相比, Deep Mutual Learning(DML)不是帮助我们找到⼀个更好的或者更深层次的训练损失最小值,而是帮助我们找到⼀个更⼴泛或者更可靠的最⼩值,它能更好地概括测试数据,更加健壮。某种程度上来说,很像⼀种深度的正则化⽅式。

论文分享:深度相互学习(Deep Mutual Learning)

DML 网络结构

Deep Mutual Learning

⽂章的核心思想⾮常简单,就是模型的相互学习,相互学习的⽅式就是增加⼀个监督不同模型输出的loss,使得不同模型的预测分布⼀致。在统计学⾥,有⼀个概念叫KL散度,在GAN⽹络⾥⾯很常⽤,KL 散度是⼀种衡量两个概率分布的匹配程度的指标,两个分布差异越⼤,KL散度越⼤。所以这⾥的监督loss就是KL散度。KL散度写成公式,长下面这样,p1和p2分别表示两个模型的概率预测:

论文分享:深度相互学习(Deep Mutual Learning)

KL散度

再加上各个模型的交叉熵损失,K个模型相互学习的完整loss可以写为:

论文分享:深度相互学习(Deep Mutual Learning)

K个模型的训练loss

说⽩了,就是各个模型正常训练,最后最各个模型的输出加上KL散度的监督 loss,优化策略也很简单,在每次训练迭代中,都计算两个模型的预测,并根据另⼀个模型的预测更新两个⽹络的参数,这个是通过KL-loss实现的。

论文分享:深度相互学习(Deep Mutual Learning)

优化策略

实验结果

实验结果有很多,这⾥就放⼀个吧,可以看出,经过Deep Mutual Learning后,参加相互学习的模型各⾃的性能都得到了提升,在CIFAR-100上达到了两个点的提升,还是很可观的。而且我们还能发现一个现象,两个模型使用同样的结构也能明显涨点,说明确实是这个优化策略起了作用。

论文分享:深度相互学习(Deep Mutual Learning)

DML对⽐实验

写在后面

⽂章在最后还讨论了为了深度相互学习策略可以奏效。作者⽐较了DML训练后的模型和单个模型在添加⾼斯噪声前后训练的损失变化。从左图可以看出两个模型的训练极⼩值是几乎相同的,但是在加⼊⾼斯噪声后,单模型的训练损失变化较大,而DML模型的训练损失变化较小。这表明DML模型找到了⼀个更⼴泛,健壮的最⼩值,进⽽能够提供更好的泛化性能。

论文分享:深度相互学习(Deep Mutual Learning)

加⼊⾼斯噪声前后loss变化

那么问题来了,DML是怎样找到这个更加鲁棒的最⼩值的呢?DML会通过KL散度判断相似性要求每个网络与其辅助网络的概率估计分布一致,通俗的说,如果给定网络预测为零,⽽其对等网络预测为⾮零,则该网络将受到严重惩罚。总体上,DML是指,当每个网络独⽴地将⼀个关注点放在⼀个小的次概率集合上时,DML中的所有网络都倾向于聚合它们对次级概率的预测。也就是说所有的网络把重心放在次概率上,并且把更多重心放在更明显的次概率上。因此,DML是通过对“合理的” 次概率预测的相互概率匹配来寻找更宽泛的最小值。很合理啊。


分享到:


相關文章: