对比学习笔记

文章目录

  • 一、什么是对比学习
  • 二、对比学习为什么这么火
  • 三、Simcse是什么
    • 1. 无监督SimCSE
    • 2. 有监督SimCSE
  • 四、simcse的损失函数是什么
  • 五、为什么simcse构造正例对时使用dropout是有效的方法
  • 六、如何评价句子向量生成的好坏
  • 七、simcse相比sbert好在哪里
  • 八、什么是各向异性
  • 九、什么是模型坍塌
  • 十、如何防止模型坍塌

一、什么是对比学习

通过构造正例对和负例对,并减少正例对之间距离,增大负例对之间的距离,借此获得一个文本或者图片更好的表示向量。

对比学习的一个重要问题是如何构造正样本对,即通过 x 构造出 x+,有点类似数据增强。在图像领域这相对容易,通过对图像进行翻转、裁剪、加噪音、缩放等方式即可构造,而文本相对会难一些。常见的文本数据增强方式有删除词组、替换近义词、互译等方式。但是这些方式都是离散的,有时效果并不理想,因此 SimCSE 通过 Dropout 的方式构造正样本对。

二、对比学习为什么这么火

  1. 无监督的"对比学习"有效解决了机器学习中有监督学习所匮乏的数据标注难题。
  2. 众所周知,直接用BERT句向量做无监督语义相似度计算效果会很差,任意两个句子的BERT句向量的相似度都相当高,其中一个原因是向量分布的非线性和奇异性,前不久的BERT-flow通过normalizing flow将向量分布映射到规整的高斯分布上,更近一点的BERT-whitening对向量分布做了PCA降维消除冗余信息,但是标准化流的表达能力太差,而白化操作又没法解决非线性的问题,有更好的方法提升表示空间的质量吗?
    丹琦女神的simcse论文提供了解决方案。而本篇论文就将对比学习的思想引入了SBERT,大幅刷新了有监督和无监督语义匹配SOTA,更让人惊叹的是,无监督SimCSE的表现在STS基准任务上甚至超越了包括SBERT在内的所有有监督模型。

三、Simcse是什么

对比学习笔记_第1张图片
simcse是Simple Contrastive Learning of Sentence Embeddings的简称。它包含了两种方法:

1. 无监督SimCSE

正例对的获得有些巧妙,先将本句子输入到encoder中,这样会得到一个sentence embedding,然后再将该句子输入一遍到encoder,又会得到一个sentence embedding。将这两个sentence embedding组合到一起成为正例对。(由于dropout层在训练时会随机drop一些输入,所以同一个句子输入两遍得到的sentence embedding会有点区别。)而负例对的获得比较平淡无奇,就是从句子集合中挑一个句子,和本句子组合到一起,成为负例对。

2. 有监督SimCSE

简单地将NLI的数据用于监督对比学习,效果也甚好。在智能客服领域,存在标准问、相似问。那么可以将标准问和相似问作为正例对。标准问(或相似问)与其他标准问(或相似问)可以组合成负例对。

四、simcse的损失函数是什么

对比学习笔记_第2张图片其中,各参数含义如下:
对比学习笔记_第3张图片

或者
在这里插入图片描述由于-log(x)的函数是递减函数。因此正样本之间相似度越大,负样本之间相似度越小,那么损失函数的loss值就越小。这样的损失函数定义符合我们的预期。
对比学习笔记_第4张图片

五、为什么simcse构造正例对时使用dropout是有效的方法

这个有点像:书读百遍其义自见。也有点像:温故而知新,可以为师矣。同一本书,同一个人读多遍,会产生不同的感受,每次感受的类似,又略有不同。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
对比学习笔记_第5张图片
Dropout 和其他数据增强方法的效果 对比结果如下表所示,其中 None 表示 SimCSE 用到的 Dropout 方法,可以看到通过 Dropout 生成正样本的效果比其他数据增强方式好。(评价指标是 Spearman 相关系数,斯皮尔曼相关系数是一个衡量两个变量的依赖性的非参数指标,它并不假设两个数据集是相同分布的,像其他的相关系数一样,这个变量的范围从-1到+1,0暗示着两个参数之间没有相关性。如果数据中没有重复值,并且两个变量完全单调相关时,斯皮尔曼相关系数为+1或-1,当X增加时,Y趋向于增加时,斯皮尔曼相关系数为正,而当X增加并且Y趋向于减少时,斯皮尔曼相关系数则为负。)
对比学习笔记_第6张图片

