2021-12 对比学习精要- Contrastive lear
本文完全参考 张俊林 老师的博客 对比学习(Contrastive Learning):研究进展精要
前言
对比学习从目标来看,是要做在NLP类型类似Bert预训练的事,即通过自监督学习,充分挖掘模型从海量无标注数据中学习通用知识的能力。
大致分类
对比学习目前可大致可分为
- 基于负例的对比学习方法
- 基于对比聚类的方法
- 基于不对称网络结构的方法
- 基于冗余消除损失函数的方法
- ……
基于负例的对比学习方法
SimCLR
对比学习是自监督学习,没有标注数据,因此需要自行构建相似数据(正例)和不相似数据(负例)。
![](https://img.haomeiwen.com/i1788312/d161144c4694f9f2.png)
正负例构建
对于某张图片,首先需要一个增强操作集合
表示学习系统构造
构造原则:构造一个表示学习系统,通过它可以将训练数据投影到某个表示空间内,并采取一定的方法,使得正例距离能够比较接近,负例距离比较远。
![](https://img.haomeiwen.com/i1788312/ddc947fa415a2dad.png)
SimCLR由对称的上下两个分支构成,随机从无标训练数据中获取N个构成一个Batch,对于Batch内的任意图像,根据上述方法构造正例,形成两个图像增强视图:
由于上线分支时对称的,所以以增强视图
相似性计算函数
表示向量L2正则后的点积或者表示向量间的Cosine相似性
InfoNCE损失
其中代表两个正例相应的表示向量。从这InforNCE可以看出,函数的分子部分鼓励正例相似度越高越好,也就是在表示空间内距离越近越好;而分母部分,则鼓励任意负例之间的向量相似度越低越好,也就是距离越远越好。
SimCLR小结
SimCLR有两个最大的贡献,一个是证明了复合图像增强很重要;另外一个是Projector结构很有必要。(具体原因阐述可见张老师博客)。
Moco V2
基于负例的对比学习:Batch外
很多实验证明了:在基于负例的对比学习中,负例数量越多,对比学习模型越好。但是受限算力,我们又不能无限放大Batch size,那么有什么办法在算力有限的情况,也可以在整个无标注训练数据集内随机挑选负例,而不再局限于Batch内寻找呢,Moco提出了一个解决方案(但由于Moco v2吸收了SimCLR的Projector结构,以及更具难度的图像增强方法,所以这里讲解Moco v2)。
![](https://img.haomeiwen.com/i1788312/963d62bf3396e93c.png)
Moco v2的图像增强方法、Encoder结构、Projector结构、相似性计算方法以及InfoNCE损失函数,和SimCLR基本一致,最主要的特点和创新点在两个分支中的下分枝:SimCLR里上下两个分支时对称的,两者可参数共享,而Moco v2的下分枝模型更新参数,采用的是动量更新(Momentem Update)。下分枝的模型结合与上分支保持一致,但是模型参数更新不再使用损失函数的反向传播来进行梯度更新,而是采用移动平均机制来更新
其中,
此外Moco v2维护了一个较大的负例队列,当对比学习需要在正例和负例之间进行对比计算是,就是这个负例队列里去K个。
基于对比聚类的方法
SwAV 对比聚类:负例隐身
![](https://img.haomeiwen.com/i1788312/706258e205e09c0e.png)
SwAV的模型结构,其中的图像增强、Encoder以及Projector结构,与SimCLR基本保持一致,而且也是上下分枝对称结构。对于Batch内某张图像
损失函数
损失函数采用
其中
基于不对称网络结构的方法
BYOL 非对称结构
上文有述,在常见的基于负例的对比学习方法中,负例有着举足轻重的作用,它起到了将投影到超球体平面的各个实例对应的表示向量相互推开,使得图像对应的表示向量在超球体表面分布均匀的作用,以此来避免表示学习方法模型坍塌问题。
那么,问题来了:如果我们只使用正例,不使用负例来训练对比学习模型,这种思路是可行的吗?乍一看,这几乎是不可能的:假设只有正例,模型推动正例在表示空间内相互靠近。如果只有这一优化目标,很明显,理论上,模型会很快收敛到常数解,也就是所有数据会被映射到表示空间里同一个点上。就是说,很容易出现模型坍塌的结局
但是,BYOL模型就是这么做的,关键是,它还做成功了,更关键的是,不仅做成功了,它还是目前效果最好的对比学习模型之一。那么,BYOL是怎么做到的呢?
![](https://img.haomeiwen.com/i1788312/2c33ad81880cf5f3.png)
BYOL模型与Moco V2基本是一致的,但是区别在于,在上线分支中,在Projector之后,新增了一个非线性变换模型Predictor。Predictor与Projector类型([FC->BN->ReLU->FC]构成的MLP映射网络),产生表示向量
损失函数
经过改写,也是Cosine相似性的一个变体,它的最小值对应两个表示向量的Cosine最大值,也即优化目标是在单位超球面上,正例之间的距离越近越好。
论文中指出BYOL之所以它没有坍塌到常数解,是由于online和Target两者结构的不对称造成的。
基于冗余消除损失函数的方法
Barlow Twins 冗余消除损失:越简单越快乐
![](https://img.haomeiwen.com/i1788312/62b1cef99e6cb901.png)
Barlow Twins和BYOL一样也只使用了正例,其模型结构与SimCLR保持一致。其特点是在激情增强图像经过
损失函数
从Barlow Twins我们可以看出,如果能够合理设置损失函数,那么光靠损失函数,也可以避免模型坍塌现象。