【最近邻对比学习】Nearest-Neighbor Contrastive Learning of Visual Representations

本文介绍了一种新颖的自监督学习方法NNCLR,通过使用数据集中其他实例作为正样本,显著提高了ImageNet分类性能。NNCLR在对比学习中引入了最近邻概念,超越了单一实例的正样本,尤其在有限标签和迁移学习任务中表现出色,减少了对复杂数据增强的依赖。
摘要由CSDN通过智能技术生成

声明:此文为知云直译学习文档,详细请阅读原文。 

原文:https://arxiv.org/pdf/2104.14548

翻译摘要:

基于实例判别的自监督学习算法训练编码器对同一实例的预定义变换保持不变。虽然大多数方法将同一图像的不同视图视为对比损失的正值,但我们对使用数据集中其他实例的正值感兴趣。我们的方法,NearestNeighbor对比学习视觉表征(NNCLR),从潜在空间的数据集中采样最近的邻居,并将它们视为阳性。这提供了比预定义转换更多的语义变化。我们发现,在对比损失中使用最近邻为正可以显著提高ImageNet分类的性能,从71.7%提高到75.6%,优于以前最先进的方法。在半监督学习基准测试中,当只有1%的ImageNet标签可用时,我们显著提高了性能,从53.8%提高到56.5%。在迁移学习基准测试中,我们的方法在12个下游数据集中的8个上优于最先进的方法(包括使用ImageNet的监督学习)。此外,我们通过经验证明,我们的方法较少依赖于复杂的数据增强。当我们只使用随机作物训练时,我们看到ImageNet Top-1的准确率只相对降低了2.1%。

1. Introduction

        一个人如何理解一种新奇的感官体验?当人们看到新事物的照片时,比如一只渡渡鸟,他们的脑海里可能会闪过什么?即使没有被明确地告知渡渡鸟是什么,他们也可能会在渡渡鸟和其他类似的语义类之间形成联系;例如,渡渡鸟更像鸡或鸭,而不是大象或老虎。这种将新的感官输入与已有体验进行对比和比较的行为发生在潜意识中,并可能在人类如何能够交流中发挥关键作用[25]。在这项工作中,我们展示了如何在先前看到的示例中发现项目之间的相似性,从而提高自监督表示学习的性能。

【实例识别】一种特殊的自我监督训练——被称为实例辨别instance discrimination[11,33,60]——最近变得流行起来。鼓励模型对单个样本的多次变换保持不变。

在实例识别设置中,当向模型展示渡渡鸟的图片时,它通过训练来学习表征,以区分使特定渡渡鸟图像与训练集中其他所有图像不同的原因。在这项工作中,我们提出了一个问题:如果我们让模型也能找到与给定渡渡鸟图像相似的其他图像样本,它会导致更好的学习吗?

目前最先进的实例识别方法使用数据增强生成正样本。应用于同一样本的图像变换(例如随机裁剪)以获得同一图像的多个视图。


假设这些多个视图是正的,并且通过鼓励正的在嵌入空间中尽可能接近来学习表示,而不会崩溃到一个平凡的解决方案。然而,随机增强,如随机裁剪或颜色变化,不能为不同的视点、同一对象的变形,甚至为语义类中的其他类似实例提供正对。泛化的责任很大程度上取决于数据增强管道,它不能涵盖给定类中的所有差异。

关于最近邻对比学习:

我们通过鼓励同一样本的不同视图与其潜在空间中最近的邻居之间的相似性来学习我们的表示。通过我们的方法,视觉表征的最近邻对比学习(NNCLR),模型被鼓励推广到可能没有被手头的数据增强方案覆盖的新数据点。换句话说,嵌入空间中样本的最近邻充当了不是虚构的小语义扰动,即它们代表了数据集中的实际语义样本。我们在类似于[11,12]的对比学习环境中实现我们的方法。为了获得最近邻,我们利用支持集将数据集子集的嵌入保存在内存中。这个支持集也在训练期间不断得到补充。请注意,我们的支持集不同于内存库[55,60]和队列[13],其中存储的特征被用作负值。我们利用最近邻搜索的支持集来检索交叉样本阳性。图1给出了该方法的概述。

