分类 R-Drop 下的文章

r-drop本质上是一种有监督的数据增强方式
SimCse本质上是一种无监督的数据增强方式
对比学习标准流程:对比学习的标准流程是同一个样本通过不同的数据扩增手段得到的结果视为正样本对,而 batch 内的所有其他样本视为负样本,然后就是通过 loss 来缩小正样本的距离、拉大负样本的距离了。

一、相关背景

关注 NLP 新进展的读者,想必对2021年4月份发布的 SimCSE印象颇深,它通过简单的“Dropout 两次”来构造正样本进行对比学习,达到了无监督语义相似度任务的全面 SOTA。无独有偶,最近2021年6月份的论文《R-Drop: Regularized Dropout for Neural Networks》提出了 R-Drop,它将“Dropout两次”的思想用到了有监督任务中,每个实验结果几乎都取得了明显的提升。此外,笔者在自己的实验还发现,它在半监督任务上也能有不俗的表现
论文标题:R-Drop: Regularized Dropout for Neural Networks

论文链接:https://arxiv.org/abs/2106.14448

代码链接:https://github.com/dropreg/R-Drop

所以难度主要集中在数据扩增手段上。对于 NLP 来说,我们很难人工构建保证语义不变的数据扩增,所以 SimCSE 干脆不人工进行数据扩增,而是通过“Dropout 两次”的方式来得到同一个输入的不同特征向量,并将它们视为正样本对。奇怪的是,这个简单的“Dropout 两次”构造正样本,看上去是一种“无可奈何”的妥协选择,但消融实验却发现它几乎优于所有其他数据扩增方法,令人惊讶之余又让人感叹“大道至简”。

在实现上,SimCSE 也相当简单,所谓“Dropout 两次”,只需要将样本重复地输入到模型,然后计算相应的 loss 就行了,如上图所示。由于 Dropout 本身的随机性,每个样本的 Dropout 模式都是不一样的,所以只要单纯地重复样本,就可以实现“Dropout 两次”的效果。

二、算法结构

从结果上来看,SimCSE 就是希望 Dropout对模型结果不会有太大影响,也就是模型输出对 Dropout 是鲁棒的。所以很明显,“Dropout 两次”这种思想是可以推广到一般任务的,这就是 R-Drop(Regularized Dropout)。
未命名文件 (2).png

1.损失函数

损失函数由两部分组成:常规的交叉熵损失函数+KL散度约束的相对熵
cr.png
kls.png
zz.png

参考:
https://mp.weixin.qq.com/s/IvhGbFEMotpKJIUPExUklg