深度互学习

简介: 翻译:《Deep Mutual Learning》

这个方法还挺有意思的,从某些方面来说也可以算是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方法。扩展到多个网络的过程也很直接。给了来自$M$个类别的$N$个样本$X=\{x_i\}^N_{i=1}$。我们定义对应的标签集$Y=\{y_i\}^N_{i=1}$。每个样本$x_i$的属于分类$m$的概率可以由神经网络$\Theta_1$计算:
$$ p^m_1(x_i)=\frac{\exp(z^m_1)}{\sum^M_{m=1}\exp(z^m_1)} $$
这里的logits$z^m$是神经网络$\Theta_1$的softmax层的输出。

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

传统的监督损失训练网络为训练样例预测正确的标签。为了提高神经网络$\Theta_1$的泛化表现,我们使用另一个伙伴网络$\Theta_2$来以它的后验概率$p_2$的形式提供训练经验。为了衡量两个网络的预测$p_1$和$p_2$的匹配度,我们使用了KL散度。
$$ 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)} $$
神经网络$\Theta_1$的损失函数$L_{\Theta_1}$被定义为:
$$ L_{\Theta_1}=L_{C_1}+D_{KL}(p_2||p_1) $$
神经网络$\Theta_2$的损失函数$L_{\Theta_2}$被定义为:
$$ L_{\Theta2}=L_{C_2}+D_{KL}(p_1||p_2) $$
按照这个方法,每个神经网络都能学习到预测训练样例的真实标签同时和它的伙伴的概率预测结果匹配。

Optimisation

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


Algorthm 1: Deep Mutula Learning|

Input:|训练集合$X$,标签集$Y$,学习率$\gamma_{1,t}$,$\gamma_{2,t}$

Initialize: |模型$\Theta_1$和模型$\Theta_2$

Repeat:|

t=t+1

从训练集$X$中随机选择数据$x$。

  1. 对预测结果$p_1$和$p_2$进行更新

  2. 计算随机梯度更新$\Theta_1$
    $$ \Theta_1\longleftarrow\Theta_1+\gamma_{1,t}\frac{\partial L_{\Theta_1}}{\partial\Theta_1} $$

  3. 对预测结果$p_1$和$p_2$进行更新

  4. 计算随机梯度更新$\Theta_2$
    $$ \Theta_2\longleftarrow\Theta_2+\gamma_{2,t}\frac{\partial L_{\Theta_2}}{\partial\Theta_2} $$

Until: |收敛

Extension to Larger Student Cohorts

提出的DML方法可以扩展到更多的网络上,给出$K$个网络$\Theta_1,\Theta_2,...,\Theta_K(K>=2)$,用来优化神经网络$\Theta_k$的目标函数变为:
$$ L_{\Theta_k}=L_{C_k}+\frac{1}{K-1}\sum^k_{l=1,l\ne k}D_{KL}(p_l||p_k) $$
这个说明在K个网络的时候,每个学生的DML有效地将编队中剩下的$K-1$个网络作为老师来提供学习经验。注意我们已经加进去了一个系数来保证监督学习仍起着主要的指导作用。DML的对两个以上网络的优化过程就是算法1的直接扩展版。它可以在每个设备上学习每个网络然后在设备间传递小的概率向量。

在小网络超过两个情况下,一个候补学习方法是把其他$K-1$个网络作为一个集成来提供平均的学习经验,这和蒸馏非常的相似但是在每个批更新都进行。$\Theta_k$的目标函数可以被写为:
$$ 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 $$
在我们的实验中,我们发现只使用一个集成老师的DML会比使用$K-1$个老师的DML模型表现差。这是因为用来构建老师集成模型的模型平均步骤会让老师的后验概率在真实类别上达到高峰,因此减少了后验熵。这和DML的“产生具有高后验熵的稳健方法”的目的是相互矛盾的。

Conclusion

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

相关文章
|
16天前
|
消息中间件 运维 监控
深度解析CommitFailedException的奥秘
深度解析CommitFailedException的奥秘
22 0
|
8月前
|
机器学习/深度学习 传感器 算法
【深度增强学习 初步学习总结】
【深度增强学习 初步学习总结】
|
4月前
|
人工智能 自然语言处理 算法
技术角度告诉你ChatGPT是什么?和一些深度思考
技术角度告诉你ChatGPT是什么?和一些深度思考
|
6月前
|
机器学习/深度学习 算法 PyTorch
深度强化学习技术要求
深度强化学习技术要求
43 0
|
6月前
|
机器学习/深度学习 传感器 算法
深度强化学习
深度强化学习
129 0
|
10月前
|
机器学习/深度学习 人工智能 算法
强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0
强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0
|
机器学习/深度学习 人工智能 资源调度
深度强化学习技术概述
在本文中详细介绍了深度强化学习技术,将强化学习分成三大类(value-based算法、policy-based算法及结合两者的AC算法)来进行介绍。首先,从数学理论角度介绍了强化学习;接着,从不同适用方向对两类深度强化学习算法进行介绍:基于值函数(Value-based)的深度强化学习算法DQN和基于策略(Policy-based)的深度强化学习算法PG。最后,介绍目前应用广泛的结合前两个算法的结合物AC(Actor-Critic)算法。
1249 2
深度强化学习技术概述
|
机器学习/深度学习 缓存 并行计算
深度学习笔记
深度学习笔记
91 0
如何平衡技术的深度和广度?
技术的深度通常是工作驱动的; 技术的广度通常是兴趣驱动的; 所以得先确定目标,再做取舍。 你现在的气质里,藏着你走过的路,读过的书,爱过的人。
1104 0
|
机器学习/深度学习 算法 人工智能