Advertisement

【论文笔记】【CVPR2020】 (MoCo) Momentum Contrast for Unsupervised Visual Representation Learning

阅读量:

本研究的主要作者包括Kaiming HeHaoqi FanYuxin WuSaining Xie以及Ross Girshick(注:以下链接指向其个人网页)。该论文荣获CVPR 2020最佳论文奖,并可通过https://github.com/facebookresearch/moco访问其代码实现。

0 Contrast Learning

0.1 Pretext Task

正样本之间拉近,负样本推远

对比学习的特点是灵活多变,在于只有当采用适当的方式去发现正样本与负样本时

Instance Discrimination

一张图像 X_i通过两种不同的变换手段生成新的图像(其中 {X_i}^1被称为anchor节点,{X_i}^2被称为positive节点),其他图像 X_j(其中i \neq j)则被视为负样本节点。

在这里插入图片描述

1 Intro

对比学习可被视为一种基于字典的查找机制。该动态字典由队列(queue)和移动平均编码器(moving-averaged encoder)构成。

在分类任务的结果中,在ImageNet上的分类任务(在线协议下)最多能达到与其相当甚至更好的水平。

重点在于,获得的表征能够有效地迁移至下游任务,在多个分割/检测任务中达到SOTA水平,并且优于现有的有监督预训练方法。

挖坑了MAE,自挖自填

dictionary look-up

将anchor的特征类似于query(用符号表示为q),而positive与negative的特征被视为key(用符号表示为k_0, k_1, \dots),使得qk_0之间的距离最小化

在这里插入图片描述

MoCo框架

在这里插入图片描述

使用queue和momentum的 好处

主要受到GPU显存的限制,在当前批处理队列中加入最新的minibatch后会将最早进入批处理队列的minibatch移除,并动态地维持整个字典表的状态以确保其长度不受batchsize的影响。为了确保key encoder输出的一致性,在更新encoder网络参数的过程中并引入了动量(momentum)项

2 Method

2.1 Contrastive Learning as Dictionary Look-up

对比学习可以被看成是训练一个encoder用于dictionary look-up任务。

假设存在一个编码查询q以及一组编码样本集合\{k_0, k_1, k_2, ...\}。假定仅存在一个键(k_+)与查询q匹配。那么损失函数在qk_+匹配时应较小,在与其他键匹配时也应较小。

InfoNCE

Noise Contrastive Estimation(NCE)通过实现从多类别到二类别的转换来有效缓解了Softmax计算上的难题。

但是如果只做二分类又好像不那么友好,所以提出了InfoNCE

在这里插入图片描述

这个温度参数τ会影响数据的分布情况。
其中,

  • τ是一个影响数据分布的关键超参数
  • K代表负样本的数量
  • 分母实际上是基于1个正样本和K个负样本(即dictionary中的所有键)构建的

其实InfoNCE就是一个( K+1)分类任务,目的就是把 q分类成 k_+

2.2 Momentum Contrast (MoCo)

在对比学习的过程中,dictionary是一个动态且不断演变的对象,key encoder则随着训练过程而不断进化。

学习到好的表征的前提是:

(1)、dictionary足够大,包含足够的负样本信息;

(2)、key encoder尽可能保持一致

基于以上动机,提出了MoCo:

2.2.1 Dictionary as a queue

用于扩大dictionary大小

将一个具有FIFO特性的queue当作一个dictionary使用,在这种情况下:
每当一个新的 batch 被加入到这个 queue 中时,
最老的那个 batch 就会被取出。
这样一来,
我们成功地将 batch 大小与 dictionary 大小进行了分离,
使得 dictionary 能够远远超过 batch 的数量,
从而能够持续地利用存在于队列中的键信息

在这里插入图片描述

2.2.2 Momentum update

由于字典规模较大,在借助反向传播机制进行更新时难以有效更新key encoder(因为梯度应当综合考虑队列中的所有关键点)

一种简化的策略是将query encoder的权重直接复制至key encoder;然而这种方法效果欠佳的原因在于key encoder更新过于迅速;因此引入了Momentum update机制:

在这里插入图片描述

仅限于反向传播算法中被使用的参数为θ_q
而另一个参数θ_k则采用基于动量的方法进行更新。
从而导致key encoder的整体变化幅度较小。

2.2.3 Relations to previous mechanisms

在这里插入图片描述

之前的对比学习策略主要受到字典规模和特征一致性的限制。

end-to-end

该方法确保了特征一致性的实现;然而并未解决字典大小的问题;并且字典大小被设定为批处理大小。

memory bank

这种方法解决了dictionary大小问题,但是在特征一致性上做的不好

MoCo

通过队列实现了字典规模的动态调整, 动量机制则有效提升了特征的一致性。这与记忆库模型存在相似之处

2.3 PseidoCode( ⭐)

在这里插入图片描述

很巧妙地使用全0的lebel去计算CE loss,因为正样本都在0-th的位置上

Pytorch CELoss

输出内容

3 Experiment

3.1 Linear Classification Protocol

在ImageNet上进行过预训练后,在固定权重的情况下仅用作特征提取器,并随后仅训练一个全连接层作为分类器。

Using the grid search algorithm, the optimal learning rate was found to be 30, which is uncommon, indicating that the feature distributions learned by unsupervised and supervised methods are quite distinct.


Ablation 1: contrastive loss mechanisms.

证明动态dictionary的方式有效

在这里插入图片描述

Ablation 2: momentun

在这里插入图片描述

证明momentun有效,说明一个稳定的key encoder是必要的


Comparison under the linear classification protocol on ImageNet.

在这里插入图片描述

3.2 Transferring Features

无监督学习的主要目标是学习可以迁移的特征

Normalization

通过应用BN技术对整个网络进行微调处理后,则能够采用有监督学习中常用的那些超参数设置(例如学习率等)。

3.2.1 Downstream task

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2.2 Summary

在绝大多数 downstream tasks中, MoCo表现出超越 supervised learning 的能力, 但在某些特定领域如 semantic segmentation 和 instance segmentation 中则表现平平.

填上了有监督和无监督预训练之间的gap。

而且,在更大规模的数据集中进行无监督学习训练能够实现更高的性能目标,并且这正是无监督预训练的核心目标。

Reference

官方教学视频
PyTorch官方文档
原始代码库

全部评论 (0)

还没有任何评论哟~