我们做出了以下贡献:
(i)我们引入了NNCLR来学习超越单实例阳性的自监督表示,而不依赖于聚类;

(ii)我们证明了NNCLR将对比学习方法(例如SimCLR[12])的性能提高了约3:8%,并且在ImageNet分类上实现了具有有限标签的线性评估和半监督设置的最先进性能;

(iii)在12个迁移学习任务中的8个上,我们的方法在自监督甚至监督特征(通过监督ImageNet预训练学习)上都优于最先进的方法;

(iv)我们表明,通过仅使用随机裁剪增强的NN作为正数,我们实现了73:3%的ImageNet精度。这减少了自我监督方法对数据增强策略的依赖。

 2. Related Work

2.1 自监督表示学习

自监督表示学习旨在从原始数据中获得样本的鲁棒表示,而不需要昂贵的标签。

        该领域的早期方法侧重于定义pre-text任务——通常涉及在具有大量弱监督标签的域上定义代理任务,如预测图像的旋转[27],图像中补丁的相对位置[17],或跟踪视频中的补丁[49,58]。编码器被训练来解决这样的pre-text任务,期望学习一般的特征,这些特征可能对其他需要昂贵注释的下游任务有用(例如图像分类)。
        一大类自监督学习技术是那些使用对比损失的技术,它已被广泛用于计算机视觉应用。这些方法学习一个潜在空间,将正样本聚集在一起(例如视频序列中的相邻帧),同时将负样本分开(例如来自另一个视频的帧)。在某些情况下,这也可能没有明确的否定[28]。最近,一种名为实例辨别的对比学习变体[11,13,20,60]已经取得了相当大的成功,并在各种下游任务中取得了显著的表现[8,11,12,13]。他们在很大程度上缩小了监督学习的差距。许多技术已被证明在这一追求中是有用的:数据增强,对比损失[11,12,33],动量编码器[13,28,33]和存储库[13,55,60]在这项工作中,我们将实例判别扩展到包括非平凡的阳性,不仅在同一图像的增强样本之间,而且在不同图像之间。使用原型/聚类[1,3,6,7,8,26,36,59,62,63,64,66]的方法也试图通过将多个样本与同一聚类相关联来学习特征。然而,我们不是聚类或学习原型,而是维护一个图像嵌入的支持集,并使用该集的最近邻来定义正样本。

2.2 Queues and Memory Banks

队列和内存库[Queues and Memory Banks]:

【与MOCO的区别】在我们的工作中,我们在训练中使用支持集作为记忆。它被实现为类似于MoCo的队列[33]。MoCo使用队列中的元素作为负值,而这项工作使用队列中的最近邻居在对比损失的背景下找到正值。[60]使用内存库[Memory banks]来保持数据集中所有样本嵌入的运行平均值。 

        在我们的工作中,内存的大小是固定的并且独立于训练数据集,我们也没有在我们的潜在嵌入空间中执行任何聚合或聚类。SwAV[8]不是存储库,而是存储用于聚类嵌入的原型中心。SwAV的原型中心是通过Sinkhorn聚类的训练来学习的,并在整个预训练过程中持续存在。与[8,60,66]不同的是,我们的支持集不断地更新新的嵌入,并且我们不维护嵌入的运行平均值。

2.3 计算机视觉中的近邻

        从图像检索到无监督特征学习,最近邻搜索已经成为广泛的计算机视觉应用中的重要工具。最近邻查找作为一种中间操作,在图像对齐[54]和视频对齐[21]任务中也很有用。[54]提出了一种方法,通过使用来自同一物体的其他图像的最近邻,以无监督的方式学习物体上的地标,而[21]通过使用相同动作的视频中的软最近邻,展示了动作阶段的无监督学习。在我们的工作中,我们也使用跨样本最近邻,但在具有许多类别对象的数据集上进行训练,目的是学习可转移特征。与我们的工作相关,[30]使用最近邻检索来定义跨不同模式(例如RGB和光流)的视频表示学习的自我监督。相比之下,在这项工作中,我们在单一模态(RGB图像)中使用最近邻检索,并且我们维护了一个明确的先验嵌入支持集以增加多样性。

        [2]同时提出利用嵌入空间中的最近邻来改进使用BYOL的自监督表示学习[28]。作者建议使用一个附加的术语来表示BYOL损失的最近邻。相反,在我们的公式中,所有的损失项都使用最近邻。

