无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读

目录

  • MoCo论文:《Momentum Contrast for Unsupervised Visual Representation Learning》
    • 基础概念了解
      • 1、无监督、有监督与自监督学习
      • 2、对比学习
      • 3、pretext task
    • Abstract
    • Introduction
    • Method
      • 1、Contrastive Learning
      • 2、Momentum Contrast
        • 2.1 Dictionary as a queue
        • 2.2 Momentum update
      • 2.3 Pretext Task
    • Experiments
      • 1、实验效果
      • 2、消融实验
    • Discussion and Conclusion

MoCo论文:《Momentum Contrast for Unsupervised Visual Representation Learning》

无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第1张图片

论文地址: Momentum Contrast for Unsupervised Visual Representation Learning
代码:MoCo—github

作者:何凯明(巨巨巨~~~~巨佬,着实佩服亿整年以及另外4个大佬。
期刊/会议:CVPR2020

基础概念了解

1、无监督、有监督与自监督学习

  是否有监督,就看输入数据是否有标签(label)。输入数据如果有标签则为有监督学习;否则为无监督学习(Unsupervised Learning)。深度学习领域的模型一般先通过一些Backbone来进行数据的特征提取,然后再将提取到的Feature送入下游任务(如检测和分割等)。Backbone之所以能够有效提取特征是因为研究者将其事先在ImageNet等有标签的大型数据集上进行了预训练。但如果面对没有大量标注数据的情况,该怎么去处理它呢?因此自监督学习(self-supervised)被用来解决这个问题。它旨在对于无标签数据 ,通过设计前置任务(pretext tasks) 来挖掘数据自身的表征特性并以此作为监督信息(这里获取的监督信息不是指自监督学习所面对的原始任务标签,而是构造的前置任务标签),来提升模型的特征提取能力。无标签数据和辅助信息是自监督学习的两个关键词。

2、对比学习

  顾名思义,对比学习就是把不同的东西放在一起来对比着学习。例如,现在有很多张图片,我们使用模型进行对比学习,在模型对比学习的过程中,模型并不需要知道这些图片分别代表着什么,分别属于什么类,它只需要知道哪些图片类似,和另外哪些图片不类似即可。通俗来讲,我们将这些图片一起输入到编码器中分别得到它们的特征,然后最后学到的特征信息全部映射到一个特征空间内,我们希望类似的图片的特征信息在特征空间内是彼此靠近的,不类似的则彼此远离,这就是对比学习。

3、pretext task

  就拿上面那个对比学习的例子来说吧,即使我们不需要知道这些图片分别是什么(属于什么类),也就是我们不需要知道这些图片的标签信息。但是我们需要知道哪些图片相似,哪些图片不相似,这意味着其实还需要使用标签信息,但是通过去设计一些代理任务(pretext task)比如说常见的instance discrimination代理任务(个体类别,每个数据样本自成一类),去定义一些规则比如说哪些图片类似哪些不类似,从而提供一个监督信号去训练模型,这就是自监督学习。

Abstract

  本文提出了用于无监督视觉表征学习的动量对比(MoCo)。从对比学习作为字典查找的角度来看,论文构建了一个带有队列移动平均编码器的动态字典。这使得能够动态构建一个大型一致的词典,从而促进对比无监督学习。MoCo在ImageNet分类的linear protocol下提供了能与其他方法竞争的结果。更重要的是,MoCo学习到的表征能很好地传递给下游任务。MoCo在PASCAL VOC、 COCO和其他数据集上的7项检测/分割任务上优于其受监督的预训练对手,有时甚至远远超过它。这表明,在许多视觉任务中,无监督和有监督表征学习之间的差距已基本消除。
  这里的linear protocol解释下:先预训练好一个backbone网络,然后把它用于不同的数据集上时,把它的backbone给冻住,只去学习它最后的那个全连接层(分类头),这样就相当于把预训练的模型当作一个特征提取器,只从它抽取特征,间接的证明预训练好的模型的特征学习的好坏。
移动平均编码器:通过使用moving-averaged encoder来让字典的特征尽量保持一致。后面会继续讲到。

Introduction

  无监督方法的性能不如有监督的原因:可能源于它们各自信号空间的差异。NLP有离散的信号空间(单词、子单词单元等),用于构建tokenized词典,无监督学习可以基于此(token可以看作一个特征,无监督学习可以把字典里的keys看作类别,这样就有类似于标签去帮助建模及训练)。相比之下,计算机视觉更关注词典构建,因为原始信号位于一个连续的高维空间中,它不像单词那样有很强的语义信息且简洁,因此对于视觉来说并不适合去建立这种字典。因此导致无监督学习不是那么容易去建立模型,使在视觉方面无监督性能不如有监督方法。
  另外,作者总结最近的对比学习论文都是在做一个动态字典。如下图:首先将某张图片基于裁剪或者其他数据增广得到两张,其中一个视为基准,则另一个就是它的正样本,至于其他的图片就全是它的负样本。这就是使用较多的pretext task—instance discrimination的方法。然后我们将这些图片分别输入到编码器(图中E11、E12)中,分别得到特征f11…fn,把基准的特征看作q,其他的分别是key放入字典,这样就是使q和k做运算来找到它们之间相似关系。在论文里作者不再使用anchor、正负样本这些字词,而是使用Xq、Xk、k0、k1…kn来代替。
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第2张图片
  较大的字典可以更好地对底层连续的高维视觉空间进行采样,而字典中的键(keys)应该由相同或类似的编码器表示,以便它们与查询的比较是一致的。第一,key越多,字典的视觉特征就越丰富,q就可以和k做对比,就容易学到那些更本质的把物体区别开的特征。第二,使用不同的编码器来生成key的话,容易使q找到和它使用类似或者相同的编码器的key,而不是找到那些和q语义信息相同或相似的keys。
  另外,将字典维护为一个数据样本队列:当前mini-batch的编码表示被排队,旧的表示在队列中。队列将字典大小与mini-batch大小分离,从而允许字典大小变大。此外,由于字典密钥来自前面的几个小批量,为了保持一致性,还提出了一种缓慢进行的密钥编码器,作为基于动量的查询编码器移动平均来实现。
  无监督/自我监督的学习方法通常包括两个方面:pretext task和损失函数。术语“pretext”意味着所解决的任务不是真正感兴趣的,而是为了学习良好的数据表示的真正目的而解决的。损失函数通常可以独立于pretext任务进行调查。MoCo侧重于损失功能方面。

Method

1、Contrastive Learning

  对比损失用来衡量表征空间中样本对的相似性,而对抗性损失用来衡量概率分布之间的差异。
  考虑一个编码查询q和一组编码样本{k0,k1,k2,…},这些样本是字典的keys。假设字典中有一个与q匹配的键(表示为k+)。对比损失是一个函数,当q与其正键k+相似且与所有其他键(被认为是q的负键)不同时,其值较低。通过点积来衡量相似性,本文使用了一种称为InfoNCE的对比损失函数(图左):
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第3张图片
其中,其中τ是温度超参数,用来控制分布的形状,比较像知识蒸馏的操作。因此论文中的对比损失函数有点综合了使用交叉熵、蒸馏学习和SoftMax的思想。
  调节超参数τ的影响:①如果把τ调大,那么所有的分布的值都将变小,经过exp之后更小,导致分布的形状更加平缓,也就是说对比损失对所有负样本一视同仁;②相反如果调小,大的更大,最终导致分布形状更加陡峭,也就是让模型只关注那些特别困难的样本。但是有些负样本又有可能是正样本,如果模型过度关注这些困难的样本可能导致模型不好收敛或者学好的特征泛化能力不强。所以对τ的取值既不能太大也不能太小。
K是负样本的数量。我们去掉里面的超参数τ再看整个损失函数(上面右图),其实就是一个交叉熵损失函数,此时的K指的是数据集里一共拥有的类别总数。实际上,这个infoNCE损失函数做的就是一个(k+1)的分类任务,并想把分成q分成类k+
  编码器网络:对比损失作为一个无监督的目标函数,用于训练表示查询和密钥的编码器网络。通常,查询表示为q=fq(xq),其中fq是编码器网络,xq是查询样本(同样,k=fk(xk))。输入的xq和xk可以是图像images、patches或包含一组patches的上下文。编码器网络fq和fk可以相同、参数部分共享或不同的一种。
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第4张图片
上图是三种对比损失机制的比较。
(a)用于计算q和keys表示的编码器通过反向传播进行端到端更新(两个编码器可能不同)。但是它的局限性在于字典的大小,因为在端到端的学习中字典的大小和mini-batch的大小是等价的,如果字典大小要很大的话那么mini-batch也就很大,对硬件要求太高(如SimCLR)。优点是编码器可以实时更新使字典中的keys是高度一致的;(b)所有数据都存在memory bank中,keys表示从memory bank中随机采样形成字典。等待左边的编码器与字典中的keys计算出loss之后更新编码器,memory bank会用这个更新的编码器在对应的位置上去生成对应的特征。这样就牺牲了keys的一致性(局限在于keys的一致性);©MoCo通过momentum更新编码器对新keys进行动态编码,并维护keys队列(图中未显示),也就是提供了一个又大又一致性的字典。

2、Momentum Contrast

  因为keys是随机抽样的,所以字典是动态的。编码器在训练过程中也是不断的改变进化的。作者的假设是好的特征可以通过一个包含大量负面样本的大型字典来学习,且字典的keys(或编码器)尽可能保持一致,尽管它在不断进化。基于这一动机,论文提出了动量对比。

2.1 Dictionary as a queue

  方法的核心是将字典作为数据结构中的队列进行维护。这使我们能够重复使用前一个mini-batch中的keys。队列的引入将字典大小与mini-batch大小分离。我们的字典大小可以远远大于典型的mini-batch大小,并且可以灵活地独立设置为超参数。字典中的样本(keys)逐渐被替换。当前的mini-batch将排入字典队列,并删除队列中最旧的mini-batch。字典始终代表所有数据的采样子集,而维护字典的额外计算是可管理的。此外,删除最旧的mini-batch可能是有益的,因为它的keys是最过时的,因此与最新的keys最不一致。

2.2 Momentum update

  使用队列可以使字典变大,但也会使通过反向传播(梯度应该传播到队列中的所有样本)来更新keys变得困难。一个简单的解决方案就是从查询编码器fq复制keys编码器fk,忽略这个梯度。但这种解决方案在实验中产生的结果很差。作者认为这种失败是由快速变化的编码器造成的,编码器降低了keys表示的一致性。作者提出了一个动量更新来解决这个问题。
在这里插入图片描述
其中m∈[0,1)。只有参数θq通过反向传播进行更新。公式中的动量更新使θk比θq更平滑地演化。因此,尽管队列中的keys是由不同的编码器(在不同的mini-batch中)编码,但这些编码器之间的差异可以很小。在实验中,相对较大的动量(例如,m=0.999,默认值)比较小的动量(如m=0.9)工作得更好,这表明缓慢演化的keys编码器是利用队列的核心

2.3 Pretext Task

  论文中使用的pretext task就是上面已经介绍过的instance discrimination。该pretext task的伪代码如图:
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第5张图片

Experiments

1、实验效果

在ImageNet上效果:
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第6张图片
在COCO上微调的目标检测和实例分割后实验效果:IN-1M是imagenet数据集,IG-1B是facebook自己的数据集,大概10亿个数据。
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第7张图片
MoCo vs.ImageNet监督预培训,针对各种任务进行微调。
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第8张图片

2、消融实验

不同对比损失机制的对比:
无监督对比学习论文Momentum Contrast for Unsupervised Visual Representation Learning阅读_第9张图片
不同动量更新参数m的对比:
在这里插入图片描述

Discussion and Conclusion

  我们的方法在各种计算机视觉任务和数据集中显示了无监督学习的积极结果。有几个悬而未决的问题值得讨论。MoCo从IN-1M到IG-1B的改进一直很明显,但相对较小,这表明更大规模的数据可能没有得到充分利用。我们希望高级pretext task将改善这一点。除了简单的实例识别任务,还可以采用MoCo来执行诸如masked auto-encoding的pretext task。我们希望MoCo能对其他涉及对比学习的借口任务有所帮助。
最后,不得不再由衷的佩服一下何大神,最后提出来的这个想法就是在2021年的论文MAE得到了实现。

你可能感兴趣的:(论文阅读,计算机视觉,目标检测,深度学习)