对比学习(Contrastive Learning)在CV与NLP领域中的研究进展(一)

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 对比学习(Contrastive Learning)在CV与NLP领域中的研究进展(一)

对比学习方法(CV)


对比学习要做什么?


有监督训练的典型问题,就是标注数据是有限的。


目前NLP领域的经验,自监督预训练使用的数据量越大,模型越复杂,那么模型能够吸收的知识越多,对下游任务效果来说越好。这可能是自从Bert出现以来,一再被反复证明。


所以对比学习的出现,是图像领域为了解决“在没有更大标注数据集的情况下,如何采用自监督预训练模式,来从中吸取图像本身的先验知识分布,得到一个预训练的模型”。


对比学习是自监督学习的一种,也就是说,不依赖标注数据,要从无标注图像中自己学习知识。


目前,对比学习貌似处于“无明确定义、有指导原则”的状态,它的指导原则是:通过自动构造相似实例和不相似实例,要求习得一个表示学习模型,通过这个模型,使得相似的实例在投影空间中比较接近,而不相似的实例在投影空间中距离比较远。


对比学习Paper都会涉及到的一些关键点:


如何构造相似实例,以及不相似实例;


如何构造能够遵循上述指导原则的表示学习模型结构;


以及如何防止模型坍塌(Model Collapse);


SimCLR:一个典型的负例对比学习方法


SimCLR它是图像领域2020年ICML会议提出的,是一个比较“标准”的对比学习模型。


第一,它相对于之前的模型效果有明显的提升;第二,它采取对称结构,整体相对简洁清晰;第三,它奠定的结构,已成为其它对比学习模型的标准构成部分。


如何构造正负例


1.png


正例构造方法如上图所示。对于某张图片,我们从可能的增强操作集合T中,随机抽取两种:t1T及t2T,分别作用在原始图像上,形成两张经过增强的新图像,两者互为正例。训练时,Batch内任意其它图像,都可做为x1或x2的负例。


对比学习希望习得某个表示模型,它能够将图片映射到某个投影空间,并在这个空间内拉近正例的距离,推远负例距离。也就是说,迫使表示模型能够忽略表面因素,学习图像的内在一致结构信息,即学会某些类型的不变性,比如遮挡不变性、旋转不变性、颜色不变性等。SimCLR证明了,如果能够同时融合多种图像增强操作,增加对比学习模型任务难度,对于对比学习效果有明显提升作用。


构造表示学习系统


指导原则:通过这个系统,将训练数据投影到某个表示空间内,并采取一定的方法,使得正例距离比较近,负例距离比较远。


2.png


上图展示了SimCLR模型的整体结构。是的,它是一个双塔模型,不过图像领域一般叫Branch(上下两个分支)。


我们随机从无标训练数据中取N个构成一个Batch,对于Batch里的任意图像,根据上述方法构造正例,形成两个图像增强视图:Aug1和Aug2。Aug1 和Aug2各自包含N个增强数据,并分别经过上下两个分支,对增强图像做非线性变换,这两个分支就是SimCLR设计出的表示学习所需的投影函数,负责将图像数据投影到某个表示空间。


以上分支为例。Aug1首先经过特征编码器Encoder(一般采用ResNet做为模型结构,这里以函数 fθ代表),经CNN转换成对应的特征表示 。之后,是另外一个非线性变换结构Projector(由[FC->BN->ReLU->FC]两层MLP构成,这里以函数 gθ代表),进一步将特征表示hi映射成另外一个空间里的向量zi。这样,增强图像经过 gθ(fθ(x)) 两次非线性变换,就将增强图像投影到了表示空间,下分枝的Aug2过程类似。(问题:为什么这种投影操作,要做两次:经验结果)。


对于Batch内某张图像x来说,在Aug1和Aug2里的对应的增强后图像分别是xi和xj,他们互为正例,而xi和Aug1及Aug2里除xj之外的其它任意2N-2个图像都互为负例。在经过变换后,增强图像被投影到表示空间。通过定义合适的损失函数,来实现“正例距离较近,负例距离较远”的目标。


距离度量函数


首先需要一个度量函数,以判断两个向量在投影空间里的距离远近,一般采用相似性函数来作为距离度量标准。


具体而言,相似性计算函数采取对表示向量L2正则后的点积或者表示向量间的Cosine相似性:


3.png


损失函数


损失函数很关键,SimCLR的损失函数采用InfoNCE Loss,某个例子对应的InfoNCE损失为:


4.png


其中代表两个正例相应的Embedding。


InfoNCE函数,分子部分鼓励正例相似度越高越好,也就是在表示空间内距离越近越好;而分母部分,则鼓励任意负例之间的向量相似度越低越好,也就是距离越远越好。


