根据对比学习近年的发展和进步, 提出一种新的面向对比学习的归类方法, 并基于提出的归类方法, 对现有对比研究成果进行系统综述, 并评述代表性方法的技术特点和区别, 系统对比分析现有对比学习方法在不同基准数据集上的性能表现。
论文信息:张重生, 陈杰, 李岐龙(*)等. 深度对比学习综述. 自动化学报, 2023, 49(1): 15−39
作者单位:河南大学计算机与信息工程学院 河南省大数据分析与处理重点实验室
论文链接:http://www.aas.net.cn/cn/article/doi/10.16383/j.aas.c220421
在深度学习中, 如何利用大量、易获取的无标注数据增强神经网络模型的特征表达能力, 是一个具有重要意义的研究问题, 而对比学习是解决该问题的有效方法之一, 近年来得到了学术界的广泛关注, 涌现出一大批新的研究方法和成果. 本文综合考察对比学习近年的发展和进步, 提出一种新的面向对比学习的归类方法, 该方法将现有对比学习方法归纳为5类, 包括: 1) 样本对构造; 2) 图像增广; 3) 网络架构; 4) 损失函数; 5) 应用. 基于提出的归类方法, 对现有对比研究成果进行系统综述, 并评述代表性方法的技术特点和区别, 系统对比分析现有对比学习方法在不同基准数据集上的性能表现. 本文还将梳理对比学习的学术发展史, 并探讨对比学习与自监督学习、度量学习的区别和联系. 最后, 本文将讨论对比学习的现存挑战, 并展望未来发展方向和趋势.
近年来, 以深度学习为代表的新一代人工智能技术取得了迅猛发展, 并成功应用于计算机视觉、智能语音等多个领域. 然而, 深度学习通常依赖于海量的标注数据进行模型训练, 才能获得较好的性能表现. 当可用的标注数据较少、而无标注数据较多时, 如何提高深度学习的特征表达能力是亟需解决的重要现实需求. 自监督学习[1]是解决该问题的有效途径之一, 能够利用大量的无标注数据进行自我监督训练, 得到更好的特征提取模型.
然而,目前, 很少有系统总结对比学习最新进展的英文综述论文[10-12],, 中文综述论文更是极度缺乏. 因此, 学术界迫切需要对深度对比学习的最新文献及进展进行全面系统的总结、归纳和评述, 并分析存在的问题, 预测未来发展趋势. 本文聚焦视觉领域的深度对比学习技术, 系统梳理深度对比学习2018年至今的技术演进, 总结该方向代表性的算法和技术. 如图1所示, 本文首先将深度对比学习的相关技术归纳为样本对构造方法层、图像增广层、网络架构层、损失函数层及应用层5大类型. 然后, 综合归纳现有技术的特点及异同之处, 并分析其性能表现, 指出尚未解决的共性问题及相关挑战, 最后勾勒该领域的未来发展方向与趋势.
图1 深度对比学习方法归类
对比学习研究现状
在本章内容中, 首先引入所提出的归类方法, 在此基础上归纳总结国内外对比学习研究成果. 值得注意的是, 对比学习亦深受我国学者的关注, 很多优秀的对比学习论文虽然发表在国外学术会议和刊物上, 但作者为国内学者.
归类方法
本文提出一种新的归类方法, 以对最新的对比学习工作进行系统归纳总结. 如图1所示, 按照对比学习的整体流程, 将现有方法划分为样本对构造层、图像增广层、神经网络架构层、损失函数层以及应用层等类型.
图2将每种类型的对比学习方法进行细分及可视化表示. 其中, 样本对构造层方法可以细分为困难样本构造、剔除假负样本、正样本扩充及构造多视角样本四种方法. 图像增广层可以细分为图像变换、图像合成及图像语义增广三种方法. 网络架构层方法可以分为同步对称、同步非对称、异步对称、异步非对称对比学习, 及基于聚类的网络架构. 特征提取网络主要使用ResNet[30] (Residual neural network)、Transformer[31]等主流神经网络结构, 损失函数层分为基于互信息的损失函数、传统损失函数和混合损失函数. 下面将分别介绍各类型的方法.
图2 对比学习的整体流程及各模块的细分类方法
样本处理及样本对构造方法
在对比学习过程中, 样本对的选择指的是对数据集的采样过程. 1) 对无标注数据集, 通常采用随机采样的方法构建一个批次的数据, 因此一个批次的数据可能存在类别分布不均匀的情况, 导致假负样本的出现及困难负样本过少的问题; 2) 对有标注数据集, 通过标签信息采样训练数据, 能够有效提高对比学习效果. 下面将分别介绍各种细分的样本处理及样本对构造方法.
困难样本构造
在选择样本进行模型训练的时候, 有些物体在视觉上相似度很高, 而且在经过神经网络提取特征之后, 他们的特征之间的余弦相似度也比较高, 容易被误认为是相同类的样本, 但是这两张图像中的物体并非同类,如一张图像中的物体是狗,另一张是狼。这种情况称为困难负样本对。同理, 若两张图片属于同一类, 但特征相似度不高则称为困难正样本对. 多个研究表明, 困难负样本对和困难正样本对在对比学习中具有至关重要的作用.
剔除假负样本
在同一批次的训练图像中, 如果输入图像和同一个批次的其他某一张图像是同一类, 但是在计算损失的时候把它们误归为负样本对, 这种情况就称为假负样本对. 在对比学习中, 负样本的质量和数量是制约最后训练效果的关键, 如果在训练的批次中出现假负样本, 会降低最后的网络效果.
正样本扩充法
扩充正样本有助于提高对比学习的效果. 这里的扩充不包含图像增广方法, 而是指从可用的数据资源中寻找隐藏的、与输入样本类别相同的图像的方法. 在监督对比学习中, 由于同类样本已知, 一般无需扩充正样本. 而在无监督对比学习中, 若图像数据没有标注信息, 一般无法进行正样本扩充. 但在一些特殊场景下, 如行人重识别、遥感图像处理、视频分析, 可以基于某些假设, 对正样本进行扩充.
Kim等[37]将Mixup方法应用到了对比学习领域, 提出MixCo方法, 该方法将经过增广之后的两幅异类图像进行Mixup操作合成新的图像. 然后对所有合成的图像, 计算其InfoNCE损失, 由于每幅合成图像对应两个类别, 因此可以认为是扩充了每个样本对应的正样本个数. 最终损失由原始图像上的对比损失和上述合成图像上的对比损失构成.
在行人重识别领域, 王梦琳[38]提出一种度量不同相机中行人关联性的方法, 将关联性强的样本视作同类样本, 以扩充正样本的数量.
在遥感图像处理中, 基于同一地点的遥感图像中的内容随时间变化较小的特点, Ayush等[39]使用同一地点的不同时刻的遥感图像扩充正样本.
在视频分析中, Qian等[40]基于邻近的视频帧图像可作为同类样本的假设, 扩充正样本, 用于对比学习. Kumar等[41]同样采用这一假设扩充正样本. Han等[42]发现对于两个不同的视频片段, 做的动作相同时, 在RGB视角下, 提取的特征相似度不高, 但在光流 (Optical flow) 视角下, 提取的特征相似度很高, 反之亦然. 基于以上发现, 作者提出将光流视角下相似度高的视频片段作为RGB视角下的正样本, 同样, 可采用相同方法扩充光流视角下的正样本.
在半监督学习领域, Wang等[43]提出通过部分标签训练的分类器, 在当前训练批次中利用余弦相似度指标寻找正样本的方法, 扩充正样本数量. Yang等[44]采用同样的思路设计类感知模块, 扩充正样本数量.
构造多视图样本
多数对比学习方法所使用的数据只有一个来源 (又称为同一个视图). 针对该问题, 研究人员探索使用多视图数据的方法提升对比学习的效果. Tian等[45]提出基于多视图特征的对比学习方法. 该方法将同一幅图像在多个不同视图下的表达分别进行特征提取, 然后进行对比学习, 有利于提升模型的效果. 在视频分析中, Rai等[46]对同一幅图像分别提取光流、语义分割、关键点等多视图特征, 然后进行对比学习, 提升了视频特征表达能力.
图像增广方法
图像变换方法
图像增广是对比学习的天然组成部分, 以产生网络所需的输入样本对. 传统的图像变换方法有随机裁剪、颜色失真、灰度化等方法. 需要说明的是, 单一的图像变换方法不利于有效的对比学习. SimCLR综合对比了一系列图像变换的效果, 发现由随机裁剪和颜色失真组成的变换组合能够获得更好的对比学习效果.
在众多的图像变换方法之中, 裁剪通常是必须的变换方法之一, 但可能存在经过裁剪后的正样本对信息重叠过多或者完全不重叠的情况. 如果裁剪到的正样本对是两个矩形框中的区域, 那么该图像对并不能促进对比学习, 这种情况称为错误正样本 (False positive, FP). 当裁剪的两个图像区域重叠过多时, 若选择它们作为正样本对, 也无助于对比学习. Peng等[47]针对以上问题, 首先利用热图定位目标区域, 然后采用中心抑制抽样策略, 在目标区域内离物体中心越远的像素点被采样到的概率越高. 得到采样点后, 以采样点为中心, 并使用随机生成的宽高, 进行最终的图像裁剪操作. 在SwAV中, 作者提出了一种多裁剪策略 (Multi-crop), 该策略给编码器提供多个不同尺度的裁剪图像作为正样本, 并验证了该策略有助于提高对比学习算法的性能.
图像合成方法
图像合成不同于图像变换, 前者能够生成新的内容. 在视频分析中, Ding等[48]提出复制粘贴的图像合成方法, 将所选视频帧的前景区域粘贴到其他视频帧的背景图像中, 得到合成的视频帧, 通过这种简单的合成方法, 使得对比学习模型能够更加关注前景信息, 提取到更加良好的特征表达.
图像语义增广方法
对比学习网络架构设计
根据对比学习网络架构的更新方式是同步或异步, 及该网络架构是对称或非对称, 本文将对比学习所涉及的网络架构划分为同步对称、同步非对称、异步对称和异步非对称4种类型. 同步更新指的是对比学习网络的两个分支 (分支1和分支2) 同时进行梯度更新, 异步更新指的是两个分支网络的权值更新方法不同. 对称指的是分支1和分支2的网络结构完全相同, 非对称则指相反的情况. 除此之外, 本节还将含有聚类算法的对比学习方法总结为聚类对比学习架构.
同步对称网络架构
在典型的同步对称网络架构中,分支1和分支2采用相同的网络结构, 并且同时采用梯度更新.
SimCLR[2]是最早提出采用同步对称网络架构的对比学习工作. 该网络架构采用了结构相同的两个网络分支, 每一个分支都包含特征提取网络和投影头. 特征提取网络可以是任意的网络结构, 例如ResNet和Transformer, 投影头一般使用多层感知机 (Multilayer perceptron, MLP). 使用该网络架构进行对比学习的前向过程为: 首先, 输入一个样本, 经过两种图像增广方法产生成对的训练样本. 然后, 通过特征提取网络和投影头将样本输出到投影空间. 最后, 在投影空间进行损失计算并回传梯度, 更新特征提取网络和投影头的参数. 同步对称网络架构除了可以用于自监督对比学习之外, Khosla等[8]将该类网络架构应用到了监督对比学习之中. 值得注意的是, 采用该类网络架构的对比学习算法若想获得良好效果, 往往需要在训练时采用很大的批次进行训练, 比如1 024或2 048.
同步非对称网络架构
在典型的同步非对称网络结构中,分支1和分支2采用不同的网络结构, 但同时采用梯度更新. 同步非对称网络架构与同步对称网络架构的相同之处在于两个分支都进行了梯度更新, 不同之处在于前者的两个分支的网络结构不同, 而后者相同.
Van等[7]提出一种基于该种网络架构的对比预测编码方法CPC. 在该方法中, 分支1的输入为某一个时间点的数据, 分支2的输入为未来某一个时间点的数据, 训练的目标是利用分支1的输出预测分支2的输出,然后计算对应的预测损失. 在CPC算法之后, 衍生出很多改进的算法[41, 53], 这些方法均采用典型的同步非对称网络架构, 其主要改进之处在于采样方法或损失函数.
除了上述同步非对称架构之外, 还存在一些其它形式的同步非对称的网络架构, 主要有如下两种形式: 1) 分支1与分支2均含有投影头, 但投影头结构不相同[54-55]. 2) 分支1和分支2的特征提取网络数量不相等[56-57].
Nguyen等[54]将对比学习方法应用于网络结构搜索任务 (Neural architecture search, NAS), 提出CSNAS方法, 该方法构造了一个类似于上述第1种形式的同步非对称网络架构. Misra等[55]在分支2中使用拼图代理任务进行特征学习, 因此在分支2的投影头之前还包含拼接操作以及多层感知机的映射, 构成了符合上述第1种形式的同步非对称网络架构.
Bae等[56]提出自对比学习 (Self contrastive learning, SelfCon) 方法, 该方法构造了一个类似于上述第2种形式的同步非对称网络架构, 在该方法中, 将一个特征提取网络和一个投影头组合在一起, 称为一个主干网络块, 分支1采用多个主干网络块进行特征映射, 分支2从分支1中的某个节点引出, 通过一次主干网络块映射得到另一个视图下的特征, 最后进行损失计算. 类似地, Chaitanya等[57]提出可用于图像分割的对比学习方法, 在该方法中, 分支1和分支2共享编码器, 但分支1直接在编码器后加入投影头, 分支2在编码器后加入一个解码器, 然后再加入投影头.
异步对称网络架构
在异步对称的网络架构中, 分支1和分支2采用相同的网络结构, 但是两个分支的神经网络权值更新方式不同, 因此称作异步更新.
MoCo是经典的采用异步对称网络架构的对比学习方法. 其中, 分支1中的特征提取网络和投影头采用SGD等梯度更新方法更新权值, 而分支2的特征提取网络和投影头采用动量更新的方式, 动量更新的公式如式 (1) 所示:
在对比学习中, 负样本的数量对最终的模型效果起决定性的作用. 在原始的对比学习方法中, 负样本的来源是同批次的训练数据, 为了增加负样本的数量, 必须采用大批次的数据来支撑训练, 但这样会造成存储资源过大, 计算消耗巨大的问题. MoCo设计了队列 (Queue) 结构, 存储一定数量的之前批次用到的样本的特征, 当队列容量满时, 最老样本的特征出队, 最新样本的特征入队. 在MoCo方法中, 对比学习所需的负样本将从该队列中抽样产生, 避免了原始对比学习方法为获得较多负样本而构建大的批容量带来的问题. 简言之, 该队列结构减小了对存储资源的要求, 又取消了训练必须采用大批次数据的约束, 提升了计算速度. 后续的基于异步对称网络架构的方法都将该队列结构作为其默认的组成部分.
近年来, 随着Transformer技术的发展, 研究者将其引入到计算机视觉领域, 例如ViT[58]. 在对比学习的研究中. Caron等[59]提出了一种名为DINO (Self-distillation with no labels) 的异步对称对比学习方法, 该方法采用Transformer作为骨干网络, 并将自监督对比学习转换为蒸馏学习的任务, 将分支1视作学生网络, 将分支2视作教师网络. 学生网络采用梯度回传更新参数, 教师网络采用动量更新方式更新参数.
异步非对称网络架构
异步非对称网络架构指的是分支1和分支2采用不同的网络结构, 同时参数更新方式也不同. 异步非对称网络架构与异步对称网络架构的相同之处在于两个分支的更新方式相同, 不同之处在于前者的两个分支的网络结构不同, 而后者相同.
异步非对称网络架构存在两种形式, 一种是采用MoCo作为主干网络, 但是投影头数量不一致, 以BYOL[4]方法为典型代表. 另一种是网络架构不对称, 同时采用梯度交叉更新的方法, 以SimSiam[6]方法为典型代表.
BYOL的主干网络结构是MoCo, 分支2的网络参数采用动量更新机制. BYOL是首个只采用正样本进行对比学习的工作, 但由于训练集中不存在负样本, 如果上下网络分支结构完全相同, 训练就有可能出现“捷径解”的问题 (亦可称为“网络崩塌”问题), “捷径解”指的是对不同的输入, 输出的特征向量完全相同. 为了解决这一问题, BYOL在分支1中额外增加了一个预测头 (MLP), 构成了非对称网络架构, 并将对比学习的实例判别代理任务替换为比对任务, 即分支1最终得到的特征与分支2最终得到的特征要尽可能的相似. BYOL的性能提升归因于以下两点设计: 1) 良好的模型初始化. 2) 在投影头和预测头中加入正则化技术. 如果没有这两种设计, BYOL仍可能出现“捷径解”的问题[60].
Chen等[61]提出了一种基于视觉Transformer的异步非对称网络架构MoCov3. MoCov3采了BYOL型异步非对称网络架构. 在分支1中额外加入了一个预测头, 分支2的编码器采用动量更新, 获得了更好的对比学习效果.
另一种代表性的异步非对称架构是SimSiam. SimSiam方法也不需要利用负样本训练网络. 为了避免网络出现“捷径解”, 该方法的两个分支的网络结构采用交叉梯度更新的方式. 具体而言, 训练分支1的时候, 投影头放在分支1的编码器之后, 计算其损失, 而分支2的梯度停止回传. 在训练分支2的时候, 将分支1的投影头接入到分支2的编码器之后, 并计算损失, 而分支1的梯度停止回传. 这就是交叉梯度更新.
聚类对比学习结构
在上述四种网络架构的基础上, 还可以结合聚类技术进行进一步的优化.
基于实例的对比学习算法在计算损失差别过大, 不利于模型学习到良好的语义特征. 而聚类算法能够在无监督情况下自动学习数据的语义信息. 因此, 一些方法将对比学习与聚类方法结合在起来, 嵌入到上述四种网络架构中.
Caron等[62]首次将K-Means聚类算法与无监督深度学习结合, 提出深度聚类算法 (Deep cluster), 该算法通过K-Means聚类产生伪标签, 然后利用伪标签对模型进行自监督训练. 在该方法的基础上, 作者又提出了一种基于聚类的对比学习算法SwAV, 该算法采用同步对称网络架构训练特征提取网络. 在分支1和分支2之间引入聚类中心信息, 并计算相关损失, 帮助网络进行训练. 相关的细节在第2.5.2节中给出.
Li等[63]提出原型对比学习算法 (Prototypical contrastive learning, PCL), 该方法采用异步对称网络架构, 分支1采用梯度更新, 分支2采用动量更新. 在PCL的前向传播过程中, 当分支2对输入样本提取特征之后, 采用K-Means算法依据样本特征进行聚类. 然后, 将分支1得到的每个样本特征与分支2的所有聚类中心计算聚类对比学习损失, 将分支1的样本与其所属的聚类中心的向量视作正样本对, 其余为负样本对. 最终的损失函数由聚类对比学习损失和原有 (实例) 对比学习损失构成. 聚类对比学习损失计算的目标是最大化样本实例与其相对应的聚类中心特征之间的相似度, 因此这种设计也能在一定程度上缓解实例对比学习中的假负样本问题. PCL仅在分支2上进行聚类计算, 后续工作尝试在两个分支上都进行聚类, 如Wang等[64]提出的方法, 将分支1和分支2都进行聚类计算, 然后进行交叉聚类对比学习损失计算.
损失函数设计
为了实现对比学习的优化目标, 研究者使用了多种针对性的损失函数, 可以分为基于互信息的损失函数 (InfoNCE类)、传统损失函数和混合损失函数.
值得注意的是, 对比损失[13]与对比学习损失很容易在字面上产生混淆, 实际上, 对比损失是一种度量学习损失, 只能用于监督学习, 且样本对数据来源与对比学习不同, 因此, 对比损失不一定是对比学习的损失函数.
InfoNCE损失函数及变种
SimCLR首先将InfoNCE损失引入到对比学习中来, 由于训练所用的样本对来自于同一幅图像的两次不同增广, 因此InfoNCE的优化目标变为最大化同一个样本的两个不同增广图像之间的互信息, SimCLR中采用的InfoNCE如式 (4) 所示:
表1 InfoNCE损失函数及其变种
- FNCL损失函数. 针对在训练对比学习模型时可能存在的假负样本问题, Huynh等[35]首先提出了一种假负样本的检测策略, 然后对InfoNCE进行改进, 在损失函数中剔除了假负样本的干扰. 本文将该方法暂定名为FNCL. 与InfoNCE相比, FNCL方法首先确定当前正在处理的样本对应的假负样本, 然后在分母中计算负样本对之间的相似度时, 去除假负样本的部分.
- SCL损失函数. SCL[8]损失函数面向有监督学习, 对InfoNCE损失函数进行改进, 旨在解决深度有监督学习中采用交叉熵损失时神经网络对噪声标签敏感[73]的问题.
传统损失函数在对比学习中的应用
如何衡量特征空间中不同特征点之间的距离是对比学习中一个很重要的问题. 欧氏距离是衡量特征点之间距离的一个最直观的方法. 通过最小化均方误差损失 (Mean square error, MSE), 可以直接减小同类特征点之间的欧式距离, 实现让同类特征靠近的目的. BYOL先对两个分支的特征进行正则化, 然后采用MSE损失计算两个特征之间的距离, 对网络进行优化.
此外, Shah等[76]将支持向量机与对比学习结合在了一起, 采用改进后的合页损失 (Hinge loss) 优化对比学习网络.
混合损失函数
在某些情况下, 只采用InfoNCE损失不能获得良好的效果, 而将多种损失函数结合, 有助于提升对比学习的效果.
有监督混合损失. Wang等[77]提出了一种将SCL与交叉熵损失结合起来的损失. 该方法采用一个平滑因子, 在训练早期, SCL占据损失的主导地位, 随着学习过程的进行, 交叉熵损失会逐渐占据主导地位. Li等[78]将ProtoNCE的思想带入到SCL中, 即在SCL的分子中计算每个样本与其同类样本所形成聚类中心之间的相似度. 在该算法中, 聚类中心直接由同类样本的特征求平均值得到. 最后, 作者将上述损失与交叉熵分类损失联合训练, 获得了较好的遥感图像分类效果.
半监督混合损失. Li等[79]设计了一个基于伪标签图结构对比学习方法CoMatch. CoMatch方法采用三部分损失训练网络. 对比学习网络中的一个分支, 对于有标签的数据, 采用交叉熵计算损失, 得到分类模型. 在对比学习网络的另外一个分支, 首先利用分类模型对无标签数据进行预测, 产生软标签, 该分支对每个无标注的数据, 进行特征提取, 并利用预测头产生预测结果, 当样本对应的软标签的置信度较高时, 采用交叉熵损失优化网络, 同时, 每个无标签的样本还将采用InfoNCE计算损失. Yang等[44]采用与CoMatch相似的损失构建方法, 对有标签的数据采用交叉熵损失训练, 对软标签置信度高的无标签数据采用交叉熵训练, 对其余数据采用InfoNCE进行对比学习训练, 在该算法中, 由于包含类感知模块, 可以获得与当前训练样本相同类的样本集合, 因此对比学习损失部分采用实例InfoNCE和SCL相结合的损失函数. 此外, Wang等[43]将交叉熵损失和SCL结合在一起, 获得了良好的效果.
无监督混合损失. Park等[80]将对比学习损失融合到基于GAN的图像风格迁移任务中, 该方法对变换前后相同位置的图像块进行对比学习, 将对比学习损失辅助于GAN损失, 训练图像风格迁移模型, 获得了良好的效果.
其他混合损失. Rai等[46]对于具有多视图特征的数据, 对同一样本在不同视角下的特征, 分别采用InfoNCE、MSE和合页损失计算这些特征之间的相似性, 并将三个相似性度量结果进行混合, 用于网络模型优化. Kim等[37]将Mixup方法用在了对比学习中, 该方法假定合成后的样本同时属于合成前的两个样本的类别, 然后将合成样本分别与合成前的样本进行对比学习, 得到两个损失, 这两个损失的混合系数与合成图像时所产生的混合系数一致. 基于相似的InfoNCE与交叉熵损失结合的思想, Kumar等[41]解决了无监督视频动作分割问题, Yang等[81]解决了文本-图像跨模态特征提取问题, Dong等[82]实现对五种模态数据的跨模态特征提取.
相关应用
对比学习在分类、分割、预测等下游任务中均有重要应用. 本文针对每种下游任务, 按照数据的类型, 介绍相关的应用. 本文将数据的类型概括为静态数据和序列数据, 其中静态数据主要有图像、关系型数据、点云和图结构等类型, 序列数据主要有视频、音频、信号等类型.
分类任务
分类任务是对比学习最常见的下游应用. 在静态数据中, 针对图像分类任务, Hou等[83]提出基于对比学习的半监督高光谱图像分类算法, 解决有标注数据不足时高光谱图像分类问题. 该算法分为2个阶段对模型进行训练, 第1阶段, 对于无标签样本, 利用对比学习方法对模型进行预训练. 第2阶段, 利用有标注的样本对模型进行监督学习. 针对小样本遥感场景分类问题, Li等[78]将无监督对比学习方法融合到小样本学习的框架中, 提高了模型的特征提取能力. 郭东恩等[84]将监督对比学习方法引入到遥感图像场景分类任务中, 通过监督对比学习预训练, 提高了遥感图像分类精度. Aberdam等[85]将对比学习应用到文本图像识别任务. 由于对文本图像采用随机增广的方法可能会导致文本内容的丢失等问题, 因此, 作者首先设计可对齐的文本图像增广技术, 然后, 基于同步对称网络架构进行对比学习训练, 最终提高了文本图像识别的准确率. 在细粒度分类问题中, Zhang等[86]直接采用数据集中包含的分层语义标签, 利用SCL损失构建了一个细粒度分类对比学习算法. 对遥感图像数据而言, 同一个地理位置的图像语义信息几乎不随时间的变化而变化. 基于该特点, Ayush等[39]设计了一个针对遥感图像的对比学习方法, 该方法将同一地理位置不同时间的两幅图像作为对比学习中的正样本对. 基于MoCo架构, 该方法将图像定位的代理任务添加到其中一个分支的特征提取网络之后, 辅助模型训练, 从而提高了下游任务的预测性能.
卢绍帅等[87]将监督对比学习应用到了文本数据的情感分类研究中. 在弱监督预训练阶段, 采用三元组损失预训练模型; 随后, 在下游的分类器训练阶段, 采用SCL损失和交叉熵损失联合优化网络, 获得更好的分类结果.
在序列数据的分类中, 也涌现出了一些基于对比学习的算法. 李巍华等[88]将MoCo方法迁移到故障信号诊断研究领域中, 首先, 通过对信号进行无监督对比学习预训练, 获得良好的特征提取网络. 然后, 再进行分类网络训练, 解决了信号故障诊断问题.
自监督对比学习的训练通常分为两个独立的阶段, 即特征提取网络训练和分类器训练. 在分类器训练阶段, 有是否冻结特征提取网络参数的两种选择. Wang等[77]认为这种两阶段的学习方式会损害特征提取网络和分类器的兼容性, 因此提出一个混合框架进行特征提取和分类器的联合学习. 该方法的对比学习部分采用同步对称网络架构, 并在特征提取网络后面加入一个分类器. 在训练过程中, 通过一个平滑因子来调整两个损失的权重, 使得对比学习在训练开始时起主导作用, 随着训练时间的推移, 分类器学习过程逐渐主导训练.
分割任务
分割任务指的是对图像的语义分割、实例分割, 视频中的动作分割等任务. 图像分割任务关注像素级的分类, 因此在此类任务中, 特征提取网络能否学习到良好的局部特征至关重要. Wang等[89]为了更好地学习到图像的局部空间特征, 提出密集对比学习算法 (Dense contrastive learning, DenseCL). 该方法提出全局对比学习框架和局部对比学习框架, 每个框架均采用同步对称网络架构, 两个框架共享同一个特征提取网络. 其中, 局部对比学习框架对卷积得到的特征取消拉平操作, 从而保留特征的空间信息, 使得学习到的特征提取网络更适合于分割任务. 在医学图像分割领域, 由于数据的标注过程非常依赖专家知识, 获取大量的有标注数据代价十分高昂, 因此, 如何利用大量的无标签医学数据训练图像分割模型是一个很重要的研究问题. Chaitanya等[57]将对比学习的思想应用到该领域, 提出基于自编码器框架的全局−局部对比学习网络, 在该方法中, 全局对比学习目标是学习图像的全局语义信息, 局部对比学习目标是学习局部特征信息. 全局网络和局部网络共享同一个编码器. 医学图像中有一个“卷” (Volume) 的概念, 对于全局网络, 正样本对来自于同一幅图像的不同卷. 对于局部网络, 正样本对来自同一幅图像编码后特征的同一个空间位置. 两个分支均采用InfoNCE进行损失计算. 康健等[90]采用监督对比学习方法解决高分辨率SAR图像的分割问题, 通过改进的SCL损失提高同类建筑像素特征之间的相关性, 最终提高模型对建筑物的分割精度. Wang等[91]在Mask R-CNN[92]框架中加入对比学习模块, 提高了像素级特征的可分辨能力, 获得更好的图像分割结果.
在视频动作分割问题中, Kumar等[41]提出基于对比学习的无监督视频动作分割方法. 该方法对SwAV算法进行改进, 且不需要图像增广, 利用“视频数据的相邻帧为同类样本”这一假设, 将相邻帧的图像作为正样本对进行对比学习, 完成视频动作分割任务.
视频及关系数据预测任务
在视频预测问题中, 研究者使用密集预测编码 (Dense predictive coding, DPC)[53], 预测视频未来帧的信息. Han等[42]将DPC与存储库思想结合起来, 提出存储增强密集预测编码方法, 该方法将视频的特征保存到存储库模块中, 并设计了存储库寻址机制. 通过该存储库模块的设计, 网络在训练过程中能够考虑更长时间段的特征, 使预测结果更好. 此外, 为了更好地捕捉到视频中的重要信息, Zhang等[93]提出对编码视频同时进行帧间以及帧内的对比学习, Han等[53]对不同视角的特征进行对比学习.
Bahri等[94]将对比学习方法应用到了关系型数据预测任务中. 为了构建训练所需的正样本对, 作者提出了一种面向关系型数据的增广方法. 该方法受启发于关系型数据中同一维度 (属性) 下的信息语义相同的特点, 先在输入样本的对应维度上随机抹除一部分数据, 然后, 从其他样本的相同维度的数据中随机抽取信息填充到当前输入样本被抹除的位置中, 最后, 基于同步对称架构的网络进行对比学习. 训练得到的模型可用于预测关系型数据中丢失区域的信息.
2.6.4 长尾识别任务
粗略地说, 长尾数据是指尾部类众多的不均衡数据, 而长尾学习的主要研究目标是提升尾部类的识别正确率. 最近几年, 研究者们开始尝试将对比学习的思想和技术应用到长尾学习任务中.
文献[95]提出K-正样本对比损失 (K-positive contrastive loss, KCL), 将对比学习与长尾识别任务结合起来. 具体而言, 在长尾学习的特征学习阶段, KCL使用对比学习方法, 但每个训练样本仅随机选取个同类样本. 而在后续的分类器训练阶段, 仍采用传统的交叉熵损失, 但使用类均衡采样, 以平衡不同类的样本量、提升少数类的分类准确度. 文献[96]提出目标监督对比学习 (Targeted supervised contrastive learning, TSC) 方法, 将监督对比学习用于长尾识别的任务中. 该方法首先在特征空间中设定均匀分布的聚类中心, 然后, 在KCL损失的基础上, 增加样本到其聚类中心之间的距离计算的损失项, 以将样本逼近其聚类中心, 使得不同类别之间的分类界限更加清晰.
文献[97]提出平衡对比学习损失 (Balanced contrastive learning, BCL), 用于长尾识别. 该方法将类别中心加入到对比学习计算中, 并求批中每个类别的样本的梯度的平均值, 以减少多数类样本在梯度方面的影响.
其他任务
对比学习除了在分类、分割、预测这些任务中有广泛的应用以外, 在多模态学习任务中, 也有重要作用. 多模态学习任务通常包含两大类子问题, 即模态内的特征学习问题和模态间特征对齐问题.
Yang等[81]提出了一种视觉−语言跨模态对比学习方法. 该方法提出将对比学习方法应用于模态内特征提取网络的训练, 使各模态的特征提取网络能力更强, 解决了跨模态学习过程中模态内的特征学习问题. Dong等[82]将对比学习运用在包含5个模态数据的模型训练中. 针对模态内特征学习问题, 该方法采用掩码恢复任务作为模态内模型的代理任务. 然后, 针对不同模态特征之间的对齐问题, 设计模态间对比学习模块, 利用模态间的对齐得分矩阵衡量不同模态间信息的相似度, 进行更好的对比学习. Afham等[98]将对比学习算法引入到3D点云表示学习中. 该模型采用两个并行的对比学习方法, 其中一个对比学习方法基于SimCLR网络结构, 在点云数据内部进行对比学习, 另一个对比学习方法引入二维图像数据, 将点云数据与对应的二维图像数据进行跨模态的对比学习.
Laskin等[99]将对比学习结合到强化学习中, 用于提高特征提取网络的能力. 该方法基于MoCo架构, 分支1的输出, 送入强化学习中; 分支1和分支2的输出, 组对送入对比学习中.
综合对比分析
本节根据前文提出的对比学习归类方法, 对现有的方法进行归纳汇总和整体分析. 表2汇总了代表性的对比学习方法及其所属归类 (包括具体样本对构造、图像增广方法、网络架构类型和损失函数).
表2 对比学习方法整体归类分析
未来发展方向
本文在对目前的对比学习论文进行归纳和总结后, 认为该研究领域还存在许多可以探索的问题, 同时存在一些可以与其他领域互相借鉴和发展的方向, 具有广泛的研究前景, 以下是对该领域发展的展望:
- 对比学习中样本对的选择方法仍存在发展空间, 在训练过程中剔除假负样本以及选择合适的正样本对能够有效地提高特征学习网络的学习效果. 因此如何更加合理地剔除假负样本和选择正样本对是一个值得研究的关键问题.
- 解决对比学习训练过程中的一致性与均匀性矛盾是一个十分重要的问题, 如果该问题得到解决, 能在很大程度上提高特征提取网络在下游任务上的泛化能力.
- 对比学习和无监督域自适应[107-108]的结合. 在无监督域自适应问题中, 源域数据存在标签, 目标域数据不存在标签, 源域数据和目标域数据分布相近或相同, 且拥有相同的任务[107], 如何将源域数据和目标域数据一同训练, 使得模型能够在目标域上获得良好的效果是无监督域自适应的核心问题. 在无监督域自适应研究中, 源域数据和目标域数据可以通过自监督训练方法联合训练模型, 对比学习就是一种先进的自监督训练算法, 因此如何将对比学习方法与无监督域自适应方法进行有效结合是一个值得研究的问题.
- 目前对比学习主要的下游应用是分类任务, 如何设计更多的对比学习方法应用到检测、追踪等下游任务中, 也将是未来的发展方向之一.
结束
对比学习是近年的研究热点. 本文系统梳理了对比学习的研究现状, 提出一种将现有方法划分为样本对构造层、图像增广层、网络架构层、损失函数层和应用层的归类方法, 并从自监督对比学习算法入手, 分析和归纳近四年主要的对比学习方法. 而且, 本文还全面对比了不同方法在各种下游任务中的性能表现, 指出了对比学习现存的挑战, 勾勒了其未来发展方向. 对比学习研究作为一个快速发展的研究领域, 在理论依据、模型设计、损失函数设计及与下游任务结合等方面还有较大的研究空间.