Deep Mutual Learning

提出了一种新的深度学习策略——深度相互学习(DML),该方法通过让学生网络集群在训练过程中相互指导,提高了模型的泛化能力。实验证明,DML不仅在CIFAR-100和Market-1501数据集上取得了优异结果,而且学生网络间的相互学习效果甚至优于从老师网络蒸馏知识的效果。

这个方法还挺有意思的,从某些方面来说也可以算是multi-teacher multi-student。


啊我说为什么指导老师的名字好眼熟=原来就是在爱大第一学期带我们写综述的老师,我还上过他的课,震惊。


摘要

模型蒸馏是一个有效的且广泛使用的可以在老师网络和学生网络间传递知识的技术。典型的应用模式是从一个效果拔群的大网络或者集成传递知识到小网络,这种更适合于内存较少或者需要快速执行的情况。在这个论文中,我们提出了一个深度相互学习(DML)策略,不像在预设的老师和学生间传递知识,而是一堆学生的集成一起进行学习,并在训练过程中相互指导。我们的实验证明网络结构可以在相互学习中受益,并且在CIFAR-100和Market-1501的实验上都有很棒的结果。令人惊讶的是,学生网络的相互学习效果就很好,甚至比从老师那里进行蒸馏的效果还要好。

Introduction

深度神经网络在很多问题上都有出色的表现,但是这些模型通常很深或者很宽,包含了大量的参数,所以就导致了一个可能的缺点:他们执行起来会很慢或者会很占用内存,从而限制了他们在某些平台或者应用上的使用。这个问题引起了在更快更小模型上的广泛研究。目前已经有很多实现又小又快速的模型的方法比如剪枝、模型压缩、二值化和最有趣的模型蒸馏。

基于蒸馏的模型压缩来源于观察:小的网络和大的网络也会有一样的表达能力。但是和大网络相比,他们会更难训练和找到正确的能够实现目标函数的参数。这样看来,这个限制其实在于优化的困难而不是网络的大小。为了更好的学习一个小网络,蒸馏方法从一个强的老师模型开始,然后训练一个小一点的学生模型来模仿老师。模仿老师的类概率或者特征表达,传递传统的监督学习目标以外的信息。学习模仿老师的优化问题被证明是比直接学习目标函数要简单的,学生模型虽然小,但它的表现可以持平甚至超越大的老师模型。

在这篇论文中,我们探究了一个不同但却和知识蒸馏相似的idea。蒸馏是从一个强大的的预训练的老师网络开始,然后对一个小的未训练的学生模型进行知识传递。相反的,在相互学习中,我们从一堆未训练的学生模型开始,这些模型会同时学习来一起解决问题。具体来说,每个学生模型训练时都有两个损失:一个传统的监督学习损失,一个可以使学生模型的类概率和其他学生模型的类概率保持一致的模仿损失。按这样训练,我们发现在结伴教学场景下的学生模型学习的效果比在传统监督学习场景下单独学习的效果要好。并且这样训练的学生模型会比通过传统蒸馏训练的学生模型效果更好。此外,对蒸馏的传统理解中要求老师模型比学生模型大且强,在很多情况下,大模型的相互学习也会取得表现上的提升。

为什么这样的方法会起作用呢,原因似乎一点也不明显。额外的信息是从哪里来的,学习步骤是什么时候开始的,为什么它会收敛到一个很好的结果而不是被集体思想束缚“瞎子领导瞎子”。可以从以下来考虑:每个学生都是被一个传统的监督学习损失指导的,所以它们的表现会逐渐提升,并且不能成为集体思维的一员。监督学习中,所有的网络会为每个训练案例预测一样的标签,但是既然每个网络都是从不同的初始条件开始的,它们对下一个最有可能的类别的预测概率会是有差别的。就是这些次要的量在知识蒸馏中提供了额外的信息,同时也适用于互相学习。在互相学习中,学生成员有效地汇集了它们对下一个可能的类别的预测。根据对应的学习伙伴为每个训练样例发现和匹配其他最可能的类别可以增加每个学生模型的后验熵,这能帮助他们收敛成一个更稳健的最小值,并且在测试数据上有更好的泛化。这与最近关于深度学习后验熵的稳健性问题有关,但是比blind entropy regularisation的选择更好。

