美文网首页
教你深度学习中的对比学习方法

教你深度学习中的对比学习方法

作者: 科技州与数据州 | 来源:发表于2021-05-15 09:49 被阅读0次

    作者 | Keqing He

    学校 | 北京邮电大学硕士生

    方向 | 自然语言处理, 对话系统

    对比学习大火今天来和大家一起梳理下

    对比学习定义

    一种无监督的图像/文本的表示学习。

    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[1]

    对比学习需要很多负例进行比较,既耗时又耗内存,于是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参数进行更新。在预测阶段只使用 。虽然BYOL没有显示地使用对比学习loss,但一篇博主在实验中发现BYOL依靠的还是“对比”。他们在复现BYOL的时候直接基于了MoCo的代码,结果发现效果还没有随机的好,原来是因为MLP中没有加BN。如果深究BN的作用,就会发现它重新调整了输出的分布,避免坍缩,同时「BN也在隐式地进行对比,去除batch内样本相同的部分,保留不同的特征」。同时,在不依赖负样本后,BYOL对于数据增强方法的选择更加鲁棒,下面是它的效果:

    Exploring Simple Siamese Representation Learning

    FAIR

    延续BYOL的思想,Chen Xinlei与何凯明大佬又对孪生网络进行了研究,发现stop-gradient是避免坍缩的关键,于是提出了「SimSiam」。SimSiam的结构非常简单:

    左侧的编码器生成 ,经过MLP后输出

    右侧的编码器生成

    计算 与 的cosine相似度

    左右调换,再计算 与 的cosine相似度

    最大化3、4两个步骤的和,且右侧永远不传播梯度

    训练步骤虽然简洁,但为什么work却有很多学问。简单的解释是,对于整体目标的优化可以看作一个EM过程,左右两边交替更新,所以在更新左侧encoder时可以将右侧看成常数。更多的细节可以参考『探索孪生神经网络:请停止你的梯度传递!』。

    自然语言处理领域的对比学习

    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编码的互信息 ,同时最小化文档和保护属性词之间的互信息 (这个损失可以理解n-gram负采样损失)

    模型结构:

    自监督构建摘要评价系统

    Unsupervised Reference-Free Summary Quality Evaluation via Contrastive Learning

    EMNLP2020

    将对比学习用于构建摘要评价系统。

    语义质量(Semantic Quality),即生成的摘要在语义上和原文的匹配程度。例如:是否覆盖原文的关键信息、和原文的一致性等等。

    句法质量(Linguistic Quality),即在句法层面,生成摘要的流畅程度。

    首先提出了一种基于BERT的模型指标评价方法,主要用于评价两方面的性能:

    随后,作者通过构造自监督的辅助任务,利用对比损失训练摘要评价系统。通过规则对生成的摘要添加噪声:随机删除词语,添加额外句子,打乱词序。负样本和正样本分别和文档配对输入模型,构建对比损失(原始摘要和噪声摘要构建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领域的数据增强方法并不统一,可以结合下游任务做一些创新。

    对比学习除了应用于无监督表征学习外,引入到下游任务构建多任务学习也是很有研究价值。

    对比学习结合对抗攻击。

    如果喜欢请点赞或关注我交流。

    相关文章

      网友评论

          本文标题:教你深度学习中的对比学习方法

          本文链接:https://www.haomeiwen.com/subject/ghehjltx.html