上面介绍了SimCLR的关键做法,本身这个过程,其实是标准的预训练模式;利用海量的无标注图像数据,根据对比学习指导原则,学习出好的Encoder模型以及它对应产生的特征表示。所谓好的Encoder,就是说输入图像,它能学会并抽取出关键特征,这个过程跟Bert模型通过MLM自监督预训练其实目的相同,只是做法有差异。学好Encoder后,可以在解决下游具体任务的时候,用学到的参数初始化Encoder中的ResNet模型,用下游任务标注数据来Fine-tuning模型参数,期待预训练阶段学到的知识对下游任务有迁移作用。由此可见,SimCLR看着有很多构件,比如Encoder、Projector、图像增强、InfoNCE损失函数,其实我们最后要的,只是Encoder,而其它所有构件以及损失函数,只是用于训练出高质量Encoder的辅助结构。目前所有对比学习模型都是如此,这点还请注意。


SimCLR的贡献,一个是证明了复合图像增强很重要;另外一个就是这个Projector结构。这两者结合,给对比学习系统带来很大的性能提升,将对比学习性能提升到或者超过了有监督模型,在此之后的对比学习模型,基本都采取了Encoder+Projector的两次映射结构,以及复合图像增强方法。


评判对比学习系统的标准


5.png


对比学习在做特征表示相似性计算时,要先对表示向量做L2正则,之后再做点积计算,或者直接采用Cosine相似性,为什么要这么做呢?


很多研究表明,把特征表示映射到单位超球面上,有很多好处。这里有两个关键,一个是单位长度,一个是超球面。首先,相比带有向量长度信息的点积,在去掉长度信息后的单位长度向量操作,能增加深度学习模型的训练稳定性。另外,当表示向量被映射到超球面上,如果模型的表示能力足够好,能够把相似的例子在超球面上聚集到较近区域,那么很容易使用线性分类器把某类和其它类区分开(参考上图)。在对比学习模型里,对学习到的表示向量进行L2正则,或者采用Cosine相似性,就等价于将表示向量投影到了单位超球面上进行相互比较。


很多对比学习模型相关实验也证明了:对表示向量进行L2正则能提升模型效果。


Alignment和Uniformity


6.png


论文 《Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere》,对好的对比学习系统进行了探讨。它提出好的对比学习系统应该具备两个属性。


**Alignment:**指的是相似的例子,也就是正例,映射到单位超球面后,应该有接近的特征,也即是说,在超球面上距离比较近


**Uniformity:**指的是系统应该倾向在特征里保留尽可能多的信息,这等价于使得映射到单位超球面的特征,尽可能均匀地分布在球面上,分布得越均匀,意味着保留的信息越充分。分布均匀意味着两两有差异,也意味着各自保有独有信息,这代表信息保留充分。


模型坍塌(Collapse)


7.png


Uniformity特性的极端反例,是所有数据映射到单位超球面同一个点上,这极度违背了Uniformity原则,因为这代表所有数据的信息都被丢掉了,体现为数据极度不均匀得分布到了超球面同一个点上。也就是说,所有数据经过特征表示映射过程后,都收敛到了同一个常数解,一般将这种异常情况称为模型坍塌(Collapse)(参考上图)。


重新审视类似SimCLR结构的对比学习模型


可以看到,对比学习模型结构里的上下两个分枝,首先会将正例对,或者负例对,通过两次非线性映射,将训练数据投影到单位超球面上。然后通过体现优化目标的InfoNCE损失函数,来调整这些映射到单位超球面上的点之间的拓扑结构关系,希望能将正例在超球面上距离拉近,负例在超球面上推远。那么损失函数InfoNCE又是怎么达成这一点的呢?


8.png


分子部分体现出“Alignment”属性,它鼓励正例在单位超球面的距离越近越好;而分母里负例,则体现了“Uniformity”属性,它鼓励任意两对负例,在单位超球面上,两两距离越远越好。


**温度超参 τ 有什么作用呢?**目前很多实验表明,对比学习模型要想效果比较好,温度超参 τ 要设置一个比较小的数值,一般设置为0.1或者0.2。问题是:将这个超参设大或设小,它是如何影响模型优化过程的呢?目前的研究结果表明,InfoNCE是个能够感知负例难度的损失函数,而之所以能做到这点,主要依赖超参。


对比学习方法分类(图像)


如果从防止模型坍塌的不同方法角度,我们可大致把现有方法划分为四种:基于负例的对比学习方法、基于对比聚类的方法、基于不对称网络结构的方法,以及基于冗余消除损失函数的方法。


对比学习方法归类


基于负例的对比学习方法


9.png


所有在损失函数中采用负例的对比学习方法,都是靠负例的Uniformity特性,来防止模型坍塌的,这包括SimCLR系列及Moco系列等很多典型对比学习模型


基于对比聚类的方法


10.png


代表模型SwAV。


