算法原理

基于Drop可以在文本相似度匹配上有一些工作,R-Drop也顾名思义,类似于SimCse。
21.9.16 相似度匹配若干新算法

简单的来说,把一个样本两次输入带有Drop的模型
由于Drop的随机性,模型的中间表示被丢弃,应该会有不同的结果。
模型一方面保留了两次主体任务的损失函数,还加上了KL散度,对两次输入的输出概率进行损失计算

比如分类任务,第一次输入Sentence得到概率分布prob1,第二次输入得到prob2
Loss = Cross Entropy Loss(prob1)+ Cross Entropy Loss(prob2)+ KL(prob1,prob2)
直观上认为是要求两次输入在Drop的丢弃下,要得出相似的结果

原论文提供了对R-Drop的一个理论分析,大致意思是R-Drop会促进参数的同化,从而起到正则化作用。

大佬的算法分析

一致性

首先很多模型都有Drop,训练drop,测试关闭drop。显然存在不一致,调整参数的时候有一部分表示会清空。
推导如下,
image.png

即推导结果认为,在train的时候使用drop,则正确的用法是在test的时候也开着drop,然后多次测试,取平均期望。然而大伙用的时候都是直接关闭,全部的参数都保留不变,相当于是权重平均。
在权重平均和结果平均直接不等价。这里R-Drop的第二个任务相当于是减小这个不等价。

连续性

这种多次Drop,并要求drop后结果一致的方法很像对抗训练,对抗训练在embed层(输入)构造噪声输入扰动。
但是对抗只有在输入的位置,R-drop可以在任意位置,扰动更明显(相当于是在模型的中间表示上扰动)

非目标类

在交叉熵上只考虑了优化目标类别,对于一些非目标的类别没考虑,优化目标是让目标类别大于其他类别就行。
如果没有KL散度,则R-Drop只能保证攻击后,目标类等分仍然高于其他。
这里的Dropout+KL可以让各个类的概率更稳定,[0.5,0.2,0.3]或[0.5,0.3,0.2]是有非零损失的

出处