总结最新的一些对比学习的论文和资源,对比CV和NLP的一些区别。
对比学习定义
一种无监督的图像/文本的表示学习。
Motivation:人类往往是通过对比来学习区分事物的。模型无需学习到过于具体的细节(图像:像素级别;文本:词语级别),只需要学习到足以区分对象的高层次的特征。
与之前的有监督方法/无监督方法的区别:
图像领域的对比学习
对比学习广泛应用于图像领域的无监督表示学习,以MoCo(ICML2020)和SimCLR(2020)为代表,在ImageNet数据集上取得了显著的提升。对比学习的核心在于如何构建正负样本集合,图像领域一般通过旋转、裁剪等图片操作,而文本领域往往通过回译、字符插入删除等方法,这些方法依赖于领域经验,缺乏多样性和灵活性;因此,近期有一些论文(Robust Pre-Training by Adversarial Contrastive Learning)通过对抗攻击来做数据增强,获取正负样本,值得关注。
以下简单介绍几篇CV领域对比学习的代表作:
Deep InfoMax (DIM):Learning Deep Representations by Mutual Information Estimation and Maximization
ICLR 2019,MSR Montreal&&MILA
DIM通过图像中的局部特征来构造对比学习任务。具体来说,构造二分类任务,要求模型判别全局特征和局部特征是否来自于同一幅图像:
全局特征为锚点(anchor),f(x)
正样本为来自同一张图像的局部特征,f(x+)
负样本为来自不同图像的局部特征,f(x-)
模型结构:
MoCo: Momentum Contrast for Unsupervised Visual Learning
CVPR2020,FAIR
为了增加训练时负样本的数量(负样本数量直接影响对比学习的性能,有研究表明本质上是hard negative sample引起的),MoCo提出使用动量编码器来编码负样本:使用一个队列用来缓存其他batch的图像表示,作为负样本动量编码器的参数是主编码器参数的滑动平均(moving average),因此其编码的负样本能同时保证时效性。
模型结构:
SimCLR: A Simple Framework for Contrastive Learning of Visual Representations
ICML 2020,Google Brain
SimCLR提出了一种简单的对比学习框架:让相同图像采样出来的view在表示空间内尽可能相近;不同图像采样出来的view尽可能远离。对比损失为batch内的交叉熵损失:
分子为positive pair;分母为1个positive pair和2N-2个negative pairs模型结构:
- 本文还总结了各种图像增强方法:裁剪、翻转、旋转、高斯噪声、遮盖、颜色变换、滤镜等。
Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
NIPS2020,FAIR,https://zhuanlan.zhihu.com/p/259975814
对比学习需要很多负例进行比较,既耗时又耗内存,于是FAIR联合Inria也推出了一个新的方法SwAV。作者提出了一个新的想法:对各类样本进行聚类,然后去区分每类的类簇。模型结构如下:
Bootstrap Your Own Latent A New Approach to Self-Supervised Learning
Deepmind
在表示学习中,我们现在采用的框架本质是通过一个view的表示去预测相同图像其他view,能预测对说明抓住了图像的本质特征。但在做这样的预测时会有坍缩(collapse)的风险,意思是全都变成一个表示,那也可以做到预测自己。对比学习为了解决这个问题,将表示预测问题转换为了正负例判别问题,这样就迫使模型的输出是多样的,避免坍缩。
于是BYOL的作者想:如何不用负例,也能学到好的表示呢?如果共用encoder,用MSE作为损失,缩小相同图像不同view的距离,肯定会坍缩。而作者发现如果把其中一个encoder变成随机初始化的固定下来(stop gradient),就能达到18.8%的准确率。为了得到更好的encoder,作者参考动量的方法对其中一个encoder做了改进:
这里我们按照论文,称上半部分为online(更新梯度),下半部分为target(不更新梯度)。BYOL的优化目的是用online表示预测target表示,采用MSE作为损失函数。Online梯度回传后,使用滑动平均对targe的encoder和MLP参数进行更新。在预测阶段只使用$f_{\theta}$。虽然BYOL没有显示地使用对比学习loss,但一篇博主在实验中发现BYOL依靠的还是“对比”。他们在复现BYOL的时候直接基于了MoCo的代码,结果发现效果还没有随机的好,原来是因为MLP中没有加BN。如果深究BN的作用,就会发现它重新调整了输出的分布,避免坍缩,同时BN也在隐式地进行对比,去除batch内样本相同的部分,保留不同的特征。
同时,在不依赖负样本后,BYOL对于数据增强方法的选择更加鲁棒,下面是它的效果:
Exploring Simple Siamese Representation Learning
FAIR
延续BYOL的思想,Chen Xinlei与何凯明大佬又对孪生网络进行了研究,发现stop-gradient是避免坍缩的关键,于是提出了SimSiam。SimSiam的结构非常简单:
左侧的编码器生成$z_{1}$,经过MLP后输出$p_{1}$
右侧的编码器生成$z_{2}$
计算$p_{1}$与$z_{2}$的cosine相似度
左右调换,再计算$p_{2}$与$z_{1}$的cosine相似度
最大化3、4两个步骤的和,且右侧永远不传播梯度
训练步骤虽然简洁,但为什么work却有很多学问。简单的解释是,对于整体目标的优化可以看作一个EM过程,左右两边交替更新,所以在更新左侧encoder时可以将右侧看成常数。更多的细节可以参考Andy的详解。
自然语言处理领域的对比学习
NLP领域的对比学习主要是借鉴自CV,主要在data augmentation方面有所不同。
改进语言模型预训练目标
CAPT: Contrastive Pre-Training for Learning Denoised Sequence Representations
语言模型预训练阶段目标改进
对于每一个batch的训练数据,通过mask、shuffle、replace等方法生成带噪声的batch
使用一个共享编码器(BERT)对输入文本进行编码
使batch内同一个样本编码后的表示相互接近;不同样本相互远离
整体看,就是SimCLR直接应用于文本
最终的对比学习损失和BERT的掩码预测损失相加,共同预训练整个模型
A Mutual Information Maximization Perspective of Language Representation Learning
ICLR 2020
语言模型预训练阶段目标改进
本文首先为现有的语言模型预训练目标(Skip-gram、MLM、NSP、XLNet等)建立了理论解释,认为它们都是在最大化相同样本两个view的互信息;如下表所示,不同的预训练目标在 a) view含义;b) 采样分布;c) 编码view的模型结构上有所区别。
在其理论解释的基础上,本文作者进一步提出了类似Deep InfoMax的训练目标,通过最大化局部语义和全局语义的互信息来预训练语言模型:
随机选择训练语料中的n-gram(x_(i:j)),将其mask,作为一个view(作为全局语义)
将mask掉的n-gram提取出来,作为另一个view(作为局部语义)
这两个view都通过Transformer进行编码,同时随机采样其他文本中的n-gram作为负样本,要求模型识别出正确的n-gram
预训练模型压缩、知识蒸馏
Contrastive Distillation on Intermediate Representations for Language Model Compression
EMNLP2020
将对比学习引入模型知识蒸馏中,使得Student模型能从Teacher的中间层表示中学习到信息。同一个样本,分别由Teacher模型和Student模型编码,作为对比学习的两个view。
消除文本表示中的社会偏见
FAIRFIL: CONTRASTIVE NEURAL DEBIASING METHOD FOR PRETRAINED TEXT ENCODERS
ICLR 2021,目前评分6677
将对比学习用于预训练语言模型去偏。
- 对某个保护属性,定义一系列反义概念,如<her, his>, <man, woman>等
通过文本替换,获取同一个样本的增强版本(作为一个view)
训练目标要求最大化两个view编码的互信息$I_{NCE}$,同时最小化文档和保护属性词之间的互信息$I_{CLUB}$(这个损失可以理解n-gram负采样损失)
- 对某个保护属性,定义一系列反义概念,如<her, his>, <man, woman>等
模型结构:
自监督构建摘要评价系统
Unsupervised Reference-Free Summary Quality Evaluation via Contrastive Learning
EMNLP2020
将对比学习用于构建摘要评价系统。
首先提出了一种基于BERT的模型指标评价方法,主要用于评价两方面的性能:
1.语义质量(Semantic Quality),即生成的摘要在语义上和原文的匹配程度。例如:是否覆盖原文的关键信息、和原文的一致性等等。
2.句法质量(Linguistic Quality),即在句法层面,生成摘要的流畅程度。
- 随后,作者通过构造自监督的辅助任务,利用对比损失训练摘要评价系统。通过规则对生成的摘要添加噪声:随机删除词语,添加额外句子,打乱词序。负样本和正样本分别和文档配对输入模型,构建对比损失(原始摘要和噪声摘要构建max-margin损失,注意这里只有样本内的损失,没有考虑不同文档之间的关系)。
对比学习中的数据增强方法探索
CoDA: Contrast-enhanced and Diversity-promoting Data Augmentation for Natural Language Understanding
ICLR2021
由于文本的离散属性,难以生成标签不变(Label Preserving)的增强版本,本文主要探索NLP领域中的数据增强策略,以及将其用于对比学习的效果。
本文研究了五种NLP领域的数据增强方法:
回译(back-translation)
c-BERT 词语替换(将某个词替换为[MASK]后,要求BERT恢复)
mixup(将两个样本线性叠加,x^′=αx_1+(1-α) x_2)
cutoff(随机将某个token或某个feature维度置0,如下图)
- 对抗训练(adversarial training)
此外还研究了增强方法之间的多种组合方式:
- 结论:Stack(回译+对抗)取得最优的效果。
Conclusion
对比学习的核心在于如何设计正负样本,挖掘负样本,甚至于无需负样本,都是研究热点。
NLP领域的数据增强方法并不统一,可以结合下游任务做一些创新。
对比学习除了应用于无监督表征学习外,引入到下游任务构建多任务学习也是很有研究价值。
对比学习结合对抗攻击。