3. Approach—最近邻对比学习(NNCLR)

我们首先在实例识别的背景下描述了对比学习(即InfoNCE损失),并讨论了SimCLR[11]作为该领域的主要方法之一。接下来,我们介绍了我们的方法,视觉表征的最近邻对比学习(NNCLR),它提出使用最近邻(NN)作为正数来改进对比实例识别方法。

3.1 Contrastive instance discrimination(对比实例识别)

InfoNCE损失(即对比损失)在实例识别中非常常用。对于任何给定的嵌入样本,我们也有另一个正嵌入(通常是样本的随机增加),以及许多负嵌入。那么,InfoNCE的损失定义如下:

式中(zi, z + I)为正对,(zi, z−)为任意负对,τ为最大温度。其基本思想是学习一种表示,将正对在嵌入空间中拉到一起,同时分离负对。 

 SimCLR

SimCLR使用同一图像的两个视图作为正对。这两个视图是使用随机数据增强产生的,通过编码器馈送以获得正嵌入对。负对是使用给定小批量中的所有其他嵌入形成的。

形式上,给定一个小批图像,两种不同的随机增强(或视图)是对每张图像xi进行赋值,并通过编码器φ馈入得到嵌入,其中aug(·)为随机增广函数。编码器φ通常是带有非线性投影头的ResNet-50。那么SimCLR中使用的InfoNCE损失定义如下:

 注意,在损失中计算点积之前,每个嵌入都是l2归一化的。那么给定小批量的总损失为

 由于SimCLR仅依赖于同一样本上由预定义数据增强引入的转换,因此它不能链接可能属于同一语义类的多个样本,这反过来可能会降低其对类内较大变化保持不变的能力。接下来,我们通过介绍我们的方法来解决这一点。

 3.2. 最近邻对比学习

为了增加潜在表征的丰富性并超越单实例阳性,我们提出使用最近邻来获得更多样化的正对这就需要保留一组代表完整数据分布的嵌入支持。

SimCLR使用两个增广来形成正对。相反,我们建议使用zi在支持集Q中的最近邻来形成正对。在图2中,我们以示意图的方式可视化这个过程。与SimCLR类似,我们从mini-batch中获得负对,并利用InfoNCE loss(1)的变体进行对比学习。基于SimCLR目标(2),我们将NNCLR损失定义如下:

其中,NN(z;Q)为最近邻算子,定义如下: 

 与SimCLR一样,在loss(3)中计算点积之前,每个嵌入都经过l2归一化。类似地,我们在(4)中最近邻操作之前应用l2归一化。我们最小化mini-batch中所有元素的平均损失,以获得最终损失:

实现细节:

通过添加如下项:

,我们使损失对称。尽管如此,这并不影响性能的经验。此外,受BYOL[28]的启发,我们通过预测头g传递来生成嵌入。然后我们在(3)中使用而不是。使用预测MLP可以为我们的性能增加一点提升,如第4.4节所示。


支持集(Support set):

我们将支持集实现为一个队列(即:先进先出)。将支持集初始化为维数为[m,d]的随机矩阵,其中m是队列的大小,D是嵌入的大小。支持集的大小保持足够大,以便在嵌入空间中近似完整的数据集分布。我们在每个训练步骤结束时更新它,方法是从当前训练步骤中获取n个批大小(batch size)嵌入,并将它们连接到队列的末尾。丢弃队列中最老的n个元素。我们只使用来自一个视图的嵌入来更新支持集。使用两个视图的嵌入来更新不会导致下游性能的任何显著差异。在第4.4节中,我们比较了多个支持集变体的性能。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top Secret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值