A SURVEY ON CONTRASTIVE SELF-SUPERVISED LEARNING
Introduction
这里我们介绍一篇对比学习的综述文章。对比学习是最近非常热门的自监督表示学习方法,在很多的下游任务上都达到或超过了ImageNet预训练的效果。本文比较系统地总结了目前对比学习的几个常用的方法。文章地址:https://arxiv.org/abs/2011.00362。
在之前我们介绍的自监督表示学习方法中,pretext task的设计五花八门,从实验结果来看,都取得了一定的效果,但是和ImageNet预训练模型相比还是有差距。对比学习方法采用全新的pretext task,在性能上取得了大的提升。pretext task定义为:对于同一图像及其变体(叫做正样本,通常由数据増广获得)网络应该提取相似的特征,对于不同图像(叫做负样本,从数据集中重采样获得),网络提取的特征要尽量远离。该过程用下图表示:
如图,左上为原图,左下为经过数据増广之后得到的正样本,对于这两张图网络应该输出相似的特征,但是对于右边的两张图,应该输出不同的特征。我们通常使用余弦距离来衡量特征之间的相似性,假设原图及其正负样本分别记为
X
,
X
+
,
X
−
X,X^+,X^-
X,X+,X−,网络提取的特征记为
R
,
R
+
,
R
−
R,R^+,R^-
R,R+,R−,则特征之间的相似度记为:
s
i
m
(
R
,
R
+
)
=
R
T
R
+
∣
∣
R
∣
∣
.
∣
∣
R
+
∣
∣
sim(R,R^+)=\frac{R^TR^+}{||R||.||R^+||}
sim(R,R+)=∣∣R∣∣.∣∣R+∣∣RTR+
对比学习的损失函数可以记为:
L
=
s
i
m
(
R
T
,
R
+
)
s
i
m
(
R
T
,
R
+
)
+
∑
R
−
s
i
m
(
R
T
,
R
−
)
L=\frac{sim(R^T,R^+)}{sim(R^T,R^+)+\sum_{R^-}sim(R^T,R^-)}
L=sim(RT,R+)+∑R−sim(RT,R−)sim(RT,R+)
通过优化以上损失函数,可以得到预训练模型。尽管直接使用该方法也可以取得效果,但是很明显负样本的质量限制了该方法的性能。对于正样本,由于是经过数据増广得到的,所以在视觉上本来就很像。然而,由于数据集的规模很大,因为负样本的选择随机性太强,提升对比学习性能的关键是设计合理的负样本选取方法。
Architectures
根据当前方法的负样本生成原理,这篇文章将对比学习方法分为了四类:
下面对这几种方法进行简要的介绍,后续会单独详细介绍:
1) End-to-End
这种结构的方法代表作是hinton组的文章SimCLR。在这种结构下,算法中的所有模块都是可微的,并且参与反向传播。网络的详细图如下:
输入数据首先经过两次变换,得到2*N个数据,然后正样本之间求sim,其他的样本均为负样本。这种方法需要很大的batchsize。
2) Memory Bank
该方法使用一个在内存中的memory bank保存所有的
R
R
R,并且不同的
R
R
R在训练过程中会以滑动平均的方式更新,网络中直接输入的样本均为正样本,负样本从memory bank中取,所以不需要很大的batchsize
3) Momentum Encoder
Memory Bank尽管对batchsize的需求不大,但是却需要非常大的内存空间来保存特征。Momentum Encoder事何凯明提出的方法,通过构建一个队列来控制负样本的数量,通过设计动量encoder来保存网络历史的记录。
4) Clustering
聚类的方法将对比学习与聚类相结合,在训练的过程中,会动态的学到一个类别信息。