R-Drop:正则化的Dropout方法.

本文提出了一种借助Dropout的正则化方法R-Drop,通过Dropout从同一个模型中获取若干子模型,使得这些子模型的输出分布足够接近。具体地,通过“Dropout两次”的方式来得到同一个输入样本的两个不同输出特征向量,并使其落入同一个特征分布中。作者在$5$个深度学习任务中进行实验,表明方法的优越性。

1. R-Drop

以使用Transformer进行文本分类任务为例。对于输入文本$x$,将其输入Transformer两次分别得到输出$P_1(y|x)$和$P_2(y|x)$,如上图左所示。由于Transformer中存在Dropout,同一个输入的每次前向传播过程都是不完全相同的,相当于使用了两个子模型,如上图右所示。

文本分类任务属于监督学习任务,因此对于输入样本$x_i$的两次输出$P_1(y_i|x_i)$和$P_2(y_i|x_i)$通过负对数似然计算分类损失:

\[\mathcal{L}_{NLL}^i = -logP_1(y_i|x_i) -logP_2(y_i|x_i)\]

损失函数的另一部分是两个子模型输出的对称KL散度:

\[\mathcal{L}_{KL}^i = \frac{1}{2}(\mathcal{D}_{KL}(P_1(y_i|x_i) || P_2(y_i|x_i))+\mathcal{D}_{KL}(P_2(y_i|x_i) || P_1(y_i|x_i)))\]

因此输入样本$x_i$的总损失函数为:

\[\mathcal{L}^i = \mathcal{L}_{NLL}^i + \alpha \mathcal{L}_{KL}^i\]

2. 理论分析

Dropout的问题在于训练与测试的不一致性。训练时通过Dropout对每一次输入生成一个子模型(部分神经元置零);而测试时直接关闭Dropout进行确定性的预测,即“权重平均”。理论上,测试应对同一个输入多次传入没有关闭Dropout的模型中,然后把多次的预测结果的平均值作为最终的预测结果,即实现“模型平均”。

R-Drop通过增加正则化,强化模型对Dropout的鲁棒性,即使得不同的Dropout下模型的输出落入同样的分布中,进而降低“模型平均”与“权重平均”的不一致性,从而使得简单关闭Dropout的效果等价于多Dropout模型融合的结果,提升模型性能。

3. 实验分析

作者在$5$种深度学习任务中测试了R-Drop的性能。