六、如何评价句子向量生成的好坏

举一个通俗的例子,现在有个动物园,我们希望动物园里面各类动物能尽量聚集在一起,同时我们还希望能更好的利用动物园,也就是让动物们均匀的分布在动物园里,让空间更好的被利用。
这个例子中“尽量聚集同类动物”这个特性就像是alignment,"让动物们均匀分布在动物园"就像是uniformity。这两个值都是越小越好,越说明对比学习效果好。
(1)alignment:正例对齐性。计算所有正样本对之间的距离,如果 alignment 越小,则正样本的向量越接近,对比学习效果越好。计算公式如下:
alignment
(2)uniformity:整个表示空间的一致性。表示所有句子向量分布的均匀程度,越小表示向量分布越均匀,样本分布越均匀,信息熵越高,对比学习效果越好,计算公式如下:
对比学习笔记_第7张图片

通过 alignment 和 uniformity 这两个指标评价无监督 SimCSE 的效果,如下图所示:
对比学习笔记_第8张图片其中 “Fixed 0.1” 表示对于 x 和 x+ 使用相同的 Dropout (p=0.1),Unsup. SimCSE 表示无监督 SimCSE,箭头表示训练的变化过程。可以看到 “Fixed 0.1” 和 “No dropout” 这两种方法随着训练的进行可以减小 uniformity 的值,但是 alignment 却会变大。而 “Unsup. SimCSE” 和 “Delete one word” 可以在 alignment 保持稳定的情况下,减小 uniformity 的值。
另外一方面,SimCSE 与 “Delete one word” 相比,SimCSE 的 alignment 相对大了一些,但是 uniformity 却小了很多,因此 SimCSE 效果比 “Delete one word” 更好。

七、simcse相比sbert好在哪里

对比学习笔记_第9张图片
作者测试了现有模型的alignment和uniformity,如下图所示,可以发现性能更优的模型通常有着更好的alignment和uniformity,BERT虽然有很好的alignment,但uniformity太差,而基于后处理的BERT-flow和BERT-whitening又恰恰走向了另一个极端,本文提出的SimCSE则是对这两个指标的一个很好的平衡,加入监督训练后,SimCSE的两个指标会同时提升,这个结果和上面的理论证明完全吻合。

八、什么是各向异性

各向异性指的是向量聚集在一个狭小的圆锥体中,从而严重损害了它的表达力。

九、什么是模型坍塌

当对比学习系统不好的时候,容易出现模型坍塌问题。模型坍塌指映射函数在将输入映射到单位超球面时,无论是正例还是负例,都无差别映射至球面上同一个点。即:映射函数f对所有输入进行无差别编码,如此一来,模型无法学到任何有用信息。对比学习笔记_第10张图片

十、如何防止模型坍塌

防止坍塌是对比学习最关键的一个出发点,SimCLR通过InfoNCE和负例来防止坍塌:通过正例来保证Alignment原则,正例相似度越高,在单位超球面中距离越近;通过负例实现均匀Uniformity,在单位超球面之中负例之间互斥,距离越远越好,由此实现防止坍塌。所以,SimCLR是通过负例来解决模型坍塌的,这是一种典型做法。目前得到的一个共识是:负例越多,学习效果越好。

对比学习笔记_第11张图片

参考文献:

  • https://zhuanlan.zhihu.com/p/141172794
  • https://zhuanlan.zhihu.com/p/410309087
  • https://wenku.baidu.com/view/6a9f1f00a6e9856a561252d380eb6294dd882296.html
  • https://blog.csdn.net/weixin_43557139/article/details/116207848
  • https://zhuanlan.zhihu.com/p/375659368
  • https://zhuanlan.zhihu.com/p/394776677
  • https://zhuanlan.zhihu.com/p/368353121
  • https://blog.csdn.net/Fitz1318/article/details/124167735
  • https://www.6aiq.com/article/1630369506500
  • https://juejin.cn/post/7064856882694848526

你可能感兴趣的:(机器学习,深度学习)