Momentum Contrast for Unsupervised Visual Representation Learning

摘要

 我们提出用于无监督视觉表示学习的动量对比度(MoCo)。 从作为字典查找的对比学习[27]的角度来看,我们构建具有队列和移动平均编码器的动态字典。 这样可以即时构建大型且一致的字典,从而促进对比性无监督学习。 MoCo在ImageNet分类的通用线性协议下提供了有竞争力的结果。 更重要的是,MoCo学习到的表示形式可以很好地转移到下游任务。 在PASCAL VOC,COCO和其他数据集上的7个检测/细分任务中,MoCo可以胜过其受监督的预训练同类,有时甚至可以大大超过它。 这表明,在许多视觉任务中,无监督和有监督的表示学习之间的鸿沟已被很大程度上消除。

引言

 我们提出动量对比度(MoCo)作为一种建立大型且一致的字典的方式,以进行无监督学习而形成对比损失(图1)。 我们将字典作为数据样本的队列进行维护:将当前迷你批处理的编码表示入队,而将最旧的队列出队。 队列使字典大小与迷你批处理大小解耦,从而使其更大。 此外,由于字典键来自前面的几个小批处理,因此提出了一种缓慢进行的键编码器,以实现查询编码器的基于动量的移动平均值,以保持一致性。
 MoCo是一种用于建立用于对比学习的动态词典的机制,可用于各种借口任务。在本文中,我们遵循一个简单的实例判别任务[59,61,2]:如果查询是同一张图片的编码视图(例如,不同的作物),则查询会匹配关键字。使用此借口任务,MoCo在ImageNet数据集的线性分类的通用协议下显示出竞争性结果[9]。

3.方法

3.1 Contrastive Learning as Dictionary Look-up

 对比学习[27]及其最新进展可被视为训练字典查找任务的编码器,如下所述。
