“被玩坏了”的Dropout

目录

今天主要给大家带来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\_rate是一个超参数表示的是复制单词的比率, dup\_len是上面定义的集合中的随机采样数,这将在扩展序列长度时引入更多的多样性。确定「dup_len」后,我们使用「均匀分布」从序列中随机选择需要重复的dup_len子词,组成「dup_set」

原文中举了一个例子,如果句子中的第一个词在dup\_set中,则x={x_1,x_2,x_3..x_N}x^+={x_1,x_1,x_2,x_3..x_N}\\「不同于无监督的SimCSE需要通过两次BERT生成 xx^+ ,ESimCSE生成的 xx^+是相互独立的」

2.2 Momentum Contrast

Momentun Contrast(动量对比)允许我们通过维护「固定大小的队列」来重用前面mini-batch中编码的句子Embedding。具体来说,队列中的Embedding会被逐步替换。「若当前mini-batch中输出句子的Embedding入队时,如果队列已满,则删除队列中“最旧”的句子Embedding。」

我们使用「动量更新编码器」对排队的句子Embedding进行编码。编码器的参数为 ,动量更新编码器的参数为 ,我们按以下方式更新 :‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

其中 \lambda\in[0,1]为动量系数参数。\theta_e是通过反向梯度计算得来的。

‍‍‍‍‍‍

「ESimCSE的损失函数」进一步修改如下:

M是队列大小,h{_m}^+是表示在队列中更新的embedding的句子。

三、R-Drop

论文地址:https://arxiv.org/abs/2106.14448

这篇paper只能用四个字来形容 “简单粗暴”

先贴下模型的整体架构

•一种基于Dropout的正则化方法R-Drop:对于同一个输入样本,让模型的两次输出尽量一致

•同时适用于NLP和CV任务:机器翻译、生成式摘要、自然语言理解、语言模型、图片分类

•用KL散度衡量两次输出的不一致性

3.1 整体优化目标

loss = 交叉熵 + KL散度

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的模型,简单粗暴,但效果出众。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值