系列文章目录
文章目录
- 系列文章目录
- 摘要
- 1.简介
- 2.相关工作
- 3.方法
- 3.1.作为字典查找的对比学习
- 2、
- 3、
- 五、
- 1、
- 2、
- 3、
- 六、
- 1、
- 2、
- 3、
- 七、
- 1、
- 2、
- 3、
- 八、
- 1、
- 2、
- 3、
摘要
我们提出了用于无监督视觉表示学习的动量对比(MoCo)。从对比学习[29]作为字典查找的角度来看,我们构建了一个带有队列和移动平均编码器的动态字典。这使得能够在运行中构建大的且一致的字典,其促进对比无监督学习。MoCo在ImageNet分类的通用线性协议下提供了具有竞争力的结果。更重要的是,MoCo学习到的表示可以很好地转移到下游任务中。MoCo可以在PASCAL VOC,COCO和其他数据集上的7个检测/分割任务中优于其监督的预训练对手,有时甚至远远超过它。这表明,在许多视觉任务中,无监督表示学习和监督表示学习之间的差距已经基本消除。
1.简介
无监督表示学习在自然语言处理中非常成功,例如,[12]如图所示,[50]和[51]的BERT [12]。但监督式预训练在计算机视觉中仍然占主导地位,而非监督式方法通常落后。原因可能源于它们各自的信号空间的差异。语言任务具有离散的信号空间(单词,子单词单位等)。用于构建标记化词典,无监督学习可以基于该标记化词典。相比之下,计算机视觉还涉及字典构建[54,9,5],因为原始信号处于连续的高维空间中,并且未被构造成用于人类通信(例如,不像字)。
最近的几项研究[61,46,36,66,35,56,2]提出了使用与对比损失相关的方法的无监督视觉表征学习的有希望的结果[29]。尽管这些方法受到各种动机的驱动,但它们可以被认为是构建动态词典。字典中的“关键字”(标记)是从数据(例如,并且由编码器网络来表示。无监督学习训练编码器执行字典查找:编码的“查询”应该与其匹配的关键字相似,而与其他关键字不相似。学习被表述为最小化对比损失[29]。
动量对比度(MoCo)通过使用对比损失将编码的查询q与编码的关键字的字典进行匹配来训练视觉表示编码器。字典关键字{k 0,k1,k2,…}由一组数据样本动态地定义。字典构建为一个队列,当前的小批处理入队,最早的小批处理出列,使其与小批处理大小分离。键由缓慢前进的编码器编码,由查询编码器的动量更新驱动。该方法能够实现用于学习视觉表示的大且一致的字典。
从这个角度出发,我们假设希望建立这样的词典:(i)大的并且(ii)在训练期间随着它们的发展而一致。直观地,较大的字典可以更好地采样底层连续的、高维的视觉空间,而字典中的关键字应该由相同或相似的编码器表示,以便它们与查询的比较是一致的。然而,使用对比损失的现有方法可能在这两个方面中的一个方面受到限制(稍后在上下文中讨论)。
我们提出了动量对比度(MoCo)作为一种构建大型一致字典的方法,用于具有对比度损失的无监督学习(图1)。我们将字典维护为数据样本的队列:当前小批量的编码表示被入队,最早的被出列。队列将字典大小与迷你批处理大小分离,从而允许它变得更大。此外,由于字典关键字来自前几个小批量,一个缓慢进展的关键字编码器,实现为基于动量的移动平均查询编码器,提出了保持一致性。
MoCo是一种为对比学习构建动态词典的机制,可以用于各种借口任务。在本文中,我们遵循一个简单的实例判别任务[61,63,2]:如果查询是编码视图(例如,不同的作物)相同的图像。使用这个借口任务,MoCo在ImageNet数据集中的线性分类的常见协议下显示了竞争结果[11]。
无监督学习的主要目的是预先训练表示(即,功能),可以通过微调转移到下游任务。我们发现,在与检测或分割相关的7个下游任务中,MoCo无监督预训练可以超过ImageNet监督预训练,在某些情况下,可以超过非平凡的边缘。在这些实验中,我们探索了在ImageNet或10亿张Instagram图像集上预训练的MoCo,证明MoCo可以在更真实的世界中工作,十亿张图像规模,以及相对未经策划的场景。这些结果表明,MoCo在很大程度上缩小了许多计算机视觉任务中无监督和有监督表示学习之间的差距,并且可以在几个应用中作为ImageNet监督预训练的替代方案。
2.相关工作
无监督/自我监督1学习方法通常涉及两个方面:借口任务和损失函数。术语“借口”意味着正在解决的任务不是真正感兴趣的,而是仅仅为了学习良好的数据表示的真正目的而解决的。损失函数通常可以独立于托词任务来研究。MoCo侧重于损耗函数方面。接下来我们就这两个方面的相关研究进行探讨。
损失函数。定义损失函数的常见方式是测量模型的预测与固定目标之间的差,诸如重构输入像素(例如,自动编码器),或者将输入分类为预定义的类别(例如,八个位置[13]、颜色箱[64])。如下所述的其它替代方案也是可能的。
对比损失[29]衡量的是样本对在一个表示空间中的相似性。在对比损失公式中,目标可以在训练期间动态变化,并且可以根据网络计算的数据表示来定义,而不是将输入与固定目标相匹配[29]。对比学习是最近几部关于无监督学习的著作的核心[61,46,36,66,35,56,2],我们将在后面的上下文中对此进行详细阐述(第第3.1段)。
对抗性损失[24]衡量的是概率分布之间的差异。它是一种广泛成功的无监督数据生成技术。在[15,16]中探讨了用于表征学习的对抗方法。在生成对抗网络和噪声对比估计(NCE)[28]之间存在关系(见[24])。
代理任务。提出了一系列广泛的借口任务。示例包括在某些损坏情况下恢复输入,例如,去噪自动编码器[58]、上下文自动编码器[48]或交叉通道自动编码器(彩色化)[64,65]。一些借口任务形成伪标签,例如,单个(“样本”)图像的变换[17]、块排序[13,45]、跟踪[59]或分割视频中的对象[47]、或聚类特征[3,4]。
对比学习与代理任务。各种借口任务可以基于某种形式的对比损失函数。实例判别方法[61]与基于范例的任务[17]和NCE [28]相关。对比预测编码(CPC)[46]中的托词任务是上下文自动编码[48]的一种形式,而在对比多视图编码(CMC)[56]中,托词任务与着色[64]相关。
3.方法
3.1.作为字典查找的对比学习
对比学习[29]及其最近的发展,可以被认为是训练编码器进行字典查找任务,如下所述。
考虑编码查询q和编码样本集
{
k
0
,
k
1
,
k
2
,
.
.
.
}
\{k 0,k1,k2,...\}
{k0,k1,k2,...}。是字典的关键字。假设在q匹配的字典中存在单个关键字(表示为
k
+
k_+
k+)。对比损失[29]是一个函数,当
q
q
q与其正键
k
+
k_+
k+相似而与所有其他键(被认为是q的负键)不相似时,该函数的值较低。通过点积衡量相似性,本文考虑了一种称为InfoNCE [46]的对比损失函数形式:
L
q
=
−
log
exp
(
q
.
k
+
/
τ
)
∑
i
=
0
K
exp
(
q
.
k
i
/
τ
)
\mathcal{L}_q=-\log\frac{\exp(q.{k_+}/\tau)}{\sum_{i=0}^K \exp(q.{k_i/\tau})}
Lq=−log∑i=0Kexp(q.ki/τ)exp(q.k+/τ)
其中
τ
τ
τ是根据[61]的温度超参数。总和是一个阳性样本和K个阴性样本的总和。直观地,该损失是试图将q分类为
k
+
k_+
k+的基于(K+1)路软极大值的分类器的对数损失。对比损失函数也可以基于其他形式[29,59,61,36],例如基于边际的损失和NCE损失的变体。
对比损失用作训练表示查询和密钥的编码器网络的无监督目标函数[29]。一般而言,查询表示是
q
=
f
q
(
x
q
)
q = f_q(x^q)
q=fq(xq),其中fq是编码器网络,
x
q
x^q
xq是查询样本(同样,
k
=
f
k
(
x
k
k = f_k(x^k
k=fk(xk))。它们的实例化取决于特定的借口任务。输入
x
q
x_q
xq和
x
k
x_k
xk可以是图像[29,61,63]、补丁[46]或包括一组补丁[46]的上下文。网络
f
q
f_q
fq和
f
k
f_k
fk可以是相同的[29,59,63]、部分共享的[46,36,2]或不同的[56]。