何恺明一作,刷新7项检测分割任务,无监督预训练完胜有监督

论文链接:https://arxiv.org/pdf/1911.05722.pdf

无监督表征学习在自然语言处理领域非常成功,诞生了 GPT、BERT 等性能强大的模型。但在计算机视觉领域,监督预训练一直是主流方法,无监督方法则被落在了后面。

这可能是因为它们对应的信号空间不同。语言任务有着离散的信号空间(词等),可以用于构建成分词后的词典(dictionary)。这种词典是无监督学习可以依赖的特征。但是,计算机视觉与之相反,其原始信号是在一个连续且高维的空间中,无法成为结构化信号用于人类的交流。

在无监督的视觉表征学习上,近来的一些研究通过使用对比损失(constrative loss)的方法取得了不错的效果。这些方法都可以被认为和动态词典(dynamic dictionary)相关。在词典中,键(token)是通过从数据(如图像等)中进行采样得到的,然后使用一个编码器网络转换为表征。无监督学习则训练编码器,用于词典的查找工作,即一个编码的「查询(query)」应该和与之匹配的键相似,与其他键不相似。这样的一个学习过程可以被构建为减少对比损失。

从这一角度来看,研究者假设,可以构建一种词典,这个词典:(1)足够大;(2)能够在训练的过程中不断更新。从直觉上来说,一个更大的词典能够更好地采样隐性的连续高维视觉空间。而词典中的键应当能够被同样的或者近似的编码器表示。这样其相对应的查询则是稳定连续的。

在本次研究中,何恺明等研究者提出了一种名为动量对比(Momentum Contrast,简称 MoCo)的方法。这种方法旨在通过对比损失为无监督学习建立大型、一致的词典(如下图 1 所示)。研究者将词典维护为一个数据样本队列:当前 mini-batch 编码表征将进入队列,而最老的将退出队列。该队列将词典大小与 mini-batch 大小解耦,从而允许词典变大。此外,由于词典键来自前面的几个 mini-batch,因此研究者提出使用一个缓慢前进的键编码器,作为基于动量的查询编码器的移动平均值,以保持一致性。

图 1.MoCo 通过使用对比损失将一个已编码的查询 q 与一个已编码的键词典进行匹配来训练一个视觉表征编码器。 词典键 {k_0, k_1, k_2, ...} 是由一组数据样本动态定义的。

MoCo 是一种为对比学习创建动态词典的机制,可以用于解决多种 pretext 任务。在这篇论文中,研究者采用了一个简单的实例判别任务:一个查询匹配一个键(如果它们是同一图像的编码视图)。在 ImageNet 数据集中,MoCo 在普通线性分类标准下展示出了有竞争力的结果。

无监督学习的主要目的之一是预训练出可以通过微调迁移到下游任务的表征。何恺明团队的研究结果表明, 在 7 个与检测和分割相关的下游任务中,MoCo 无监督预训练可以超越在 ImageNet 上的监督学习结果 ,在某些情况下其表现还大大超越后者。

他们通过实验探索了 MoCo 在 ImageNet 或 10 亿张 Instagram 图像集上的预训练结果,这些结果表明,在许多计算机视觉任务中,MoCo 都可以在很大程度上缩小无监督和监督表征学习的差距,在若干项应用中可以取代 ImageNet 监督预训练。

方法详解

对比学习可以看做查词典

对比学习及其最新进展可以看做是为查词典任务训练一个编码器。

假设有一个编码的查询 q 和一组编码的样本 {k0, k1, k2, ...},它们都是词典的键。词典中有一个键(k+)与 q 相匹配。对比损失是一个函数,该函数的值在 q 类似于其正键 k+且不同于其他所有键(q 的负键)时很低。研究者使用点积的相似度度量,这是一种对比损失函数的形式,名为 InfoNCE。本文采用了这个函数:

这一对比损失函数充当一个无监督目标函数,用于训练表征查询和键的编码器网络。总体来说,查询表征是 q = f_q(x^q ),其中的 f_q 是一个编码器网络,x^q 是查询样本。

动量对比(Moco)

对比学习是在图像等高维连续输入上建立离散词典的一种方法。该词典是动态的,因为键是随机采样的,而且键编码器在训练过程中逐渐更新。本文的研究者提出的假设是:好的特征可以通过一个涵盖大量负样本的词典来学习,在这一过程中,尽管词典键的编码器处于动态变化之中,但它仍应当尽可能保持稳定。基于这种思想,研究者提出了 MoCo 方法。

1. 将词典作为队列

该方法的核心是将词典保持为一个数据样本队列。这使得重新利用来自之前的 mini-batch 的编码键成为可能。队列的引入将词典大小与 mini-batch 大小解耦,词典的大小可以远远大于典型的 mini-batch 大小,而且可以灵活而独立地设置为超参数。词典中的样本被逐步替换,当前的 mini-batch 被加入到词典队列中,而最早的 mini-batch 被从队列中移除。该词典总是表示一个所有数据的采样子集,而维护该词典的额外计算是可管理的。

2. 动量更新

使用队列可以使词典更大,但这使得通过反向传播更新键编码器变得困难。假设这种失败是由于编码器的快速变化降低了键的表征一致性造成的。基于这种假设,研究者提出用动量更新来解决这个问题。

将 f_k 的参数表示为θ_k,将 f_q 的参数表示为θ_q,通过以下方法来更新θ_k:

