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

小小的“Dropout两次”,居然跑出了“五项全能”的感觉,不得不令人惊讶。本文来介绍一下R-Drop,并分享一下笔者对它背后原理的思考。
SimCSE
《中文任务还是SOTA吗?我们给SimCSE补充了一些实验》中,我们已经对SimCSE进行了介绍。简单来说,SimCSE是NLP的一种对比学习方案,对比学习的标准流程是同一个样本通过不同的数据扩增手段得到的结果视为正样本对,而batch内的所有其他样本视为负样本,然后就是通过loss来缩小正样本的距离、拉大负样本的距离了。
所以难度主要集中在数据扩增手段上。对于NLP来说,我们很难人工构建保证语义不变的数据扩增,所以SimCSE干脆不人工进行数据扩增,而是通过“Dropout两次”的方式来得到同一个输入的不同特征向量,并将它们视为正样本对。奇怪的是,这个简单的“Dropout两次”构造正样本,看上去是一种“无可奈何”的妥协选择,但消融实验却发现它几乎优于所有其他数据扩增方法,令人惊讶之余又让人感叹“大道至简”。

在实现上,SimCSE也相当简单,所谓“Dropout两次”,只需要将样本重复地输入到模型,然后计算相应的loss就行了,如上图所示。由于Dropout本身的随机性,每个样本的Dropout模式都是不一样的,所以只要单纯地重复样本,就可以实现“Dropout两次”的效果。
R-Drop
从结果上来看,SimCSE就是希望Dropout对模型结果不会有太大影响,也就是模型输出对Dropout是鲁棒的。所以很明显,“Dropout两次”这种思想是可以推广到一般任务的,这就是R-Drop(Regularized Dropout)。