R-Drop: Regularized Dropout for Neural Networks


很简单的一篇,只要使用了 类似 dropout 这种带随机性的 layer。那么将同一个输入分别经过模型,那么会得到有差别的输出。

比如 dropout 来说,由于它的存在使得同一个输入分别经过模型时候,会使用不同的 sub models。导致输出结果的差异,但实际上我们是想要使用了不同的 sub models 也应该要有相同的结果。

所以这篇的思路就是在训练的时候,将一条数据分别经过不同的 dropout 的 模型,然后计算两个 输出的 KL散度,在原来的训练目标的基础上加上此 KL散度。

LKLi=12(DKL(P1w(yixi)P2w(yixi))+DKL(P2w(yixi)P1w(yixi)))\mathcal{L}_{K L}^{i}=\frac{1}{2}\left(\mathcal{D}_{K L}\left(\mathcal{P}_{1}^{w}\left(y_{i} \mid x_{i}\right) \| \mathcal{P}_{2}^{w}\left(y_{i} \mid x_{i}\right)\right)+\mathcal{D}_{K L}\left(\mathcal{P}_{2}^{w}\left(y_{i} \mid x_{i}\right) \| \mathcal{P}_{1}^{w}\left(y_{i} \mid x_{i}\right)\right)\right)

Li=LNLLi+αLKLi\mathcal{L}^{i}=\mathcal{L}_{N L L}^{i}+\alpha \cdot \mathcal{L}_{K L}^{i}

在翻译任务、Language Understanding、 Language Modeling、 Summarization、 Image Classification (ViT) 这些任务上都能取得效果的提升。