总的来说,互相学习提供了一个简单且有效的方法来提高一个网络的泛化能力,即协作性地和别的成员一起训练。同使用了预训练的大网络的蒸馏方法相比,和伙伴一起协作学习能实现更好的表现。并且我们观察到:

  1. 效果会随着成员网络的数量增加
  2. 它能应用到许多不同的网络结构中,成员网络也可以包含各种大大小小的网络。
  3. 在成员中互相训练的大网络也比单独训练的网络效果要好。
  4. 我们的关注在于获得一个单独的有效的网络,那么整个成员编队可以看作一个有效的集成网络。

相关工作

基于蒸馏的模型压缩方法大概十年前就提出了,但是最近才重新变得活跃,关于为什么它会起作用的观点也早就提出来啦。起初,一个常见的应用是把大模型的函数蒸馏到小的学生模型中。之后这个想法被应用到将容易训练的网络蒸馏到一个不容易训练的小网络。最近,蒸馏开始更系统性地和信息学习理论和SVM+相接。我们不需要老师的存在,允许学习在互相蒸馏中指导对方。

另一些相关的ideas包括dual learning,两个交叉语言翻译模型交互性地指导彼此。但是这个只在专门的翻译问题上有应用。相反的,我们的互相学习方法可以应用到一般的分类问题上。集成优于多样,我们的互相学习策略可以减少多样性,使得所有学生在模仿彼此时都或多或少变得相似。然而我们的目标不只是产生一个多样的集成,而是让网络能找到泛化很好的结果,而这是在传统的监督学习中比较难找到的。

Deep Mutual Learning

Formulation

我们首先用一个两个模型的编队构建了这个DML方法。扩展到多个网络的过程也很直接。给了来自MMM个类别的NNN个样本X={xi}i=1NX=\{x_i\}^N_{i=1}X={xi}i=1N。我们定义对应的标签集Y={yi}i=1NY=\{y_i\}^N_{i=1}Y={yi}i=1N。每个样本xix_ixi的属于分类mmm的概率可以由神经网络Θ1\Theta_1Θ1计算:
p1m(xi)=exp⁡(z1m)∑m=1Mexp⁡(z1m) p^m_1(x_i)=\frac{\exp(z^m_1)}{\sum^M_{m=1}\exp(z^m_1)} p1m(xi)=m=1Mexp(z1m)exp(z1m)
这里的logitszmz^mzm是神经网络Θ1\Theta_1Θ1的softmax层的输出。

对多类别分类,用来训练神经网络Θ1\Theta_1Θ1的目标函数被定义为预测值和正确标签的交叉熵损失。
LC1=−∑i=1N∑m=1MI(yi,m)log⁡(p1m(xi)) L_{C_1}=-\sum^N_{i=1}\sum^M_{m=1}I(y_i,m)\log(p^m_1(x_i)) LC1=i=1Nm=1MI(yi,m)log(p1m(xi))

传统的监督损失训练网络为训练样例预测正确的标签。为了提高神经网络Θ1\Theta_1Θ1的泛化表现,我们使用另一个伙伴网络Θ2\Theta_2Θ2来以它的后验概率p2p_2p2的形式提供训练经验。为了衡量两个网络的预测p1p_1p1p2p_2p2的匹配度,我们使用了KL散度。
DKL(p2∣∣p1)=∑i=1N∑m=1Mp2m(xi)log⁡p2m(xi)p1m(xi) D_{KL}(p_2||p_1)=\sum^N_{i=1}\sum^M_{m=1}p^m_2(x_i)\log\frac{p^m_2(x_i)}{p^m_1(x_i)} DKL(p2p1)=i=1Nm=1Mp2m(xi)logp1m(xi)p2m(xi)
神经网络Θ1\Theta_1Θ1的损失函数LΘ1L_{\Theta_1}LΘ1被定义为:
LΘ1=LC1+DKL(p2∣∣p1) L_{\Theta_1}=L_{C_1}+D_{KL}(p_2||p_1) LΘ1=LC1+DKL(p2p1)
神经网络Θ2\Theta_2Θ2的损失函数LΘ2L_{\Theta_2}LΘ2被定义为:
LΘ2=LC2+DKL(p1∣∣p2) L_{\Theta2}=L_{C_2}+D_{KL}(p_1||p_2) LΘ2=LC2+DKL(p1p2)
按照这个方法,每个神经网络都能学习到预测训练样例的真实标签同时和它的伙伴的概率预测结果匹配。