考虑一个编码查询q和一组编码字典 k 0 , k 1 , k 2 , . . . {k_0,k_1,k_2,...} k0k1k2...,它们是字典的关键字。 假设在字典中与q匹配的只有一个键(表示为 k + k_+ k+)。 对比损失[27]是一个函数,当q与其正键 k + k_+ k+相似其值较低, 与所有其他键(q的负键)不相似。 通过点积测量的相似性,本文考虑了一种称为InfoNCE [44]的对比损失函数形式:
L q = − l o g e x p ( q ⋅ k + / τ ) ∑ i = 0 K e x p ( q ⋅ k i / τ L_q=-log\frac{exp(q \cdot k_+/\tau)}{\sum_{i=0}^Kexp(q\cdot k_i/\tau} Lq=logi=0Kexp(qki/τexp(qk+/τ)

3.2 动量对比度

从以上角度来看,对比学习是一种在高维连续输入(例如图像)上构建离散词典的方法。 字典是动态的,从某种意义上说,密钥是随机采样的,并且密钥编码器会在训练过程中演变。 我们的假设是,可以通过包含大量否定样本的大型字典来学习良好的功能,而尽管字典键不断演进,但字典键的编码器仍应保持尽可能一致。 基于这种动机,我们介绍了动量对比度,如下所述。
字典作为队列。 我们方法的核心是将字典作为数据样本队列进行维护。 这使我们可以重用前几个迷你批处理中的已编码密钥。 队列的引入使字典大小与小批量大小分离。 我们的字典大小可能比典型的迷你批处理大小大得多,并且可以灵活且独立地设置为超参数。
 字典中的样本将逐步替换。 当前的迷你批处理将排入词典,并删除队列中最旧的迷你批处理。 字典总是代表所有数据的采样子集,而维护此字典的额外计算是可管理的。 此外,删除最旧的迷你批处理可能是有益的,因为它的编码密钥是最过时的,因此与最新密钥的一致性最小。
动量更新。 使用队列可以使字典变大,但也使得通过反向传播来更新密钥编码器变得很棘手(梯度应传播到队列中的所有样本)。 朴素的解决方案是从查询编码器fq复制密钥编码器fk,而忽略此梯度。 但是该解决方案在实验中产生的结果很差(第4.1节)。 我们假设这种故障是由于编码器的快速变化导致编码器的一致性降低所致。 我们提出了动量更新来解决此问题。
 形式上,将 f k f_k fk的参数表示为 θ k θ_k θk,将 f q f_q fq的参数表示为 θ q θ_q θq,我们通过以下方式更新 θ k θ_k θk:
θ k ← m θ k + ( 1 − m ) θ q 公 式 ( 2 ) \theta_k ←m\theta_k+(1-m)\theta_q公式(2) θkmθk+(1m)θq(2)
这里m∈[0,1)是动量系数。 通过反向传播仅更新参数 θ q θ_q θq。 式(2)中的动量更新使 θ k θ_k θk的演化比 θ q θ_q θq更加平稳。 结果,尽管队列中的密钥由不同的编码器(在不同的迷你批中)编码,但是可以减小这些编码器之间的差异。 在实验中,相对较大的动量(例如,m = 0.999,我们的默认值)要比较小的动量(例如,m = 0.9)好得多,这表明缓慢发展的键编码器是利用队列的核心。
与先前机制的关系。
 MoCo是使用对比损失的通用机制。我们将其与图2中的两个现有通用机制进行比较。它们在字典大小和一致性方面表现出不同的属性。
 通过反向传播进行的端到端更新是自然的机制(例如,[27、44、34、61、2、33],图2a)。它使用当前迷你批处理中的样本作为字典,因此对键进行了一致的编码(通过同一组编码器参数)。但是,字典大小与最小批处理大小结合在一起,受GPU内存大小的限制。大型小批量优化也给它带来了挑战[23]。最近的一些方法[44、34、2]是基于本地位置驱动的前置任务,其中字典大小可以通过多个位置增大。但是这些借口任务可能需要特殊的网络设计,例如修补输入[44]或自定义接收字段大小[2],这可能会使这些网络向下游任务的传输变得复杂。
 另一种机制是[59]提出的存储库方法(图2b)。 存储库由数据集中所有样本的表示组成。 每个微型批处理的字典都是从存储库中随机采样的,没有反向传播,因此它可以支持较大的字典大小。 但是,样本在存储库中的表示在上次看到时已更新,因此在过去的整个时期中,采样的密钥本质上是围绕多个不同步骤的编码器,因此一致性较低。 在[59]中,在存储库上采用了动量更新。 它的动量更新是在同一样本的表示上,而不是在编码器上。 动量更新与我们的方法无关,因为MoCo不会跟踪每个样本。 而且,我们的方法具有更高的存储效率,并且可以在十亿规模的数据上进行训练,这对于存储库来说是很难处理的。

3.3 前置任务

 对比学习可以推动各种借口任务。 由于本文的重点不是设计新的借口任务,因此我们主要根据实例辨别任务[59](与最近的作品[61,2]相关)使用一个简单的任务。
 继[59]之后,如果查询和关键字源自同一张图片,则将其视为正对,否则将其视为负样本对。 按照[61,2],我们在随机数据增强下对同一图像进行两个随机“观察”,以形成一个正对。 查询和关键字分别由其编码器f q和f k编码。 编码器可以是任何卷积神经网络[37]。
 算法1为该前置任务提供MoCo的伪代码。 对于当前的迷你批处理,我们对查询及其对应的键进行编码,从而形成正样本对。 阴性样本来自队列。
 技术细节。 我们采用ResNet [31]作为编码器,其最后一个完全连接的层(在全局平均池之后)具有固定尺寸的输出(128-D [59])。 该输出向量通过其L2范数进行归一化[59]。 这是查询或键的表示。 公式(1)中的温度τ被设置为0.07 [59]。 数据增强设置遵循[59]:从随机调整大小的图像中获取224×224像素的裁剪,然后进行随机的色彩抖动,随机的水平翻转和随机的灰度转换,所有这些都可以在PyTorch的Torchvision软件包中使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值