目录
今天主要给大家带来Dropout在NLP最新应用,希望能给大家带来收获!!!!
在训练DNN模型时,正则化技术,如: L1/L2 Normalization、Batch/Layer Normalization、Dropout 等是不可缺少的模块,以防止模型过拟合,同时提升模型的泛化能力。
「Dropout」由于只需要简单地在训练过程中丢弃一部分神经元,而成为最为广泛使用的正则化技术。
1)训练时:每个神经元的输出Z有P的概率为0,1-P的概率为Z * 1/(1-P)
2) 预测时:关闭dropout
今天想要介绍的几篇论文都是基于dropout为基础的
一、SimCSE

论文地址:https://arxiv.org/pdf/2104.08821.pdf
•提出了一个基于对比学习的句子表示方法,同时适用于「有监督」和「无监督」场景
•在语义文本相似度匹配(STS)等任务上超过了SOTA

•对比学习的思想:将样本和与它语义相似的样本(正样例)和与它语义不相似的样本(负样例)进行对比,希望通过设计模型结构和对比损失,使语义相近的样本对应的表示在表示空间更接近,语义不相近的样本的距离更远,以达到类似聚类的效果
1.1 Unsupervised SimCSE
无监督版本的SimCSE
通过两次Dropout的方式构构造正样本,同一batch的其他样本构造负样本
本质上就是【自己,自己】构造正样本(通过两次构造dropout), 【自己, 她人】构造负样本
这里讲一下构造正样本的具体做法,在Transformer的Feed Forward Network (前馈神经网络)和Muti-head Attention中加入一个Dropout, 这样的话一个样本两次输入到模型中就能得到两个不同的Embedding以此来构造正例。
(原来dropout还可以这样玩,第一次见到真的是挺惊艳的)
1.2 Supervised SimCSE
监督版本的SimCSE

以NLI中label为「蕴含」的句子对作为正样本,label为「矛盾」的作为负样本
1.3 实验效果

在无监督/有监督场景下均超越SOTA
二、ESimCSE

论文地址:https://arxiv.org/pdf/2109.04380.pdf
这篇paper算是对SimCSE的一个改进,主要有两个点。
2.1 Word Repetion
不管是bert还是robert他们都有一个公同点,就是输入都含有位置信息,那么问题就来了, 无监督simcse构造的正样本的两个句子具有相同的长度,负样本通常都有不一样的长度,那么模型是不是认为有相同长度或者相识长度的句子就是正样本(即语义相似),不同长度的句子为负样本,这样显然是非常不合理的。
所以本文作者在构造正样本的时候随机复制正样本中的单词,这样的话构造正样本的两个句子长度就会不一样了(当然随机复制几个单词不会影响语义)


是一个超参数表示的是复制单词的比率,
是上面定义的集合中的随机采样数,这将在扩展序列长度时引入更多的多样性。确定「dup_len」后,我们使用「均匀分布」从序列中随机选择需要重复的dup_len子词,组成「dup_set」。

原文中举了一个例子,如果句子中的第一个词在中,则
,
「不同于无监督的SimCSE需要通过两次BERT生成
和
,ESimCSE生成的
和
是相互独立的」。
2.2 Momentum Contrast
Momentun Contrast(动量对比)允许我们通过维护「固定大小的队列」来重用前面mini-batch中编码的句子Embedding。具体来说,队列中的Embedding会被逐步替换。「若当前mini-batch中输出句子的Embedding入队时,如果队列已满,则删除队列中“最旧”的句子Embedding。」
我们使用「动量更新编码器」对排队的句子Embedding进行编码。编码器的参数为 ,动量更新编码器的参数为 ,我们按以下方式更新 :

其中 为动量系数参数。
是通过反向梯度计算得来的。
「ESimCSE的损失函数」进一步修改如下:

是队列大小,
是表示在队列中更新的embedding的句子。
三、R-Drop

论文地址:https://arxiv.org/abs/2106.14448
这篇paper只能用四个字来形容 “简单粗暴”
先贴下模型的整体架构

•一种基于Dropout的正则化方法R-Drop:对于同一个输入样本,让模型的两次输出尽量一致
•同时适用于NLP和CV任务:机器翻译、生成式摘要、自然语言理解、语言模型、图片分类
•用KL散度衡量两次输出的不一致性

3.1 整体优化目标


3.2 为什么简简单单的dropout如此有效呢?
1)在训练时,因为Dropout每次随机丢弃部分神经元,导致每次丢弃后产生的子模型都不一样,所以 Dropout 的操作一定程度上使得训练后的模型是一种多个子模型的组合。
2)Dropout在训练是开启,在测试时关闭,因此训练和测试存在不一致性。
3)而 R-Drop 在训练过程中通过刻意对子模型之间的输出进行约束,让两次的输出保持一致,从而降低了训练和测试的不一致性。
3.3 实验结果
「机器翻译」

「NLU」

这里附上苏神的代码:https://github.com/bojone/r-drop
官方代码:https://github.com/dropreg/R-Drop
对了这里要说明下具体实现并不是将一个样本输入到模型两次,而是通过concat方式([X,X])输入到模型。
四、总结
SimCSE、ESimCSE通过Dropout实现样本和与它语义相似的样本(正样例)和与它语义不相似的样本(负样例)进行对比,希望通过设计模型结构和对比损失,使语义相近的样本对应的表示在表示空间更接近,语义不相近的样本的距离更远,适合用于聚类,向量检索等。
R-Drop利用Dropout的随机性,缓解了训练和测试的不一致性,在有监督的场景下适用于所有带Dropout的模型,简单粗暴,但效果出众。