在上面的式子中,m ∈ [0, 1) 是一个动量系数。只有参数θ_q 通过反向传播得到了更新。(2)式中的动量更新使得θ_k 的变化比θ_q 要更加平滑。

在实验中,一个较大的动量(如 m = 0.999)比一个较小的值(如 m = 0.9)效果要好,表明缓慢更新的键编码器是使队列发挥作用的关键。

3. 和其他方法的对比

研究者在图 2 中将他们的方法和之前的方法进行了对比。

图 2:三种对比损失机制的比较。在这里,研究者只展示了一对查询和键的关系。

这三种方法的主要不同之处在于,它们对于键应该怎样被维持和键编码器如何更新上有所区别。(a)在端到端方法中,查询和键的表征通过端到端的反向传播方法进行更新;(b)在 memory bank 的方法中,键的表征通过一个 memory bank 进行采样;(c)在本文提出的方法中,MoCo 使用基于动量更新(momentum-updated)的编码器对新的键进行更新,并保持一个键的队列。

Pretext 任务

对比学习可以推动各种各样的 pretext 任务。本文的重心并不是重新设计新的 pretext 任务,而是根据以前的实例辨别任务建立起一个新的任务。

根据之前研究所实例辨别任务,研究者考虑将一对查询和键作为正样本对(positive sample pair),如果它们出自同一图像,否则将它们作为负样本对(negative sample pair)。研究者在随机数据增强下从同一图像中提取两个随意的「视图」,以构建正样本对。查询和键分别由各自对应的编码器 f_q 和 f_k 进行编码。编码器可以是任何架构的卷积神经网络。

下图算法 1 提供了该 pretext 任务所需的 MoCo 伪代码。对于当前的 mini-batch,研究者编码了查询以及对应的键,这些查询和键形成了正样本对。负样本对则来自队列(queue)。

和在标准 ResNet 上一样,研究者采用的编码器 f_q 和 f_k 都进行了批归一化(BN)。在实验中,他们发现使用批归一化也可以阻止模型学习好的表征。模型似乎可以「欺骗」pretext 任务,并能够很容易地找到低损失的解决方案。这大概是因为样本中的批内部的通信(由批归一化导致)泄漏了信息。

研究者通过打乱批归一化顺序的方式来解决上述问题。他们利用多个 GPU 展开训练,并分别针对每个 GPU 在样本上执行批归一化(这是一种常规做法)。对于键编码器 f_k,研究者对当前 mini-batch 中的样本顺序(sample order)进行打乱,然后才将它分配给对应的 GPU(并在编码完成后重新打乱);与此同时,对于查询编码器 f_q 而言,mini-batch 的样本顺序没有改变。这就确保用于计算查询及对应的正样本键的批统计值出自两个不同的子集。这样一来,上述模型「欺骗」pretext 任务的问题可以得到有效地解决,训练也可以获益批归一化。

如上图 2(a)所示,研究者在自己提出的 MoCo 和 end-to-end 方法中对批归一化进行了打乱;与此同时,如图 2(b)所示,他们没有在 memory bank 方法中采取这样的方式,这是因为 memory back 中的正样本键出自和之前的不同 mini-batch,所以不存在上述「欺骗」问题。

实验设置和结果

数据集和实验设置

研究者在以下数据集上进行了无监督训练。

ImageNet-1M (IN-1M):这是一个 ImageNet 上的训练集,也被称作 ImageNet-1K,有 128 万张图像,分成 1000 个类。当然,因为是无监督学习,研究者不关注分类信息。这个数据集在类别分布上非常平衡,其图像中通常有一个标志性的主要目标。

Instagram-1B (IG-1B):这是一个有着近 10 亿图像的公开图像数据集,来自 Instagram。这些图像有 1500 个和 ImageNet 分类相关的标签。这一数据集相比 ImageNet 是更无标注的,有着长尾、不平衡的数据分布。这一数据集中的图像可能有主要目标,也可能只是风景照那样没有主要目标的图像。

训练方法上,研究者使用了 SGD 作为优化器,权重下降值设为 0.0001,动量则设为 0.9。在 (IN-1M)数据集上,批大小为 256,使用 8 个 GPU 训练,初始学习率是 0.03。研究者训练了 200 个 epoch,并在 120 和 160 个 epoch 的时候,将学习率乘以 0.1。这一训练使用的是 ResNet-50 网络,用了 72 小时。

对于 IG-1B,研究者使用了 1024 的批大小和 64 个 GPU 进行训练。学习率为 0.12,并在每 62.5k 次迭代后就衰减 0.9。在这个实验上研究者训练了 1.25M 次(大约 1.4 个 epoch)。使用的依然是 ResNet-50,花了 6 天时间。

结果

图 3: MoCo、end-to-end 和 memory bank 三种不同对比损失机制在 ImageNet 线性分类评价标准下的对比结果。

表 1:在 ImageNet 数据集上,MoCo 与其他方法在线性分类评价标准下的对比结果。

表 2:在 PASCAL VOC trainval07+12 上微调的目标检测结果。

表 3: MoCo 与 end-to-end、memory bank 在 PASCAL VOC 目标检测上的对比。

表 4: MoCo 与先前方法针对在 PASCAL VOC trainval2007 上微调的目标检测的结果对比。

表 5:在 COCO 上微调的目标检测和实例分割结果:边界框 AP(AP^bb)和掩码 AP(AP^mk)在 val2017 上进行评估。

表 6: 在各种任务上微调时 MoCo 和 ImageNet 有监督预训练的对比结果。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章