恒源云(GPUSHARE)_[SimCSE]:对比学习,只需要 Dropout?

文章来源 | 恒源云社区(恒源云,专注 AI 行业的共享算力平台)

原文地址 | Dropout

原文作者 | Mathor


要说2021年上半年NLP最火的论文,想必非《SimCSE: Simple Contrastive Learning of Sentence Embeddings》莫属。SimCSE的全称是Simple Contrastive Sentence Embedding

Sentence Embedding

Sentence Embedding一直是NLP领域的一个热门问题,主要是因为其应用范围比较广泛,而且作为很多任务的基石。获取句向量的方法有很多,常见的有直接将[CLS]位置的输出当做句向量,或者是对所有单词的输出求和、求平均等。但以上方法均被证明存在各向异性(Anisotropy)问题。通俗来讲就是模型训练过程中会产生Word Embedding各维度表征不一致的问题,从而使得获得的句向量也无法直接比较

目前比较流行解决这一问题的方法有:

  1. 线性变换:BERT-flow、BERT-Whitening。这两者更像是后处理,通过对BERT提取的句向量进行某些变换,从而缓解各向异性问题
  2. 对比学习:SimCSE。 对比学习的思想是拉近相似的样本,推开不相似的样本,从而提升模型的句子表示能力

Unsupervised SimCSE

在这里插入图片描述
SimCSE利用自监督学习来提升句子的表示能力。由于SimCSE没有标签数据(无监督),所以把每个句子本身视为相似句子。说白了,本质上就是 ( 自 己 , 自 己 ) (自己,自己) (,)作为正例、 ( 自 己 , 别 人 ) (自己,别人) (,)作为负例来训练对比学习模型。当然,其实远没有这么简单,如果仅仅只是完全相同的两个样本作正例,那么泛化能力会大打折扣。一般来说,我们会使用一些数据扩增手段,让正例的两个样本有所差异,但是在NLP中如何做数据扩增本身也是一个问题,SimCSE提出了一个极为简单优雅的方案:直接把Dropout当做数据扩增!

具体来说, N N N个句子经过带Dropout的Encoder得到向量 h 1 ( 0 ) , h 2 ( 0 ) , … , h N ( 0 ) \boldsymbol{h}_1^{(0)},\boldsymbol{h}_2^{(0)},…,\boldsymbol{h}_N^{(0)} h1(0),h2(0),,hN(0),然后让这批句子再重新过一遍Encoder(这时候是另一个随机Dropout)得到向量 h 1 ( 1 ) , h 2 ( 1 ) , … , h N ( 1 ) \boldsymbol{h}_1^{(1)},\boldsymbol{h}_2^{(1)},…,\boldsymbol{h}_N^{(1)} h1(1),h2(1),,hN(1) ,我们可以 ( h i ( 0 ) , h i ( 1 ) ) (\boldsymbol{h}_i^{(0)},\boldsymbol{h}_i^{(1)}) (hi(0),hi(1))视为一对(略有不同的)正例,那么训练目标为
在这里插入图片描述
其中, sim ( h 1 , h 2 ) = h 1 T h 2 ∥ h 1 ∥ ⋅ ∥ h 2 ∥ \text{sim}(\boldsymbol{h}_1, \boldsymbol{h}_2)=\frac{\boldsymbol{h}_1^T\boldsymbol{h}_2}{\Vert \boldsymbol{h}_1\Vert \cdot \Vert \boldsymbol{h}_2\Vert} sim(h1,h2)=h1h2h1Th2。实际上式(1)如果不看 − log ⁡ -\log log τ \tau τ的部分,剩下的部分非常像是 Softmax \text{Softmax} Softmax。论文中设定 τ = 0.05 \tau = 0.05 τ=0.05,至于这个 τ \tau τ有什么作用,我在网上看到一些解释:

  1. 如果直接使用余弦相似度作为logits输入到 Softmax \text{Softmax} Softmax,由于余弦相似度的值域是 [ − 1 , 1 ] [-1,1] [1,1],范围太小导致 Softmax \text{Softmax} Softmax无法对正负样本给出足够大的差距,最终结果就是模型训练不充分,因此需要进行修正,除以一个足够小的参数 τ \tau τ将值进行放大
  2. 超参数 τ \tau τ会将模型更新的重点,聚焦到有难度的负例,并对它们做相应的惩罚,难度越大,也即是与 h i ( 0 ) {h}_i^{(0)} h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值