李 希,刘喜平,李旺才,万常选,刘德喜
1(江西财经大学 信息管理学院,南昌 330013)2(江西科技师范大学 数学与计算机科学学院,南昌 330036) E-mail:liuxiping@jxufe.edu.cn
当前的人工智能热潮很大程度上是源于机器学习,特别是深度学习技术的巨大成功.机器学习就是通过输入海量训练数据对模型进行训练,使模型掌握数据所蕴含的潜在规律,进而对新输入的数据进行准确的分类或预测.
在现有的机器学习方法中,监督学习方法(supervised learning)占据主导地位.监督学习方法的一个基本要素是带有强监督信息(如样本所属的类别标签)的训练数据,也即标注数据.在实际应用中,往往难以获得高质量标注信息,或者人工标注代价较高,因此,如何在缺乏监督信息或者只有有限的监督信息情况下进行学习就显得尤为重要.在这一背景下,近几年,自监督学习(self-supervised learning)异军突起,引起了很多的关注.自监督学习利用数据本身的信息来形成监督信号,利用这些监督信号来指导学习数据的特征表达,已经形成了一种新的机器学习范式.
自监督学习又可以分为对比学习(contrastive learning)和生成学习(generative learning)两条主要的技术路线[1].生成学习以自编码器(如生成对抗网络GAN、变分自编码器VAE等等)这类方法为代表,从原始数据出发,生成新的数据,使得生成数据尽可能还原原始数据.而对比学习不要求能够重新生成原始数据,只是要求模型能够区分相似样本与不相似样本,着重于学习相似样本之间的共同特征,因此相对于生成学习来说,模型更加简单,泛化能力更强,近年来得到了越来越多的关注.
对比学习的核心思想是将正样本和负样本在特征空间对比,从而学习样本的特征表示,使得样本与正样本的特征表示尽可能接近,而与负样本的表示尽可能不同.与监督学习不同的是,这里的正样本和负样本并不是根据样本标签确定的,而是使用代理任务(pretext task)[2]来定义的.代理任务定义了样本之间的相似性,给定一个样本,与之相似的样本就是正样本,而不相似的样本就是负样本.数据增强是代理任务的实现常见手段.
对比学习的一个例子如图1所示.给定一个对象的图片(原样本),通过数据增强得到该图片的正样本,其他对象的图片则构成了负样本.通过对比学习,让原样本靠近正样本,远离负样本.
图1 对比学习应用举例[2]Fig.1 Example of a contrast learning application[2]
对比学习最近已成为计算机视觉(CV),自然语言处理(NLP)和其它领域的自监督学习方法的主要组成部分.
本文就对比学习的发展脉络和研究重点进行梳理.首先介绍了对比学习的基本思想,以及对比学习的主要研究问题.然后围绕对比学习的两个核心问题:损失函数设计和正负样本构造,介绍了现有成果.最后梳理了对比学习在两个主要应用领域:计算机视觉领域和自然语言处理领域的研究进展.最后分析了对比学习面临的挑战和可能的研究方向.
人们普遍认为,事物存在某种通用的特征[3].对比学习就是去学习这样一种特征,该特征有很强的迁移性,可以在未标注数据的下游任务里,获得很好的效果.
对比学习通过将数据分别与正负例样本进行对比,来学习样本的特征表示,可以看作是一种表征提取方法.对比学习的一般模型如图2所示.
图2 对比学习的一般模型Fig.2 General model of contrast learning
通过模型可以看到,数据x经过数据增强,得到增强数据x1和x2,再分别经过fθ映射函数(编码器/模型)就得到了各种的特征,将这些特征用于计算对比学习的损失函数,同时使得正例的损失与负例的损失都达到最小.目前,基于对比学习的模型,大部分架构都遵循图2的右半部,各种模型的不同之处,体现在对原始数据的数据增强方式上,不同的增强方法会带来不同的特征表示,从而影响下游任务的效果.
图3 图像领域对比学习经典框架[10]Fig.3 Classical framework for contrast learning in the image domain[10]
近两年,对比学习涌现出许多模型框架,总体来看,如图3所示,图像领域对比学习经典框架[10]有3个:基于负例的对比学习、基于非对称网络的对比学习和基于特征去相关的对比学习.同时,对比学习也被引入自然语言处理领域(NLP).例如:SimCSE[11]将对比学习的思想引入sentence embedding,刷新了无监督与有监督语义相似度计算任务的最好成绩;文献[12]主要是在SimCSE上进行优化,通过ELECTRA模型,生成伪造样本和RTD(Replaced Token Detection)任务,来学习原始句子与伪造句子之间的差异,以提高句向量表征模型的效果.InfoNCE[3]进一步将对比学习与互信息优化联系起来,激发了一系列后续工作[4,5].
对比学习的研究问题主要有3个:
1)如何构造正负例.不同的数据增强方式可以让模型学习到不同的特征表示,不同的表征适用于不同的下游任务.选择合适的数据增强方式,构造合理的正负例,是能否成功提取对下游任务有用表征的关键.
2)负例的数量.多少负例才能够让模型得到充分的学习?SimCLR[4]提出1∶4096,许多实验也验证了负例越多效果越好.
3)损失函数.对比学习的研究目标是要学习一个映射函数f(x),也就是encoder编码器,满足下式:
s(f(x),f(x+))≫s(f(x),f(x-))
(1)
其中,s()是相似度计算函数,x为输入样本,x+为正例,x-为负例.要使得输入样本与正例的相似度远大于负例,需要通过损失函数来达到.可以根据不同的任务来设计不同的损失函数.
评价一个对比学习模型的好坏标准,一方面可以通过下游任务效果的好坏来衡量,另一方面也可以通过“对齐”与“均匀”两个指标来衡量[13].举个例子来说明这两个指标:超市里面的商品都是按类别摆放,如厨房用品、清洁用品、服饰等,同类商品摆放在一起,方便用户选购,这就是“对齐”;超市里面的货架要分布均匀,区域之间的距离都差不多,这就是“均匀”.理想状态是每个类别均匀分布在一个超球体上,这样每个类别之间的距离都一样.正例之间保持紧密性,负例之间保持分散性.
传统的有监督学习是指使用有标签的训练数据来训练模型.将预测值与真实值之间的误差损失反向传播,通过计算梯度、更新权重,反复迭代,使得误差损失最小,以此训练模型,去预测未知标签数据.传统的有监督学习方法有:概率监督学习、支持向量机、决策树等.传统的有监督学习在很多方面获得了巨大成功,但训练集需要人工标注,耗费人力及资源,鲁棒性较差,泛化能力不足.
对比学习是一种自监督学习技术,无需人工标注数据,是一种基于判别式的表征学习框架.将样本与相似样本和不相似样本进行比较,通过设计模型计算对比损失,使得相似样本的特征表示更接近,不相似样本的特征表示更疏远.与传统模型相比,对比学习模型构造简单,人工负担小,通过自动构造正负例,不受标注数据规模的限制,增强了模型的泛化能力和鲁棒性.
损失函数是用来评估模型的预测值与真实值之间的差别.损失函数的设计,直接影响到模型的性能.对比学习可以看作是一种降维学习方法,通过学习一种映射关系,将样本通过映射函数映射到低维空间,使得同类样本距离拉近,不同类样本距离推远.对比学习损失函数的发展脉络如图4所示.
图4 对比学习损失函数发展脉络Fig.4 Comparative learning loss function development
R.Hadsell等[19]提出了一种方法,通过学习不变映射来降维(Dimensionality Reduction by Learning an Invariant Mapping:DrLIM).学习一个非线性函数,将数据均匀地映射到输出流形.该论文提出了一种新的损失函数,即成对样本损失函数(公式(2)).不像传统的机器学习,损失函数是对所有样本的损失求和,这里的损失函数是成对样本的累加.
(2)
其中:
(3)
(4)
Pm(u;θ)表示在参数θ下的原数据的概率密度函数,Pn(u;θ)表示噪声概率密度函数.最终似然函数如下:
l(θ)=∑t[CtlnP(Ct=1|u;θ)+(1-Ct)lnP(Ct=1|u;θ)]
=∑t[Ctln(h(xt;θ))+ln(1-h(y;θ))]
(5)
其中:
G(u;θ)=lnPm(u;θ)+lnPn(u)
最终公式(5)也可看作原数据模型的对数与噪声模型对数之差,对差值进行逻辑回归.
A.Mnih&Y.W.Teh[21]第一次将NCE应用于自然语言处理.作者在论文中证明了随着噪声样本与观测值的比率增加,NCE梯度接近最大似然梯度.此时NCE对于噪声分布的依赖最小,接近于真实期望值.
使用上下文经验概率P(h)作为权重,定义一个全局NCE目标函数:J(θ)=∑hP(h)Jh(θ).
(6)
该论文仅使用少量的负样本就能达到很好的效果,所以比重要性采样更加有效、稳健(重要性采样的高方差会导致学习的不稳定).
A.vandenOord等[3]提出了对比预测编码(Contrastive Predictive Coding, CPC),利用当前输出作为先验知识,预测序列数据的未来输出,提高模型的表征能力.这篇论文的观点是,encoder提取的特征应当具有可预测性,只有能够预测别的特征的特征才是好特征.当然, 这是对有序(时域或者空间)数据有意义.算法的核心是通过自回归模型来学习未来的隐变量表示.论文提出InfoNCE公式如公式(7)所示,求和部分包含一个正样本xt+k,N-1个负样本.
(7)
InfoNCE的公式中可以看出负例的重要性,负例的数量直接影响了最终的结果.而过多的负例也会造成batchsize的庞大,使得显卡无法承担巨大的计算量.C.Yeh等[22]通过分析InfoNCE损失,去除耦合项,设计了新的解耦对比学习目标(Decoupled Contrastive Learning,DCL),摆脱了对比学习中正样本与负样本之间的耦合现象,显著提高了训练效率.
(8)
许多采用对比学习方法的模型,都采用基于交叉熵的损失函数,分别计算正负样的相似度,归一化后,计算交叉熵.例如公式(7)[3]中的损失是正确分类为正样本的类别交叉熵.同样地,根据SimCLR[4]的损失函数公式:
(9)
该方法以正样本正确分类的类别交叉熵作为损失函数,以控制判别效果.
对比学习中的温度超参数一般都默认采用较小的温度系数.F.Wang& H.Liu[24]研究了对比损失温度系数,证明了对比损失是一个难度感知损失函数(Hardness-aware Loss Function),温度τ控制难负样本(Hard Negative Samples)的惩罚强度.温度系数决定了对比损失对难负样本的关注程度,温度系数越大,则关注度越低;温度系数越小,则关注度越高.然而难负样本与正样本相似程度较高,有很多难负样本其实是潜在的正样本.过分强调与难负样本分离会破坏潜在的语义结构,不利于形成对下游任务有用的特征.
表示学习本质上要从数据中学习到一个优质的语义表示空间.这个空间应该能够体现“方以类聚,物以群分”这一客观规律.对比学习正是试图将正例拉近,负例推远,有助于得到好的语义表示空间.可解释性是?类对模型决策/预测结果的理解程度,包括模型本质的可解释性(模型到底学到了什么)、模型结果的可解释性(模型为什么产生某个结果)等.目前的对比学习主要还是关注模型的表现,对于模型的可解释性探讨不多.
对比学习通过引入对照性的实例来改进学习效果的思路对于机器学习可解释性的研究提供了启发.M.Gardner等[25]提出了在原始测试集上构建对比测试集(Contrast Test Set)的方法,通过以较小但有意义的方式手动扰动测试实例,以此来评估模型的局部决策边界,从而能够真实的评估模型的语言能力.最近,文献[26-29]研究了如何构造了对比性解释(Contrastive Explanations)以更好地理解模型的结果,即试图回答“WHY A Not B”而不仅仅是“WHY A”.
在对比学习中,假设计算目标函数时,只有正样本,那么对比的最终目的就是让所有相似样本的特征尽可能的相似,模型训练的结果就是,无论输入什么,它都输出同样的特征.用这样的特征去计算对比学习的损失函数,其值都会是零,模型什么也没有学到.引入负样本,实质是引入一种约束,这样一来,如果模型输出的特征相似,那么它在负样本的损失函数值就会变大,所以模型输出的特征必须能够同时使得正负样本的损失函数值都下降,达到一个最优解.负样本是一种约束,能够防止模型坍塌的情况出现.
4.1.1 设计负例
SimCLR[4]强调了负例构造的重要性,提出了一种构建负样本的方式.对一个batch中的图片做数据增强.对同一张图片做颜色变换、高斯模糊、裁剪等简单的变换.采用ResNet-50作为编码器,从增强数据中提取表征向量.再由全连接层和激活层投影到对比损失空间.同一图片的数据增强互为正例,而不同图片之间互为负例.训练的目标是期望同一张图片表征向量近似,不同图片表征向量远离.
对比学习在负样本众多的情况下效果显著,扩展负样本数量就成为提升模型效果的方式之一.这也导致了batchsize过大而造成GPU内存溢出问题.为了解决这一问题,MoCo[5]提出了一种动量对比方法,来提高每个mini-batch的负样本数量.通过查询值和含有编码键值对的字典之间的匹配缺失,来优化一个编码器.只要字典足够大,包含的负样本足够多,就能够学习到很好的特征表达.
虽然batchsize增加了,但是模型的性能也不一定就能得到提高,这是因为大量的负样本很可能是容易识别的负样本,浪费了算力,却得不到效果.Y.Kalantidis等[30]通过Mix-up的方式来得到模型难以识别的负样本,提高对比学习模型的效率.
对比学习中大部分的数据增强方式是将同一张图片及其增强副本作为正例对,其余图片视为其负例对.这样容易造成模型把相距很远的样本分得更远,而距离较近的负样本则难以区分.J.Robinson等[31]设计难负样本的原则是:与原始样本标签不同,且与原始样本相似.用无监督的方法,筛选出不属于同一个类别标签的样本.这些筛选出的难负样本能够更好的提升模型的性能.
4.1.2 设计正例
常见的对比学习是设计一个正例与若干个负例,而负例通常是一个batch内随机采样得到,在多分类任务中,容易发生错误,从而导致学习效果变差.P.Khosla等[32]提出了监督对比损失,使用标注的方式,对训练样本考虑多对正例比较.采用两阶段训练,首先标注自监督对比学习的正负例对,然后采用监督方式进行对比学习.
同样选取多个正例的对比学习还有B.Kang等[33]提出的k-positive对比学习.结合了监督学习和对比学习,解决类别不均匀情况下的特征表征问题.对每个batch中的一个样本,都选取与之同一个类的k个正样本,拉近正例之间的特征向量,来学习到具有区别性和均衡性的表征.
4.1.3 同时设计正负例
对比学习中正负例的设计是依赖于下游任务的.例如Y.Tian等[34]在探究对比学习的有效原因时,使用的数据集具有数字、位置和背景3要素.表示不同视觉之间的共享信息,对下游任务的影响是不同的,例如只共享数字部分,学习到的表征就会忽略位置和背景信息,因而在有关位置和背景的下游任务中无法取得好的效果.Y.Tian等在设计时,为一个视觉构造对应下游任务的3个正样本(数字、位置和背景),同时构造3个负样本(数字、位置和背景).当下游任务是判别数字时,则正样本共享对应数字的信息,负样本的各要素均是随机选择.
在计算机视觉领域使用对比学习,可以很方便的构造正负实例,比如图像里面常用的旋转、缩放、灰度、裁剪等操作,这些图像增强技术简单,而且不会带来太大的噪音.然而在NLP领域中,正负实例的构造就需要再三斟酌了.文献[14,35,36,37]都是通过加词、漏词、换位、乱序等方式来添加正负样本.文献[16]是通过添加扰动来产生正负样本.文本的数据增强,会带来巨大的噪音.因为对一个句子,加词、漏词、换序等方式,可能使得句子的语义发生巨大变化.
4.2.1 数据增强
构造正负例是对比学习的研究重点,数据增强技术也已经被证明是提高模型泛化和数据效率的有效方法.数据的效率是指利用有限的数据做出最佳的效果,一方面需要有一个优秀的模型,另一方面就需要有代表性的数据.表1详细介绍自然语言处理领域,应用对比学习时,采用的数据增强方法.
表1 数据增强方法Table 1 Data augmentation methods
1)传统数据增强
a)构造正例
NLP传统数据增强方法有以下几种:回译、词性替换、mixup、cutoff、词频等.回译是指利用机器翻译来解释文本语义,同时重新训练其含义.词性替换是指采用同义词来替换原词,而不改变含义.Mixup是指将同一批次的两个样本,按照一定的策略组合.Cutoff是指随机遗漏.
Z.Yang等[14]采用了随机遗漏、按词性遗漏和按词频遗漏的方法构造机器翻译的正样本,以最大似然估计模型为基础,使用对比学习对模型进行微调,减少了漏翻现象.Y.Qu等[38]比较了回译、词替换、mixup、cutoff和对抗这5种数据增强方法.通过实验发现回译加对抗的效果最好,发现了不同数据增强方法的互补性.Y.Yan等[39]采用了对抗,token shuffling,cutoff和dropout这4种增强方式进行对比,在无监督的模式下,对BERT进行微调,消除了高频词对句子语义表示的干扰,解决了BERT派生语句的表示崩溃问题,使模型学习到更好的句子表示.J.Giorgi等[40]在采样正例时,允许采样与锚点交叠、相邻和从属.
在多对多机器翻译时,两句话如果是一个意思,那么即使它们表达的语言不同,这两个句子在语义空间中的表征也应该是靠近的.X.Pan等[41]使用了跨语言表示中,一对多翻译的特性,直接进行句子自我对比,这样的效果比做数据增强要好很多(数据增强也会带来噪音).
b)构造负例
W.Zhang &K.Stratos[42]从理论和实验上证明了,选择难负样本对提升模型的有效性.M.Kachuee等[43]通过在每个训练批次中以洗牌的方式来产生噪音样本.W.Zhou等[44]通过概念乱序、概念生成句子的方式生成负例.
H.Wu等[37]从语言质量和语义质量两方面创建负例样本.对于语义质量,采用随机移除单词或句子;对于语言质量,通过单词乱序或删除单词来生成负例样本.负样本例子见图5.
c)同时构造正负例
同时构造正负例,虽然增加了计算量,但也使得模型的性能得以提升.J.Huang等[35]采用传统的数据增强方法,将一对互相匹配的query和code,改写query构造正例,将query与非匹配的code匹配,构建负例.简单地随机构建正负样本,容易产生无意义的正负样本,这些样本容易被识别.
N.Rethmeier等[45]将多标签分类任务建模成文本匹配任务,采样不同的正负标签,同时采样文本片段,构成伪标签,(4种标签:正标签、负标签、正伪标签、负伪标签)编码后,和句子编码拼接,通过NCE Loss训练匹配模型.D.Wang等[46]构建正例时将句子中的名词、动词和形容词替换为其同义词;负例则是将它们替换为反义词或随机词.T.Chen等[47]利用对比学习来提高远程监督关系抽取,将同一关系下的实例当作正例,不同关系的实例当作负例.H.Cai等[48]将对比学习引入到对话生成中,分别就上下文和响应进行分组抽样,实现数据增强.
图5 文本的数据增强[34]Fig.5 Text data augmentation[34]
2)模型层面的数据增强
许多实验证明了,传统数据增强的方式,实验效果并不十分理想.许多基于预训练模型的句子表征取得了显著效果,可以看作是模型层面的数据增强.
BERT预训练模型,通过MLM任务的自监督学习,充分挖掘了模型从海量无标注文本中学习通用知识的能力.通过有监督的微调,在许多NLP下游任务上取得了不错的性能.T.Kim等[49]采用了两个BERT,利用BERT自身的信息去进行对比,从而避免做数据增强,挖掘内部信息.模型中一个BERT的参数是固定的,用于计算中间层的句子表示,另一个BERT用于微调,来计算句子CLS的表示.同一个句子经过两个BERT所获得的表示构成正例对,不同句子的中间层的句子表示或者最后的CLS表示构成负例对.通过比对,获得更高质量的句子表征.
R.Luo等[50]采用互补mask的方式构造正例.具体做法是将一个输入经过多次mask,将相邻掩码句被mask的部分做互补操作.采用mask替换了token,由于它们都有着一样的上下文,不同掩码位置的序列也很接近,则它们语义上相似,所以互为正例.这种做法和X.Liang等[51]BERT执行两次dropout想法很相似?
因为BERT本身就有随机dropout的功能,同一句话,执行两次BERT,就能得到两个不同的表示向量,且语义一致.这样一来,相似样本的语义完全一致,被认为是数据增强的最小形式.X.Liang等[51]和SimCSE[5]都是采用这一思想来构造正例.也就是模型层面做了数据增强,不容易带来噪音.SimCSE是在标准Transformer中的全连接层和注意力求和操作上,执行dropoutmask操作.然而SimCSE通过dropout两次来构造正例对也会带来问题.因为Transformer的Position Embedding,SimCSE会认为相似或相同长度的句子在语义上是相似的.此外,过大的batchsize也会导致显卡的崩溃.之后的ESimCSE[52]通过WordRepetition,随机复制句子中的一些单词,改变句子长度来解决长度问题;模仿MoCo[7]的队列动量编码器,来解决batch size的问题.
3)只有正例的对比学习
S.Xu等[18]提出了一个生成式文本摘要对比学习模型SeqCo,在该模型中,将文档、参考摘要和模型生成的摘要视为具有相同表示的不同视图,并在训练过程中最大化它们之间的相似性.
该论文借鉴了BYOL[6]的思路,BYOL里面所有的图像都是正例,通过最大化“投影”和“预测”特征的相似性,不使用负例,学习表征.首先,有一个网络参数随机初始化且固定的target network;一个网络参数会变化的online network;等这个online network训练好之后,将target network替换为效果更好的网络参数(比如此时的online network),然后再迭代一次,也就是再训练一轮online network,效果是基于上一次的叠加.
4.2.2 对比损失函数使用策略
常见的对比损失函数的使用策略有如下3种:
1)作为原始模型的微调技术
在原始模型的损失函数基础上,加上对比学习损失函数,然后微调原模型,即为两阶段训练.例如Z.Yang等[14]是以最大似然估计训练模型为基础,使用对比学习对模型进行微调.Z.Zeng等[53]将有监督的对比学习用于意图分类器预训练,然后对领域内的数据集,使用交叉熵和LargeMargin Cosine Loss(LMCL)[54]对模型进行微调.Y.Liu等[15]将摘要生成分解为两个阶段:生成阶段采用最大似然估计损失,评分阶段采用对比学习损失.H.Kiyomaru &S.Kurohashi[55]利用RoBERTa作为基础模型,外加一个对比学习目标和一个生成目标.
2)与原始模型损失一起联合训练
将原始模型损失与对比损失,按照一定的策略,组合在一起,进行联合训练.一些使用举例见表2说明.
3)与预训练模型相结合
对比学习也可理解为是一种无监督学习.无监督的表征学习,起初在自然语言处理领域(NLP)取得了显著的成果(BERT[56],GPT[57]),例如,基于BERT的预训练模型[58,59],首先在一个大型的未标注数据集上进行预训练,得到表征后,再在一个较小的标记数据集上微调,从而获得良好的效果.
X.Qiu等[60]提出第2代预训练语言模型是融入了上下文信息的,能够在更大的语料库上训练,采用更深的网络结构,以及新的预训练任务的模型.其中就提到了基于对比学习的预训练语言模型.代表模型有InfoWord[17],灵感来源于Deep InfoMax(DIM)[61],一个基于互信息的图像表示学习方法,DIM旨在最大化一个图像的局部表示向量和整体表示向量的互信息.InfoWord将这一思想引入NLP,对于一个词序列,也可以考虑其整体表示和局部表示(比如一段文字与一句话).InfoWord将对比损失与MLM损失相结合.InfoWord模型中的MLM部分设计与SpenBert[62]是相似的,SpenBert采用几何采样来得到掩码的长度,均匀采样来选取掩码对比tokens.未来,也可以考虑采用不同的掩码方式,设计基于学习的预训练任务.
表2 损失函数训练模型Table 2 Loss function in training models
5.1.1 图像语义分割
图像语义分割的目的是为图像中的每个像素预测一个语义标签.传统方法是将语义分割看作一个像素级的分类任务,提取图像内部上下文信息,而忽视了像素之间的依赖关系.W.Wang等[63]提出了像素对比学习,利用跨图像的像素-像素对应关系来学习一个特征空间.同类像素互为正例,不同类像素互为负例,在交叉熵损失的基础上,叠加NCE损失.
在像素级分割预测任务中,为了获得更好的特征表征,还须考虑局部表示和全局表示.K.Chaitanya等[64]提出了一种局部对比损失法,通过利用从未标记图像的伪标签和有限的语义标签信息,来学习有助于分割的像素级特征.
5.1.2 无监督聚类
J.Li等[65]提出了原型对比学习(PCL),这是一种将对比学习和聚类相结合的无监督表示学习方法.通过聚类发现“原型”的分布,PCL将一个“原型”作为相似图像的簇的质心,将各个图像分配给多个“原型”,构造ProtoNCE损失函数训练模型,用对比学习优化网络,使得每个图像更接近相关“原型”.PCL将聚类后发现的语义结构,编码到所学习的特征空间中.
目前深度学习聚类方法常采用两阶段来构建模型,第1阶段使用预训练模型进行表征学习,第2阶段使用聚类算法(例如EM算法)完成聚类.由于这两个阶段是独立的,模型在预训练阶段可能无法充分探索数据的语义结构,从而导致聚类的次优解决方案.T.W.Tsai等[66]提出了混合对比专家模型(MiCE),这是一个概率聚类框架,结合了对比学习所学习到的区别性表示和潜在混合模型捕获的语义结构.在专家混合模型的激励下,MiCE使用门控函数,根据潜在语义,将未标记数据集划分为子集.
5.1.3 条件图像生成
条件图像生成是使用类标签信息生成各种图像的任务.传统方法是将图像和相应标签之间的成对关系(数据到类的关系)作为条件损失.ContraGAN[67]利用条件对比损失来考察同一批次中,多个图像之间的关系(数据到数据的关系)以及数据到类的关系.ContraGAN的损失函数也是InfoNCE loss,采用类标签作为相似程度对比,没有使用数据扩展.拉近图片与其类别距离的同时,拉近相同类别图片的距离.
5.1.4 目标检测和实例分割
Y.Xiong等[68]发现编码器早期的感受野可能太小,以至于无法有效适用于对比学习.当InfoNCE损失被应用于所有的局部学习时,由于早期阶段的解码器感受野有限,很难得到有效表征来正确识别正样本.Y.Xiong等增加了解码器深度,并允许上层块隐式地向下层块发送反馈.在解码器中加入卷积层来扩大感受野,将特征用于目标检测和实例分割.
5.2.1 机器翻译
虽然机器翻译任务已经非常成熟,但是漏翻、过翻的现象仍然普遍存在.Z.Yang等[14]给事实翻译分配较高概率,错误翻译分配较低概率,训练模型,从而减少漏翻现象.在真实翻译句子上构建负例,即根据省略词的数量、词频和词性设计了几种类型的错误译文,比较真实句与增强句.
Y.Qu等[35]通过实验发现,经过回译加对抗生成的增强数据能够在对比学习中取得显著的效果.在多对多机器翻译任务中,为了获得更好的多语言翻译效果,X.Pan等[41]提出了基于近义词替换的数据增强方法.在数据增强技术上,直接使用单语数据和多语数据进行对比,使得模型可以分辨不同语言句对.
5.2.2 信息检索
为了提高代码的检索效果,在自然语言与代码之间的语义匹配方面,J.Huang等[35]在CodeBERT[69]的基础上,通过传统的增强方式,同时生成正负例,比较查询与代码的匹配程度.不同于传统的信息检索(稀疏检索),L.Xiong等[70]预训练一个模型,将文本编码成向量,根据query的相似度进行索引.提出了近似最近邻否定对比估计,用于密集检索的对比学习.
5.2.3 摘要生成
SimCLS[15]是一个基于对比的生成式摘要框架.使用两阶段模型进行摘要生成:首先训练Seq2Seq模型生成候选摘要,再采用对比的方式,对候选摘要进行重新排序.与其它使用对比学习的模型相比,SimCLS没有使用正负例对比,而是将原始文档与生成候选摘要进行对比,期望预测值与真实值接近,且每个候选值之间有差距.
SeqCo[18]是一种序列级别的对比学习模型.与上一篇论文一样,它也没有正负例,它把原始文档、人工标注的摘要及模型生成的摘要看作同一个语义表示的3个不同视角,并在训练过程中最大化这三者之间的相似性,提升了摘要的原文忠诚度.
5.2.4 对话
为了解决开放域对话任务中,使用最大似然估计时,存在低多样性问题,H.Cai等[48]使用一个预训练模型作为参考模型.为了实现人类会话中普遍存在的多映射关系,使用分组双抽样来做数据增强.分别建立问题-回应的正负向回复、回应-问题的正负向回复,从而增加对话模式的多样性.
为了检测对话系统中,用户查询与任务领域的相关性问题,Z.Zeng等[53]利用有监督对比学习,通过将属于同一类的领域内意图集合在一起,实现最小化类内方差,并通过将不同类的样本分开,实现最大化类间方差,这样模型就可以区分语义特征.
M.Kachuee等[43]利用未标注的数据,来学习区分真实会话与非真实会话(噪音样本).其中噪音样本是通过在每个训练批次中洗牌生成.
5.2.5 多模态
UNIMO[71]同时利用单模态和多模态的数据,将文本信息与视觉信息对齐到一个统一的语义空间,实现图像-文本对齐.对多模态的图像-文本数据,采用重写的方式生成正负样本;对单模态数据,采用检索方式生成正样本.将文本知识和视觉知识对齐到统一的语义空间,通过相互增强来学习更多的可概括表示.
M.Patrick等[72]的模型由两部分构成:跨模型判别部分和生成性交叉字幕部分.跨模型判别采用对比学习,将视频-文本嵌入统一语义空间,其它的即使是相似的样本也被认为是负样本.这样的操作被认为是过于严格,于是作者又加上生成性交叉字幕部分,每个样本的标题必须重建为其它支持样本的视觉文本的加权组合.模型在两个互补的损失中学习.
X.Yuan等[73]提出的对比学习模型框架里包含模态内训练和模态间训练.模态内训练是用于在预测任务中捕获增强数据的内在模式;模态间训练是通过跨膜态交互来增强视觉特征.同时利用每个模态和语义信息中的内在数据属性,提高所学视觉表示的质量.
5.2.6 其它
P.Cheng等[74]将对比学习用于消除生成文本表示中的偏见因素(例如性别偏见、种族偏见等).将原句与反义词句比对,最大化这两者互信息;原句与偏见词比对,最小化两者互信息.生成的表示达到消除偏见的效果.
N.Rethmeier等[45]为了解决多标签文本分类问题中存在的长尾标签情况.将多标签分类任务建模成类似文本匹配的形式.在采样正负标签时,同时从句子中采样文本片段,构成伪标签,和句子编码拼接,训练匹配模型.
W.Zhou等[44]利用对比学习和自监督损失,引入常识信息.模型分为生成任务和判别任务.在生成任务中通过概念乱序和使用概念生成句子的方式产生增强样本.在判别任务(对比)中,通过判别原句与增强样本来分辨真理句子,提高预训练语言模型的常识推理能力.
D.Zhang等[75]将对比学习用于聚类,通过联合优化自上而下的聚类损失和自下而上的实例对比损失来进行对比学习聚类.
在篇章关系分析任务中,H.Kiyomaru等[55]所提出的模型框架包含一个对比学习目标和一个生成目标.模型在训练过程中,最大化目标句与掩码句在相同上下文时的相似性,最小化掩码句与随机句在相同语境下的相似性.
对比学习是在没有大量标注数据集的情况下,采用自监督方式,学习数据的监督信息,以该监督信息对网络进行训练,从而能够学习到对下游任务有帮助的特征.采用对比学习来完善表征,可避免下游任务的表征崩溃.虽然使用对比学习的方式不一,但主要目的都是为了将精心设计的正负实例与真实实例进行对比,在对比的过程中,特征编码器输出的特征,具有可泛化的一般表示.编码器学习到具有代表性、可辨识性的一般信息.虽然对比学习取得了巨大的成功,但仍然存在许多挑战.
由于文本数据的离散性,对比学习中的判别函数容易出现不稳定的训练现象.这是因为互信息对数据样本微小差异是高度敏感的,而表征上的微小差异会导致互信息的剧烈变化,使得学习出的表征不稳健,很难推广到下游任务中去[76,77].
人们已经从理论和实验中证明了对比学习的有效性.特别是InfoNCE[3]把对比学习与互信息的优化联系在一起.互信息应该达到一个合适的值.如果互信息比需要的还多,则可能降低模型的泛化性;如果互信息比需要的还要少,则可能达不到最优解.所以说互信息决定了选取什么视角来进行对比.
如果初始化不当或是负样本选择不当,原始样本与增强样本的联合分布和独立分布之间的距离就会越来越远.这样一来,互信息就会逐渐衰弱.极端情况下,互信息和梯度都会消失变成零[78](原始数据分布与增强样本分布独立,无任何关联,互信息为零).
针对上面两种挑战,可以考虑在正负样本分布中添加约束,来增加对比学习训练时的稳定性[79].也可以将KL散度换成詹森-香农散度来提高原始样本与增强样本的相似性和一致性[38].目的都是防止互信息和梯度消失为零.
要想获得良好的对比性能,获取互信息的下界,就需要一个较大的负例与正例的比值,即需要大量的负例[76].这样一来,给大型数据集带来了潜在的计算问题.如果负样本是容易被分辨的样本,则对模型起不到学习的作用,同时又增加了训练的计算量,得不偿失.
解决这一问题,可以考虑采用恰当的数据增强方法,采样或生成大量模型难以分辨的样本,供模型学习,从而得到更多可区分的特征.例如可以使用对抗生成样本、选取与正样本最邻近的负样本[79]等方法.选取高质量的负样本,可以使得模型学习到概括性特征,又同时降低了训练的计算负担.