对于Batch内某张图像x来说,假设其经过图像增强Aug1和Aug2后,获得增强图像x1,x2,x1与x2则互为正例。x1走上分枝,x2走下分枝,SwAV对Aug1和Aug2中的表示向量,根据Sinkhorn-Knopp算法,在线对Batch内数据进行聚类。SwAV要求表示学习模型根据x1预测x2所在的类,同样的,也要求x2预测x1所在的类。


该方法要求某个投影点在超球面上,向另外一个投影点所属的聚类中心靠近,体现了Alignment原则;和其它聚类中心越远越好,这体现了Uniformity属性。


SwAV面临模型坍塌问题,具体表现形式为:Batch内所有实例都聚类到同一个类里。所以为了防止模型坍塌,SwAV对聚类增加了约束条件,要求Batch内实例比较均匀地聚类到不同的类别中。本质上,它与直接采用负例的对比学习模型,在防止模型坍塌方面作用机制是类似的,是一种隐形的负例。


基于不对称网络结构的方法


11.png


代表模型BYOL:只用正例来训练对比学习模型,靠上下分枝的结构不对称,防止模型坍塌。


基于冗余消除损失函数的方法


12.png


代表模型 Barlow Twins。


既没有使用负例,也没有使用不对称结构,主要靠替换了一个新的损失函数,可称之为“冗余消除损失函数”,来防止模型坍塌。


实验结果


目前绝大多数对比学习模型在做模型训练的时候,采用的是ImageNet数据集,在评测的时候,主要实验也是在ImageNet上做的,那么问题是:对比学习本质上是种自监督预训练模型,希望能够从ImageNet数据集上自监督地学到一些图像先验知识与结构。那么,这种从ImageNet数据集学到的知识,能否很好地迁移到其它数据集呢?


论文“How Well Do Self-Supervised Models Transfer?”对13个知名自监督模型,在40多种数据集上进行相对公平地对比测试,得出了一些很有价值的结论。



相关文章
|
2月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch 在自然语言处理中的应用案例研究
【8月更文第27天】PyTorch 是一个强大的开源机器学习框架,它为开发者提供了构建和训练深度学习模型的能力。在自然语言处理(NLP)领域,PyTorch 提供了一系列工具和库,使开发者能够快速地实现和测试新的想法。本文将介绍如何使用 PyTorch 来解决常见的 NLP 问题,包括文本分类和机器翻译,并提供具体的代码示例。
35 2
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】自然语言处理(NLP)的突破,关注NLP在机器翻译、情感分析、聊天机器人等方面的最新研究成果和应用案例。
自然语言处理(NLP)作为人工智能的一个重要分支,近年来取得了显著的突破,特别在机器翻译、情感分析、聊天机器人等领域取得了显著的研究成果和广泛的应用。以下是对这些领域最新研究成果和应用案例的概述,并附带相应的代码实例。
69 1
|
3月前
|
自然语言处理 监控 自动驾驶
大模型在自然语言处理(NLP)、计算机视觉(CV)和多模态模型等领域应用最广
【7月更文挑战第26天】大模型在自然语言处理(NLP)、计算机视觉(CV)和多模态模型等领域应用最广
78 11
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(NLP)是人工智能和语言学的一个交叉领域,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理(NLP)是人工智能和语言学的一个交叉领域,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
基于深度学习的自然语言处理技术研究与进展
基于深度学习的自然语言处理技术研究与进展
91 1
|
5月前
|
机器学习/深度学习 自然语言处理 算法
如何快速高效全面的学习自然语言处理
如何快速高效全面的学习自然语言处理
|
5月前
|
存储 机器学习/深度学习 人工智能
5个优质免费自然语言处理学习资源 | 语言技术导航
5个优质免费自然语言处理学习资源 | 语言技术导航
179 1
|
机器学习/深度学习 存储 自然语言处理
从零开始学习Java神经网络、自然语言处理和语音识别,附详解和简易版GPT,语音识别完整代码示例解析
从零开始学习Java神经网络、自然语言处理和语音识别,附详解和简易版GPT,语音识别完整代码示例解析
164 0
|
5月前
|
机器学习/深度学习 自然语言处理 算法
19ContraBERT:顶会ICSE23 数据增强+对比学习+代码预训练模型,提升NLP模型性能与鲁棒性:处理程序变异(变量重命名)【网安AIGC专题11.15】
19ContraBERT:顶会ICSE23 数据增强+对比学习+代码预训练模型,提升NLP模型性能与鲁棒性:处理程序变异(变量重命名)【网安AIGC专题11.15】
199 1
|
机器学习/深度学习 自然语言处理 算法
NLP(自然语言处理)自学习平台可能是一个很好的选
NLP(自然语言处理)自学习平台可能是一个很好的选
115 3
下一篇
无影云桌面