Momentum Contrast for Unsupervised Visual Representation Learning论文精读

image-20220320195135275
image-20220320195142212

本篇博文将要介绍大名鼎鼎的MoCo,不过在正式开始介绍MoCo之前,我想先介绍一下MoCo诞生的背景,方便对MoCo精髓之处的理解。

Birth of MoCo

Supervised Learning

在MoCo诞生之前,CV界的研究依然是以监督学习(Supervised Learning)为主,举个简单的例子,图像分类任务,我们在许多标注好标签的数据上(如下图),训练一个分类器(ResNet)。

image-20220320195459625
ResNet 去除Affine层
image-20220320195601186 image-20220320195620225

训练好这个分类器之后,我们可以去除掉最后一层的Affine层,这样就得到了一个特征提取器,就拿ResNet-18举例,去除Affine层之后,得到的输出是一个512维的向量。我们可以用这个预训练好的模型,当做一个特征提取器,在很多的下游任务(Downstrem Task),比如检测、分割、人体关键点检测中使用。

Contrastive Learning

如何使得这个特征提取器提取到的特征更加具有代表性(discriminative),对比学习应运而生。在这里,简单解释一下对比学习。

  • 朴素的

    image-20220320200654114

上图中有两个人,一只小狗,分别送入M这个模型中得到他们对应的特征向量f1,f2,f3,我们希望f1,f2尽可能的相近,因为二者的语义信息比较类似,同时与f3尽可能的远。

  • 专业的

image-20220320201105243

Anchor:基准点,Positive:正样本;Negative:负样本。这里模型的一般步骤是,将Anchor送入M11这个模型,正负样本都送入M12这个模型得到对应的特征向量,然后送入一个LossFuntion进行一个惩罚,因此模型得到了训练。论文Related Work中提到的主要有这三类。

image-20220320202001817

不过这也并不是今天介绍的重心,下面要着重介绍MoCo是如何通过无监督的动量对比学习方法去训练一个特征提取器的。

MoCo

Dictionary

首先说明一下,MoCo认为对比学习可以看做是一个构建一个离散词典方法,这个词典是动态的,并且随机采样的。

Momentum Contrast From the above perspective, contrastive learning is a way of building a discrete dictionary on high-dimensional continuous inputs such as images. The dictionary is dynamic in the sense that the keys are randomly sampled, and that the key encoder evolves during training.

这句话我结合原文的理解大致如下:

image-20220320202916600

MoCo将fA看做是字典的一个queryfp,fx2,fx3...fxn,看做是字典的key

image-20220320203307522

那么就可以简单地整合成如下的样式:

q{k1,k2,...kn}

q就是fAk1正样本对应的特征向量,k2....kn对应负样本的特征向量。下面我们将以字典的视角来介绍MoCo这个方法做了什么,其中公式(1)会反复提及。

如上所述,我们构建了一个字典,同时还记得我们之前最初的愿望吗,我们希望我们的模型提取到的特征能够更加discriminative

那么正如论文所说,我们对字典的提出了如下两个要求:

1.The dictionary should be Large

2.Consistent: keys in the dictionary should be represented by the same or similar encoder so that their comparisons to the query are consistent.

之后文中指出,以往的基于对比学习的学习方法,都或多或少地被如上两点限制了。

Limits of the early learning method

image-20220320204547886

如上图所示,作者将早期的学习方法分为了三类。这里简单介绍一下(a)end-to-end,它保证了字典key一致性,但却无法实现大字典。

q{k1,k2,...kn},所有的k都来自同一个编码器(consistent),但是由于显存的限制,使得输入的xk的数量无法太多,比如xk是图片的时候。(b)memory bank方法与a相反,可以实现大字典,但却牺牲了一致性。

image-20220320205502565

那么基于MoCo对比的学习方法,是如何二者兼得的呢?

Introduction

MoCo使用一个queue,实现large dictionary;Momentum update实现key encoder的更新。不过由于MoCo本质上是一种学习的方法,所以论文中并没有给出一个结构图,取而代之的是作者给出了MoCo的伪代码去帮助我们理解。

  • loss function of MoCo

    image-20220320211438306

q{k+,k1,...kK}Lq=logexp(qk+/τ)i=0Kexp(qki/τ)

是不是有点眼熟?这个和交叉熵损失函数长得差不多。其中τ是一个超参数,可以先不用管它。

改写成写成如下形式(便于理解):

q{k+,k1,...kK}Lq=logexp(qk+)i=0Kexp(qki)

再拆分一下,就得到了一个Softmax分类器。

softmax(si)=esij=1Nesj(i=1,,N)

因此这个地方作者最终把问题看做了一个K+1类的分类问题,损失函数希望qk+尽可能地接近,转换到分类的视角也就是loss函数希望k+对应位置的概率最大。

Pseudocode

image-20220320212126758

动量更新Key encoder

θkmθk+(1m)θq

Results

image

作者做了一些实验,证明了基于MoCo的无监督学习方法效果更好,同时得到的预训练模型在一些下游任务上也能取得不错的效果。

image-20220320212806145

image-20220320212819147

但是MoCo也并不是在所有的任务上都超越了前人,他更像是打通了有监督学习和无监督学习的壁垒。
image

Summary

  • Use Queue and Momentum update to create a large and consistent dictionary.

  • MoCo largely closes the gap between unsupervised and supervised representation learning in many computer vision tasks.

​ 使用大量的无标签的图片进行无监督训练提供了可能。

  • 设置新的代理任务是否能帮助模型性能提升,当图片数量从百万级到千万级时,性能提升不明显。

    MoCo’s im-provement from IN-1M to IG-1B is consistently noticeable but relatively small, suggesting that the larger-scale data may not be fully exploited. We hope an advanced pretext task will improve this. Beyond the simple instance discrimination task [61], it is possible to adopt MoCo for pretext tasks like masked auto-encoding, e.g., in language [12] and in vision [46]. We hope MoCo will be useful with other pretext tasks that involve contrastive learning.

  • 无监督学习方法与有监督训练得到的预训练模型在参数分布上可能有很大不同,比如当MoCo训练得到的预训练模型在向ImageNet的图像分类任务扩展时,学习率居然要设置为30才能奏效。

posted @   CuriosityWang  阅读(271)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示

请作者喝杯咖啡