Optimisation

互相学习是在每个基于小批量模型更新步骤和整个训练过程中执行的。在每个迭代中,我们计算了两个模型的预测并且更新两个模型的参数。对Θ1\Theta_1Θ1Θ2\Theta_2Θ2的优化是迭代地进行的直到收敛。优化细节在算法1中总结。


Algorthm 1: Deep Mutula Learning|

Input:|训练集合XXX,标签集YYY,学习率γ1,t\gamma_{1,t}γ1,tγ2,t\gamma_{2,t}γ2,t

Initialize: |模型Θ1\Theta_1Θ1和模型Θ2\Theta_2Θ2

Repeat:|

t=t+1

从训练集XXX中随机选择数据xxx

  1. 对预测结果p1p_1p1p2p_2p2进行更新

  2. 计算随机梯度更新Θ1\Theta_1Θ1
    Θ1⟵Θ1+γ1,t∂LΘ1∂Θ1 \Theta_1\longleftarrow\Theta_1+\gamma_{1,t}\frac{\partial L_{\Theta_1}}{\partial\Theta_1} Θ1Θ1+γ1,tΘ1LΘ1

  3. 对预测结果p1p_1p1p2p_2p2进行更新

  4. 计算随机梯度更新Θ2\Theta_2Θ2
    Θ2⟵Θ2+γ2,t∂LΘ2∂Θ2 \Theta_2\longleftarrow\Theta_2+\gamma_{2,t}\frac{\partial L_{\Theta_2}}{\partial\Theta_2} Θ2Θ2+γ2,tΘ2LΘ2

Until: |收敛

Extension to Larger Student Cohorts

提出的DML方法可以扩展到更多的网络上,给出KKK个网络Θ1,Θ2,...,ΘK(K>=2)\Theta_1,\Theta_2,...,\Theta_K(K>=2)Θ1,Θ2,...,ΘK(K>=2),用来优化神经网络Θk\Theta_kΘk的目标函数变为:
LΘk=LCk+1K−1∑l=1,l≠kkDKL(pl∣∣pk) 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+K11l=1,l=kkDKL(plpk)
这个说明在K个网络的时候,每个学生的DML有效地将编队中剩下的K−1K-1K1个网络作为老师来提供学习经验。注意我们已经加进去了一个系数来保证监督学习仍起着主要的指导作用。DML的对两个以上网络的优化过程就是算法1的直接扩展版。它可以在每个设备上学习每个网络然后在设备间传递小的概率向量。

在小网络超过两个情况下,一个候补学习方法是把其他K−1K-1K1个网络作为一个集成来提供平均的学习经验,这和蒸馏非常的相似但是在每个批更新都进行。Θk\Theta_kΘk的目标函数可以被写为:
LΘk=LCk+DKL(pavg∣∣pk),pavg=1K−1∑l=1,l≠kKpt L_{\Theta_k}=L_{C_k}+D_{KL}(p_{avg}||p_k), p_{avg}=\frac{1}{K-1}\sum^K_{l=1,l\ne k}p_t LΘk=LCk+DKL(pavgpk),pavg=K11l=1,l=kKpt
在我们的实验中,我们发现只使用一个集成老师的DML会比使用K−1K-1K1个老师的DML模型表现差。这是因为用来构建老师集成模型的模型平均步骤会让老师的后验概率在真实类别上达到高峰,因此减少了后验熵。这和DML的“产生具有高后验熵的稳健方法”的目的是相互矛盾的。

Conclusion

我们提出了一个简单的且普遍适用的方法来提升深度神经网络的表现,通过在编队中进行训练和互相蒸馏。使用这个方法,我们可以获得精简的网络,而它的表现比从老师模型蒸馏过的效果要好。一个DML的应用就是获得精简/快速且有效的网络。我们也发现这个方法也能用来提升大网络的表现,而且使用这个方法训练的网络编队可以被组合成一个集成模型,以获取更大的提升。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值