写在前面:本文学习引用微软研究院AI头条、“肉丸先生呀”的博文“R-Drop——更强大的Dropout”
1 背景介绍
1.1 Dropout技术
深度神经网络(DNN)近来已经在各个领域都取得了令人瞩目的成功。在训练这些大规模的 DNN 模型时,正则化(regularization)技术,如 L2 Normalization、Batch Normalization、Dropout 等是不可缺少的模块,以防止模型过拟合(over-fitting),同时提升模型的泛化(generalization)能力。在这其中,Dropout 技术由于只需要简单地在训练过程中丢弃一部分的神经元,而成为了被最广为使用的正则化技术。
正则化技术 regularization : L2 Normalization、Batch Normalization、Dropout 等等
- 然而 Dropout 的操作,在一定程度上会使得训练后的模型成为一种多个子模型的组合约束。 因此,提出了
R-Drop
1.2 Regularized Dropout (R-Drop)技术
微软亚洲研究院与苏州大学 在 Dropout 的基础上提出了进一步的正则方法:Regularized Dropout,简称R-Drop。
与传统作用于神经元(Dropout)或者模型参数(DropConnect )上的约束方法不同,R-Drop 作用于模型的输出层,弥补了 Dropout 在训练和测试时的不一致性。
简单来说就是在每个 mini-batch 中,每个数据样本过两次带有 Dropout 的同一个模型,R-Drop 再使用 KL-divergence 约束两次的输出一致。所以,R-Drop 约束了由于 Dropout 带来的两个随机子模型的输出一致性。【这里有些晦涩难懂,后面会继续介绍】
与传统的训练方法相比,R- Drop 只是简单增加了一个 KL-divergence 损失函数项,并没有其他任何改动。虽然该方法看起来很简单,但实验表明,在5个常用的包含 NLP 和 CV 的任务中(一共18个数据集),R-Drop 都取得了非常不错的结果提升,并且在机器翻译、文本摘要等任务上取得了当前最优的结果。
2 R-Dropout的原理介绍
由于DNN非常容易过拟合,因此采用Dropout方法,随机丢弃每层的部分神经元,以此来避免在训练过程中的过拟合问题。
而正是因为随机丢弃,导致了每次丢弃后产生的子模型都不一样,所以Dropout的操作在一定程度上使得训练后的模型是一种多个子模型的组合约束。
基于 Dropout 的这种特殊方式对网络带来的随机性,研究员们提出了 R-Drop 来进一步对(子模型)网络的输出预测进行了正则约束。
增加一个 KL-divergence 损失函数项
-
公式如下:
-
总体框架如下:
2.1 模型解释
- 论文提出的模型是上图中右侧模型。可以看到,同一个数据在两次计算中,使用了随机dropout后,得到了两个不同的子模型,图中 P 1 ( y ∣ x ) P_1(y|x) P1(y∣x)和 P 2 ( y ∣ x ) P_2(y|x) P2(y∣x)是两个子模型的分布情况。(两个子模型是因为,Dropout丢失的神经元不同)
- 因此,对于相同的输入数据 P 1 w ( y ∣ x ) P_1^w(y|x) P1w(y∣x)和 P 2 w ( y ∣ x ) P_2^w(y|x) P2w(y∣x)的分布是不同的。
- 因此,在训练步骤中,R-Dropout方法,尝试通过最小化同一样本的这两个输出分布之间的双向 K u l l b a c k − L e i b l e r ( K L ) Kullback−Leibler(KL) Kullback−Leibler(KL) 散度来正则化模型预测。
3 总结
-
Dropout的缺陷很明显:预测和训练的不一致性,这也是很直观的。
-
而R-D通过增加一个正则项,来强化模型对Dropout的鲁棒性,使得不同的Dropout下模型的输出基本一致,因此能降低这种不一致性,促进“模型平均”与“权重平均”的相似性,从而使得简单关闭Dropout的效果等价于多Dropout模型融合的结果,提升模型最终性能。
-
总的来说,R-D形式简洁,效果出色,是一个非常具有创新点的想法。但是针对R-D为什么可以做到如此出色的效果,以及如何引导模型找到合适的R-D也是非常值得探究的。