日期: 2023/12/10
论文: A Simple Framework for Contrastive Learning of Visual Representations
链接: SimCLR - PMLR
目录
SimCLR
正文
1 摘要翻译
这篇文章介绍了SimCLR:视觉表征对比学习的简单框架。我们简化了最近提出的自监督对比学习,而不需要专门的架构或menory bank。为了了解到是什么让对比学习学习到有用的表征特征,我们系统学习了该架构的主要部分:我们发现(1)数据增强的组合在定义有效的预测任务中起到了重要作用,(2)在表征特征和对比损失之间引入非线性可学习变化可以实在地提高可学习表征的质量,(3)与监督学习相比,对比学习受益于很大的batch sizes和更多的训练步骤。通过结合这些发现,我们可以在ImageNet上取得比先前的自监督和半监督方法更好的结果。一个在SimCLR上训练出来的特征上训练的线性分类层就能取得76.5%的top-1准确率,比之前的SOTA有了近7%的提高,且与监督ResNet50学习的表现相匹。当只在1%的数据上微调时,我们可以取得85.8%的top5准确率,少了100倍的标签但也比AlexNet要好。
2 介绍
自监督学习通常被分为两大主流:generative生成式和discriminative判别式。
【生成式与判别式】
- 生成式通常是computationally expensive且对于生成特征来说可能不是必要的。
- 判别式通常是使用目标函数(比如说比较一对pair的相似度,这就类似于比较预测值和真实值,然后使用对应的损失函数来进行优化)来训练,跟监督学习一样,不同之处在于输入和标签通常是来自unlabeled dataset。且该种方法多依赖于heuristics(启发式)来设计pretext task(代理任务),比如color jat、rotate、Jigsaw图像处理等,但这样可以能影响学习到的特征的泛化性,为什么?
- 对比学习方法是目前的主流方法且取得不错的效果。对比学习既通过不同images的数据增强来构建正负样本对,然后使用度量空间上的距离的损失函数来对encoder进行优化。
【通过对架构的学习,发现以下结论:】
- 数据增强的组合对于定义代理任务(proxy task)产生有效的特征是很重要的,且无监督学习相比于监督学习更受益于更强的数据增强。
- 引入了可学习非线性变换,可以提升学习到的特征的质量。
- contrastive cross entropy loss受益于normalized embedding和温度参数。
- 对比学习受益于很大的batch size和很长时间的训练,同时也受益于很深很宽的深度学习网络(监督学习也一样)
【结果】
结合以上发现,取得了自监督和半监督的SOTA。在linear evaluation protocol下,SimCLR取得了76.5%的TOP-1准确率(提高7%); 用1%数据进行微调,取得了85.8%的TOP-5准确率(提高10%); 当在其他自然图像上去微调,SimCLR可以在10/12个数据集上取得与baseline平等或更好的成绩。
这幅图主要得出两个信息:
- 只训练linear classifier就可以得到近70%的top-1 acc,说明SimCLR学习到的representation还是不错的。
- 随着number of parameters的增加,SimCLR的性能也在增长,这是件好事。可以用模型的参数量代替手工标注数据的麻烦,就让模型自己跑呗~
3 Method
3.1 对比学习框架
- 【数据增强】:包括random cropping followed by resize back to origin size, random color distortions和random Gaussian blur三种(这三种的效果最好),且做增强输出的一对图像表示同一张图像的两个相关视角,被视作是positive pair
- 【encoder】:编码器可以是很多种backbone,为了简便本文使用resnet作为encoder,既图中的 f ( ⋅ ) f(\cdot) f(⋅)
- 【non-linear projection】:既图中的 g ( ⋅ ) g(\cdot) g(⋅),对encoder的输出又做一次非线性变换,包括 z i = g ( h i ) = W ( 2 ) σ ( W ( 1 ) h i ) z_i=g(h_i)=W^{(2)}\sigma(W^{(1)}h_i) zi=g(hi)=W(2)σ(W(1)hi),其中 W W W表示MLP, σ \sigma σ表示ReLU函数。这样做的目的是使得模型优化学习到更好的representation。
- 【contrastive loss】:对比学习的目的是为了区分 x j x_j xj和 ( x k ) k ≠ j (x_k)_{k\not = j} (xk)k=j,以下是进一步讨论
1)余弦相似度(cosine similarity):
s
i
m
(
u
,
v
)
=
u
T
v
∣
∣
u
∣
∣
⋅
∣
∣
v
∣
∣
sim(u,v)=\frac{u^Tv}{||u||\cdot||v||}
sim(u,v)=∣∣u∣∣⋅∣∣v∣∣uTv
余弦相似度的含义:分子点积表示向量
u
,
v
u,v
u,v的相似度,如果是完全相等则值最大,如果是正交则值为0,如果是完全相反则值和最大值相反;分母是两个向量的模,目的是将similarity归一化到
[
−
1
,
1
]
[-1,1]
[−1,1]的范围。
在对比学习任务中,我们会希望正样本
s
i
m
→
1
sim\to1
sim→1,而负样本
s
i
m
→
−
1
sim\to-1
sim→−1
2)NT-Xent(infoNCE)
一个minibatch有
N
N
N个数据,做数据增强后有
2
N
2N
2N个数据。其中对于每一个数据,有
1
1
1个positive pair,和
2
(
N
−
1
)
2(N-1)
2(N−1)个negetive pairs。对于一个positive pair而言,既要计算
(
i
,
j
)
(i,j)
(i,j)也要计算
(
j
,
i
)
(j,i)
(j,i),其损失函数(NT-Xent (the normalized temperature-scaled cross entropy loss))定义如下:
l
(
i
,
j
)
=
−
l
o
g
e
x
p
(
s
i
m
(
z
i
,
z
j
)
/
τ
)
∑
k
=
1
2
N
1
[
k
≠
i
]
e
x
p
(
s
i
m
(
z
i
,
z
k
)
/
τ
l_{(i,j)}=-log\frac{exp(sim(z_i,z_j)/\tau)}{\sum_{k=1}^{2N}1_{[k\not =i]}exp(sim(z_i,z_k)/\tau}
l(i,j)=−log∑k=12N1[k=i]exp(sim(zi,zk)/τexp(sim(zi,zj)/τ)
损失函数的作用就是让其中的exp分数最大,也就是分子最大,分母最小,也就是让正样本对更靠近,负样本对互相远离,靠近和远离的指标就是similarity。
3)温度系数
τ
\tau
τ的作用
假设没有
τ
\tau
τ,那么此刻的loss function最小值为
−
l
o
g
e
x
p
(
1
)
e
x
p
(
1
)
+
∑
k
=
1
2
(
N
−
1
)
e
x
p
(
−
1
)
-log\frac{exp(1)}{exp(1)+\sum_{k=1}^{2(N-1)}exp(-1)}
−logexp(1)+∑k=12(N−1)exp(−1)exp(1),又
e
x
p
(
1
)
exp(1)
exp(1)和
e
x
p
(
−
1
)
exp(-1)
exp(−1)都是正数,且有
2
(
N
−
1
)
2(N-1)
2(N−1)个
e
x
p
(
−
1
)
exp(-1)
exp(−1),此刻的exp分数的最大值其实远远小于1,而我们的目的就是让分数接近于1,臣妾办不到怎么办,引入了温度系数。exp的增长并不是线性的,让分母和分子相似度都除以
τ
(
0.1
)
\tau(0.1)
τ(0.1),分子增长的要快很多,那么exp分数接近于1的可能性就增大了。温度系数的作用就这么个回事。
伪代码如下:
3.2 使用大batch size进行训练
- 使用batch size为4096训练100个epochs,优化器为LARS(无卵用)
- global BN,在训练期间整合所有设备的BN的mean和variance。这么做的目的就是positive pairs都是在同一个设备去计算,模型可能会发生局部信息泄露从而导致提高了准确率但是又没有学到好特征的情况。(无卵用)
3.3 评估协议
- 再多个数据集上进行linear evaluation protocol,既SimCLR主干网络冻结,只训练线性分类器,这样就能在下游任务上去评估学习到的特征到底是好是坏的了。
- 除此之外,也去和半监督学习的SOTA进行了对比
- 值得关注的default setting:
1)数据增强:random crop with resize(with random flip); color distortions; Guassian blur ;
2)使用ResNet50作为backbone,用2个MLP head投影特征到128维潜在空间
3)使用NT-Xent loss,使用LARS作为分类器,学习率为(=0.3*batch size/256)
4)linear warmup 10个epochs,且用cosine decay
4 Data augmentation
线性评估不同数据增强组合
- 使用控制变量的方法,既只对 t 1 t_1 t1做transformation, t 2 t_2 t2是一个identity,这样就能知道不同的数据增强组合的效果如何.
- 由Figure 5可见,color 和 crop的组合数据增强的效果是最好的。
- 且通过实验发现,单个数据增强的效果是远不如数据增强组合的效果,数据增强组合往往会让prediction task更难,就能学到更好的特征。
color distortion作用猜测
- figure 6就是一种猜测,猜测为什么只用random crop的效果不如random crop加上color distortion的效果好。猜测就是说,不同的区域的颜色分布其实是很相似的,以上左图就是不同images的四个patches的颜色直方图,颜色分布是很相似的,说明他们学到的特征其实也很相似,而我们并不需要给模型这么相似的特征,我们需要加大难度(有意义的难度)。加上color distortion之后颜色分布就不相似了。
数据增强难度对SimCLR和Supervised的影响猜测
- 无监督学习比监督学习更受益于更强的数据增强(color)
- 还发现,对于监督学习准确率没有啥好处的一些数据增强,对于无监督学习而言可能也是有帮助的。
5 Encoder和Head的模型架构
模型参数量与性能关系
- 这个图告诉我们,随着参数量的增大,监督学习的性能增长幅度可能不是很大。而无监督学习的性能增长幅度还是很大的。这是因为随着模型参数数量增大,且模型并不知道下游任务是什么,它存储的信息量是很大的。在做下游任务的时候,你可以想象是在做feature selection。
non-linear projection的作用
- 指标解释:直接使用 h ( i ) h(i) h(i)去进行预测就是None; 使用一个MLP降维后预测就是Linear; 使用MLP → \to →ReLU → \to →MLP降维后进行预测就是Non-linear‘’
- 由此图分析可得,使用non-linear projection heads是要比linear的好,可以分析得出结论说non-linear projection head 学习到的representation要好。
进一步解释non-linear projection学习到的特征
- 这张表是说,使用 h h h和使用 g ( h ) g(h) g(h)分别作为representation去训练额外的MLP进行预测得到的acc,可见 h h h还是保留了很多原始信息的(因为保留了很多原始信息所以得到的acc高),而 g ( h ) g(h) g(h)就没了很多原始信息。没有很多原始信息,这样就能使prediction task更难,才能学习到更好的representation。
- 但是做下游任务的时候这种非线性变化的关系并没有好处,做下游任务的时候要把这个non-linear projection head去掉。
6 Loss and Batch Size
不同loss的对比
- 没有仔细学习,但可以发现infoNCE是最好的
温度系数和L2 Norm对模型影响
- L2 Norm也就是余弦相似度,without L2 Norm表示简单的做点乘。
- 可见使用L2 norm要比不用好; 且调节 τ \tau τ的大小对模型性能的影响也很大(图上看最优为0.1)
- Contrastive acc不知道是什么
比较不同SSL方法的模型
- 上部分,可见在同等参数和backbone模型下,SimCLR取得的性能是远远好于其他的
- 下部分,可见SimCLR的方法在参数量比其他模型参数量少的情况下都可以取得不错的效果,增大参数量模型性能也会增长。
仅适用少数样本进行微调
- 1%数据上进行微调时,监督学习baseline弱爆了;
- SimCLR就很好,无论是1%or10%,不敢想象用100%数据微调的时候他是个多么快乐的模型。
transfer learning
- 做Linear evaluation时SimCLR和监督学习不相上下
- 做fine-tunued时,在大多数数据集上SimCLR是要更好的
- 注:SimCLR所使用的数据集是ImageNet ILSVRC-2012