由于在做一些语义相似的工作,其中看了陈丹奇组的SimCSE使用了对比学习刷新了有监督和无监督的SOTA,自己也在做一些相关的下游任务的实验,其中就使用了图像和nlp领域都非常火的对比学习的方法,看了一下张俊林大神知乎对于对比学习的研究进展精要,讲的还是一如既往的清晰易懂。还是做一下搬运工,做一下自己的提炼记录。
对比学习分类
对比学习是无监督学习中自监督学习中的一种,其中NLP中的预训练模型MLM就是自监督学习(使用辅助任务挖掘无监督语料自身的监督信息)。图像中的自监督分为两种:生成式(VAE,GAN),判别式(对比学习)。而对比学习又可以分为1.基于负例;2.基于对比聚类;3.基于不对称网络;4.基于冗余消除损失函数等。对比学习中的要点是构造正反例,构造学习模型,防止模型坍塌。其中的几种模型方法都是在这三个要点上进行变换和改进。
基于负例的对比学习
代表模型:Moco,SimCLR
SimCLR
使用常见的图像增强方法构造正例,负例来自于batch内部。模型结构使用双塔结构,如下图所示,在encoder层后又加入了project层。
1.为什么在encoder后面要加入project层?
Moco中没有使用project,但是实验证明了project的有效性;但是张俊林提出了自己的猜测:encoder之后的特征表示包含了更多的包含图像增强信息在哪的细节特征,project可以进行过滤;预训练时特征会有两种:通用特征和任务相关特征;加入project后区分了两者特征,encoder之后的特征更加通用化(供后面的finetune使用),project后的特征与预训练的任务相关;
2.相似计算要做L2正则?
L2把特征向量映射到了单位超球面,单位向量长度可以增加了训练的稳定性,超球面可以区分类别,提高模型表示能力。归一化后的向量的点积与余弦距离是等价的,所以相似性计算可以使用L2之后的点积或者是cosine。
3.对比学习的表示能力的评判标准
特征学习表示能力的评判标准uniform和alignment出自该论文。 alignment:正例的距离相近,特征表示最直接表现。
uniform:特征均匀分布在球面上,防止模型坍塌。(分布均匀表示两两有差异,信息保留更多。)
4.损失函数
分子是alignment,分母就是uniform。
温度系数t就是uniform和容忍性的权衡,越小表示越关注距离近的负例,但是太小的话,有可能产生误判,越大就是对误判为反例有更大的容忍性。温度系数更详细的分析可以看这篇知乎。
Moco系列
使用的负例则是来自batch之外,取自所有的训练数据。模型的结构如下图。
1.不对称的分支,下分支的参数更新使用移动平均的动量更新机制。
2.负例不限于batch之内
实验证明上述两者需要一起使用,下分支进行缓慢的参数变动使得来自不同batch的表征编码相对稳定而统一的改变。
基于聚类的对比学习
代表模型:SwAV
增强方法和模型结构和SimCLR相同;
损失函数的计算不同:对batch内的特征表示进行聚类,使正例对的表示在同一个类中。
同样的,损失函数中分子体现了alignment,分母体现了uniform属性。SimCLR可以看成是极端情况下的聚类模型。
非对称结构
代表模型:BYOL
BYOL 只是用正例 且是目前最好的对比学习模型之一,如何防止坍塌。图像增强方法一致,模型结构在moco V2的基础上上分枝增加了project结构,上下分支不对称更新,模型只使用正例,分别进行两次模型计算。
初步的结论应该是不对称是防止坍塌的关键,而动量更新则对提升模型很重要。
消除冗余损失函数
代表模型:Barlow,Twins
模型对称;共享参数;只使用正例在损失函数上做了一些变化。
相关性矩阵。不变项(拉近正例) + 冗余消除项(增强元素独立性)
方法对比及问题
模型对比:
论文“How Well Do Self-Supervised Models Transfer?”实验给出了结论,DeepCluster-v2 SwAV BYOL SimCLR-v2这几个模型效果较突出。
问题:
1.训练数据偏置问题 目前公开训练数据往往是很干净的,如果是复杂的图片数据则会产生数据偏置问题,
2.更好构建正例的方法,对于模型学习更多的空间不变形。
3.像素级学习能力。对于像素级的下游任务更加友好
4.Hard负例问题,负例越多则hard负例越多,对模型也越好,温度系数t也是聚焦hard负例。
5.模型融合问题,有监督模型和对比学习融合
以上就是俊林大神对于对比学习的一些介绍,并且微博在对比学习上也做了一些工作,是对比学习在nlp及多模态上的应用,用于对抗训练数据中的噪声。