而在机器视觉领域,自监督学习主要有两类方法,生成类方法(Generative)和区别类方法(Discriminative)。其中,生成类方法通过直接在输入空间中主动生成像素或建立像素模型来完成机器学习任务。区别类方法则是通过优化目标函数来学习潜在空间中的表征(Representation),利用学习到的表征来完成下游任务,比如对比不同的数据。在自监督方法中,区别类方法通过执行前置(pretext)任务训练网络,因此使用的用于训练网络的样本数据和标记数据一般都来自于未标记的数据集。
前置任务是指用来学习视觉表征的自我监督学习任务,目的是对下游任务(也就是真正任务)使用在前置任务中获得的学习表征或模型权重。
对比学习也是一种基于潜在空间的区别类自监督学习方法,近年来获得了越来越多的关注。与有监督学习不同,对比学习不需要依赖于大量人工标记处理的样本数据,适用于更多的应用场景。此外,对比学习直接使用数据本身提供监督信息来指导学习。
对比学习的主要任务是从由相似 / 不相似数据对组成的数据集中学习相似 / 不相似的表示。利用这种方法,可以训练机器学习模型来区分相似 / 不相似的图像。对比学习中,机器学习的是一对「孪生网络」,即同时学习针对于正样本(相似数据)的网络和针对于负样本(不相似数据)的网络。对于这种孪生网络,对比学习中引入了损失函数处理成对的数据关系。
首先确定 x 为「锚定(Anchor)数据」,令 x + 表示与 x 相似的正样本,x - 表示与 x 不相似的负样本,对比学习通过建立一个 softmax 分类器来正确地对正样本(绿色)和负样本(红色)进行分类。对于 x,对比学习的目的是学习一个编码器 f,以满足下式[3]:
其中,score( )函数用于度量两个样本特征之间的相似度。通过构建损失函数实现将较大数值分配给正样本,将较小值分配给负样本,从而学习到满足上式的编码器。假设使用向量内积来计算相似度,下面给出一个损失函数的示例:
其中,分母项由一个正样本和 N-1 个负样本组成。损失函数中标记为绿色和红色的部分分别与编码器约束的不等式中的绿色和红色部分相对应。其中,绿色部分表示对正样本的计算,红色部分表示对负样本的计算。由上式可以看出 L_N 是一个 N 向 softmax 分类器的交叉熵损失函数,在对比学习中通常被称为信息损失(InfoNCE Loss )。在其它一些文献中也被称为多类 n 对损失(Multi-class N-Pair Loss)或基于排名的 NCE(Ranking-based NCE )等。
InfoNCE Loss 最初来源于 Yann LeCun 的《Dimensionality reduction by learning an invariant mapping》[1],我们将详细介绍此文。此文主要目的是将其应用在降维任务中,即,对于在原始空间中相似的样本,经过降维处理(特征提取)后,在特征空间中两个样本仍旧是相似的;而在原始空间中不相似的样本,在经过降维处理后,在特征空间中仍旧不相似。
本文在回顾这篇文章的基础上,结合 Hinton 组关于 SimCLR(a Simple Framework for Contrastive Learning)的相关工作 [2],详细分析了对比学习在视觉表示提取、图像分类任务中的应用,具体包括 SimCLR 和最新的 SimCLRv2 [6]。其中,SimCLRv2 是在 SimCLR 的基础上构建的一个半监督学习框架,作者给出的分析和实验显示,半监督学习(SimCLRv2)极大提升了自监督对比学习(SimCLR)的效果,在文章中的实验条件下,SimCLRv2 仅使用 10% 的标记数据就获得了超过监督学习的效果。
最后,类似于 SimCLRv2 向自监督学习中引入一些(半)监督信息的思路,本文介绍一篇最新发表在 arxiv 上的文章《Supervised Contrastive Learning》[5],该文章将「自监督」和「有监督」结合起来,与经典的利用交叉熵(Cross-Entropy)的 「有监督」学习相比,引入「自监督」的对比学习,能够学习到更优的表示,显著提高了 ImageNet 分类任务中 Top-1 的准确性和稳健性。
一、利用对比学习实现降维
本文是 CVPR 2006 中的一篇文章,由 Yann LeCun 组首次提出了对比学习损失函数的概念 [1]。降维是指将一组高维数据映射到低维流形上,以便将输入空间中的「相似」点映射到流形的附近点上。比如著名的 PCA 和 MDS 就是降维方法。作者为了学习一个能够将高维数据映射到低维流形的全局一致非线性函数,提出了一种通过学习不变映射实现降维的方法(Dimensionality Reduction by Learning an Invariant Mapping,DrLIM)。
该方法使用基于能量的模型,利用给定的邻域关系来学习映射函数。为了最小化以生成这样的映射函数,本文提出了一个新的损失函数。与早期以样本(Samples)为单元学习得到的损失函数不同,本文的损失函数是以样本对(Pairs of Samples)为基本单元学习得到的。基于该损失函数学习到的映射函数能够持续映射训练期间未知的新点。此外,这个映射函数不受输入空间中简单的距离测量的限制。
给定高维训练数据向量 X_i,每个 X_i 都有一个对应的由与其相似的训练数据向量组成集合 S_Xi,可以通过一些先验知识,例如对失真或时间接近的不变性等来计算得到集合 S_Xi。理想的映射函数 G_W 应当能够将相似的输入向量映射到输出流形上的邻近点,同时将不同 / 不相似的输入向量映射到流形中距离较远的点。令 X1 和 X2 分别为输入向量,Y 为二值化标记,即 X1 与 X2 相似(X1 与 X2 属于同一类)则 Y=0,X1 与 X2 不相似(X1 与 X2 不属于同一类)则 Y=1。首先,定义 X1 与 X2 之间的距离为 D_W:
D_W 衡量 X1 与 X2 的函数输出在潜在空间中的欧式距离,其中 G_W 是所寻求的映射函数。通过学习映射函数 G_W 的参数W,能够使在原始高维空间中的近邻样本在低维流形上内聚、而原始高维空间中的非近邻样本远离。定义损失函数为:
其中,(Y,X1,X2)^i 表示第 i 个已标记样本对。L_S 表示相似样本的损失函数,L_D 表示不相似样本的损失函数,P 为训练集中样本的总数目。L_S 和 L_D 的设计必须能够使 L 保证对于相似样本对 D_W 值较小,而对于不相似样本 D_W 值较大。继续将 L 展开,可以得到下式:
其中,d=||a_n−b_n||_2,用于表征两个特征间的欧式距离,y 为标签如上述 Y,margin 为设定的阈值。当 y=1(即样本相似)时,损失函数只剩下∑yd^2,这表明原本相似的样本,如果在特征空间的欧式距离较大,则说明当前的模型不好,因此需要进一步增大损失值。当 y=0 时(即样本不相似)时,损失函数为∑(1−y)max(margin−d,0)^2,即当样本不相似时,其特征空间的欧式距离小的情况下,损失值会变大。图 1 给出了损失函数值与样本特征的欧式距离之间的关系。
图 1. 损失函数与样本特征的欧式距离之间的关系,其中红色虚线表示相似样本的损失值,蓝色实线表示不相似样本的损失值。
图 2 给出了本文所采用的学习结构:孪生网络结构(Siamese Architecture),它由 G_W 的两个副本组成,共享同一组参数 W 和一个 cost 模块。通过学习该结构,能够将 MNIST 数据映射到具有位移不变性的低维流形中。孪生网络结构的输入为样本对(Y,X1,X2),生成两个输出 G_W(X1)、G_W(X2)。损失函数结合 D_W 和标签 Y 来生成 L_S 或 L_D,利用随机梯度更新参数 W。
图 2. 映射函数结构。
由于共享权重和多层结构,该孪生网络结构可以学习到最优的移位不变局部特征检测器,同时保持对输入图像几何畸变的不变性。图 3 给出了 MNIST 样本平移映射不变性的实验结果。首先,使用欧式距离邻域图(每个样本 5 个最近邻)进行训练,转换样本之间的较大距离产生了不相交的邻域关系图,并且生成的映射也是不相交的。输出点根据输入样本的转换位置进行聚类(图 3)。在图 3 中的每个簇中,样本组织结构良好、分布均匀。
图 3. MNIST 样本平移映射不变性。
DrLIM 是一种降维方法,作者在原文中通过实验验证了 DrLIM 能够利用先验知识学习到低维流形的不变映射。DrLIM 应用于降维中的优势在于引入了对比损失函数 L(W)。通过对相似样本和不相似样本使用单独的损失函数,系统避免崩溃为一个常数函数,同时能够保持输出空间的平衡。
二、自监督和半监督的视觉表示对比学习
1、SimCLR
本文是最新发表于 ICML 2020 中的文章 [2]。受到基于潜在空间(Latent Space)对比学习的不同的区分方法(Discriminative Approaches)所表现出来的良好性能启发,本文作者提出了一个简单的视觉表征对比学习框架:SimCLR。SimCLR 通过最大化潜在空间 z 中的对比函数来学习视觉表示,该损失函数基于同一样本数据的不同增强视图之间的一致性来构建。具体见图4:
图 4. 视觉表征对比学习的简单框架。
对于同一个样本数据的增强数据集合中的两个独立增强数据样本,t ~T 和 t’~T,得到两个数据样本的相关性视图 x_i 和 x_j。使用损失函数训练基本编码器网络 f() 和映射头 g()以最大化二者之间的一致性。训练结束后,抛弃映射头 g(),并使用编码器 f()和表示 h 来执行后续的下游任务。
SimCLR 的完整流程如下:
SimCLR 框架包括以下四个主要部分:
随机数据增强模块(A stochastic data augmentation module):该模块将任意给定的数据样本实例随机变换,产生同一个样本实例的两个相关视图,作为正样本对表示为 x_i 和 x_j。依次应用三个简单的增强处理:随机裁剪然后调整到原始大小,随机颜色扭曲和随机高斯模糊。
基于神经网络的编码器(A neural network base encoder):该模块从扩充的数据样本实例中提取表示向量。SimCLR 框架允许在没有任何约束的情况下选择各种网络架构的编码器。本文作者采用了常用的 ResNet 计算得到 h_i=ResNet(x_i)。
神经网络映射头(neural network projection head),它将表示映射到应用对比损失函数的空间中。本文作者使用包含一个隐藏层的 MLP 计算 z_i=W^(2)σ(W^(1)h_i),其中,σ为 ReLu 函数。
适用于对比预测任务的对比损失函数(A contrastive loss function)。一对正样本对 (i,j) 的损失函数定义为
最后,在一个小批量中计算所有正样本对 (i,j) 和(j,i)的损失以得到总体损失值。这个损失计算函数称为归一化温度尺度交叉熵损失 NT-Xent(the Normalized Temperature-Scaled Cross Entropy Loss)。
2、SimCLRv2
在 2 月份发布 SimCLR v1 后不久,作者就发布了升级版本 SimCLRv2 以及代码 https://github.com/google-research/simclr。新的工作是一个半监督学习框架(Semi-Supervised Learning Framework),主要包括三部分:(1) 无监督或自监督的预训练;(2)有监督的微调;(3)使用未标记的数据进一步的蒸馏处理。其中,作者改进了 SimCLR 得到了 SimCLRv2,用于第一个步骤中 ResNet 体系结构的无监督预训练。该框架以与任务无关和特定于任务两种方式利用未标记的数据。该半监督学习框架具体如下图 5:
图 5. 半监督学习框架以两种方式利用未标记的数据:(1)在无监督的预训练中使用不可知的任务(左);(2)在自训练 / 知识蒸馏中使用特定任务(右)
半监督学习框架主要包括下述三个部分:
使用 SimCLRv2 的自监督预训练:SimCLR 通过在潜在空间中优化对比损失函数,从而保证同一数据样本实例的不同增强视图之间的一致性来学习表示。与 SimCLR 相比,SimCLRv2 有以下几个改进:(1)与 SimCLR 使用 ResNet-50 不同,SimCLRv2 训练的模型更深,但更少。SimCLRv2 训练的最大模型是一个 152 层的 ResNet,它有 3 倍宽度通道和选择性核(selective kernels,SK),SK 是一种通道注意机制,可以提高网络的参数效率。通过将模型从 ResNet-50 扩展到 ResNet-152(3x +SK),当对 1% 的标记样本进行微调时,SimCLRv2 获得了 29% 的 Top1 准确度的相对提高。(2)增加非线性网络映射头 g()的容量,使其更深。此外,与 SimCLR 预训练完毕后即丢弃 g()的处理方式不同,SimCLRv2 从中间层进行微调。这一调整使得线性评估和仅对几个标记样本进行微调的处理效果都产生了显著的改进。通过使用一个 3 层映射头和第一层映射头的微调,当在 1% 的标记样本上进行微调时,SimCLRv2 的 Top1 准确度相对提高了 14%。(3)引入内存记忆机制,指定一个内存网络(具有用于稳定的加权移动平均数),将其输出存储作为负样本使用。本身该框架是基于已经提供了许多负样本的小批量(mini-batch)进行训练的,引入内存机制使得线性评估效果改进了 1%,基于标记样本微调的结果改进了 1%。
微调:微调是一种常见的方法,可以使不受任务约束的预训练网络适应特定任务。在 SimCLR 中,在预训练后丢弃 MLP 映射头 g(),在微调过程中只使用 ResNet 编码器 f()。在 SimCLRv2 的微调过程中,将 MLP 映射头的一部分合并到基本编码器中 f(),而不是将其全部丢弃。这相当于从映射头的中间层进行微调,而不是像 SimCLR 中那样从映射头的输入层进行微调。以一个 3 层映射头为例:g(h_i)=W^(3)(σ(W^(2)σ(W^(1)h_i))),对于 SimCLR 来说,微调的过程为:f^task(x_i)=W^taskf(x_i),其中,W^task 为添加的任务特定线性层的权重,这是从映射头的输入层进行微调。为了从映射头的第一层进行微调,SimCLRv2 引入一个新的编码器函数 f^task(x_i)=W^taskσ(W^(1)f(x_i)),这是一个 ResNet,后面是全连接层。
通过未标记样本进行自训练 / 知识蒸馏:为了进一步改进目标任务的网络,SimCLRv2 直接利用未标记样本来执行目标任务。使用微调网络作为教师网络,为训练学生网络输入标记标签。具体地说,在没有使用真实标记的情况下,将以下蒸馏损失降到最低:
其中,τ表示标量温度参数(a scalar temperature parameter)。在知识蒸馏过程中,教师网络 P^T(y|x_i)固定不变,学生网络 P^S(y|x_i)进行训练。虽然在本文工作中只关注使用未标记样本的知识蒸馏,但当标记样本的数量很大时,也可以使用加权组合将蒸馏损失与真实标记样本进行结合:
图 6. 不同方法 Top-1 准确度。
作者使用 ResNet-50 进行实验,由图 6 可以看出,本文提出的半监督学习框架仅使用 1% 的标记(每个类别 13 张标记图像)即可获得 73.9% 的 Top1 准确率,与之前的 SimCLR 能够获得的最好结果(图中标记为 State of the Art,SOTA)相比,标记数据使用效率提高了 10%,整体结果提高了大约 22%。使用本文方法训练的 ResNet-50 在 10% 的标记数据的情况下能够达到 77.5% 的 Top1 准确率,优于相同实验环境下已知全部标记信息的监督学习方法。
短短半年的时间,SimCLRv2 与 SimCLR 相比提升了大约 22%,这个改进的速度和改进的效果都是相当惊人的。由此,本文也传递出了一个信息:半监督学习的潜力是非常巨大的。
本文给出的研究结果可以进一步被用来提高计算机视觉特定应用的准确性。在这些特定应用中,获取标记的数据比训练更大模型所耗费的成本更高或实现起来更加困难。例如,在医疗应用中,获取高质量的数据标记需要临床医生参与最基础的数据标记工作,这显然是成本巨大且耗时非常长的,在这种情况下更好的半监督学习方法可能能够获得更快、更好的效果,从而有助于挽救生命。
三、有监督的对比学习
本文是 Google 人工智能团队的最新研究成果。图 7 给出了一个经典的自监督学习应用的示例 [2]。在自监督学习中,所有的样本数据(图像)都没有标记。因此,使用给定的样本图像(剪切、翻转、颜色变化等)来生成正样本图像,而负样本图像则是从小批量数据集中随机抽样得到的。这种样本构建和学习的方法可能会存在假样本的问题,如图 7 右下角的图像。
这幅图像与正样本的原始图像(左上角的图像)并非由对同一图像的处理得到的,因此被认为是「负样本」。在完全自监督(无人工分类标记)的情况下,「狗」的照片被错分为负样本。这种错误的类别划分方式可能会导致对比学习学习到错误的表示。
图 7. 自监督对比学习示例。
图 7 中的示例说明了对比学习中的一个典型问题:如何合理的设计 / 构建正样本 - 负样本对(Pair)。一方面,科学的构建正 - 负样本对能够改进样本分类的任务的准确度;另一方面,通过有效利用样本对之间的 语义关系(Semantic Relation),即从更高层次挖掘样本图像中的信息,能够进一步改进对比学习的效果。本文的思路是,人工对不同类别的样本图像「打标记」,在有监督的情况下避免错分的负样本的问题。此时,图 7 变为如下图 8。在本文考虑的监督对比损失中,在提供人工标记的前提下对一个类别的正样本与其他类别的负样本进行对比。来自同一类(人工标记类别)的图像被映射到低维超球体中的邻近点。
图 8. 有监督的对比学习示例。
经典对比学习问题中,对比损失由两个「相反的力」组成:对于给定的锚定数据点,第一个力拉进锚点在表示空间中与其他点的距离,而第二个力使得锚点远离其他点。前一组称为正样本,后一组称为负样本。本文工作的创新点在于,除了大量负样本因素之外,每个锚点的训练会考虑许多正样本因素,使用人工提供的标记来选择正样本和负样本。具体见图 9 示例。交叉熵损失(左)使用标记和 softmax 损失来训练模型;经典的自监督对比损失(中)使用对比损失和增强处理后的样本数据来学习一类图像的视觉表示;本文提出的监督对比损失(右)分为两个阶段;第一阶段使用标记选择图像对比损失。在第二阶段,冻结学习到的表示,然后使用 softmax 损失在线性层上学习分类器。
图 9. 不同学习方式对比。
本文提出的有监督对比学习框架主要由以下几部分组成:
数据增强模块:输入图像转换为随机增强图像。对于每个输入图像,生成两个随机增强图像,每个随机增强图像代表输入图像的不同视图,因此都包含原始输入图像中的一些信息子集。增强处理的第一步是对图像进行随机裁剪处理,然后将其调整为输入图像的原始分辨率。第二步,执行下述增强处理:自动增强、随机增强、随机混色和高斯模糊。
编码器网络:将一个增强图像映射到一个表示向量。每个输入图像的两个增强图像分别输入到同一个编码器中,从而产生一对表示向量。作者实验了两种常用的编码器架构:ResNet-50 和 ResNet-200,其中最终池化层的激活被用作表示向量。
映射网络:将表示向量经由一个映射网络映射为一个向量。使用一个隐藏层大小为 2048、输出向量大小为 128 的多层感知器(MLP)作为映射网络。将该向量在单位超球面上规范化处理,从而使得可以使用内积来测量映射空间中的距离。映射网络仅用于训练有监督的对比损失。与 SimCLR 相同,训练完成后即丢弃该网络,使用一个单一的线性层代替它。
在有监督的场景下,样本表示为{x_k, y_k}k=1...N,其中 x_k 为样本,y_k 为类别标记,对应的 minibatch 中包含 2N 个样本对。对于有监督学习,经典对比学习中的对比损失不能处理多个样本确定属于同一类的情况。为了将损失推广到能够处理属于同一类的任意数量的正样本的情况,作者提出了以下损失函数:
该式的变化包括:(1)推广到任意数量的正样本,对于任何锚定点,一个小批量中的所有正样本(即基于扩充的一个以及来自同一类的任何剩余样本)都用于计算得到分子;(2)负样本越多,对比越大。在分母上加上更多的负样本可以增加正样本的对比度。
表 1 给出了 ResNet-50 和 ResNet-200 的结果。对于本文所考虑的两种结构,有监督的对比损失比交叉熵性能好,超过了 1%。此外,在带有 AutoAugment 的 ResNet-50 上实现了 78.8% 的准确率(为了进行比较,表 1 还给出了其他一些性能最好的方法)。
表 1. ResNet-50 和 ResNet-200 上 ImageNet 的 Top1/Top5 准确度结果。
本文所给出的方法实际上是在对比学习的启发下的一种改进的监督学习方法。其使用的损失函数提供了一端完全无监督训练和另一端完全监督训练之间的自然联系。这也为半监督学习的应用提供了可能性,试想,沿着该思路是否可以成功利用单个损失的好处,进而实现根据标记数据的可用性平滑地改变训练的行为。本文中作者并未涉及半监督学习的研究和讨论,给出的分析和实验结果都是有监督的。但结合 Hinton 组最新的成果,在今后的研究方向中,是否也可以考虑将该框架延伸到半监督的场景?
四、文章小结
在这篇文章中,我们回顾了对比损失的来源,分析了 SimCLR 自监督对比学习方法,结合最新的 SimCLRv2 了解了基于对比学习的半监督学习框架,最后还介绍了一篇最新的关于有监督学习的文章。我们在这篇文章中是按照「对比学习的起源 - 自监督对比学习 - 半监督对比学习 - 有监督对比学习」的思路选取的四篇论文。从文章的分析和给出的实验结果可以看出,加入半监督、有监督的信息后,图像分类任务的效果得以提升。但是,正如 Hinton 关于 SimCLRv2 的文章中阐述的,在一些特定应用中,获取标记的数据比训练更大模型所耗费的成本更高或实现起来更加困难。在这种情况下,有监督学习的应用非常困难,半监督、自监督的学习方法则具有明显优势。对比学习具有完整、清晰的学习框架和数学理论分析的基础,以及良好的应用场景适应性,我们会在后续继续跟进对比学习的各类框架的发展。
本文参考引用的文献:
[1] Hadsell R , Chopra S , Lecun Y . Dimensionality reduction by learning an invariant mapping[C]// 2006 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR'06). IEEE, 2006. http://www.cs.toronto.edu/~hinton/csc2535/readings/hadsell-chopra-lecun-06-1.pdf
[2] Chen T , Kornblith S , Norouzi M , et al. A Simple Framework for Contrastive Learning of Visual Representations. ICML 2020.https://arxiv.org/abs/2002.05709
[3] https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html
[4] Oord A V D , Li Y , Vinyals O . Representation Learning with Contrastive Predictive Coding[J]. 2018. https://arxiv.org/pdf/1807.03748.pdf
[5] Khosla P , Teterwak P , Wang C , et al. Supervised Contrastive Learning[J]. 2020. https://arxiv.org/abs/2004.11362?context=cs.CV
[6] Chen T , Kornblith S , Norouzi M , et al.Big Self-Supervised Models are Strong Semi-Supervised Learners, https://arxiv.org/abs/2006.10029
[7] Wu M , Zhuang C , Mosse M , et al. On Mutual Information in Contrastive Learning for Visual Representations[J]. arXiv, 2020.https://arxiv.org/pdf/2005.13149.pdf
分析师介绍:
本文作者为仵冀颖,工学博士,毕业于北京交通大学,曾分别于香港中文大学和香港科技大学担任助理研究员和研究助理,现从事电子政务领域信息化新技术研究工作。主要研究方向为模式识别、计算机视觉,爱好科研,希望能保持学习、不断进步。