SimCLR v1 文献研究 [自监督学习]
✅ 个人简介:
南京邮电大学,Linyong Wang,计算机科学与技术,在读本科,
文章目录
- Ⅰ. Abstract
- Ⅱ. Introduction
- Ⅲ. Method
- Ⅳ. Experiments
- 4.1 实验结果①——好的“数据增强组合”对学习好的表征很重要[Composition of data augmentation operations is crucial for learning good representations]
- 4.2 实验结果②——“对比学习”需要有比“监督学习”更丰富的数据增强[Contrastive learning needs stronger data augmentation than supervised learning]
- 4.3 实验结果③——具有更大模型的无监督对比学习更有效[Unsupervised contrastive learning benefits (more) from bigger models]
- 4.4 实验结果④——非线性的“投影头”提高了“前一层”的表征质量[A nonlinear projection head improves the representation quality of the layer before it]
- 4.5 实验结果⑤——温度可调的归一化交叉熵损失比其他方法效果更好[Normalized cross entropy loss with adjustable temperature works better than alternatives]
- 4.6 实验结果⑥——对比学习能从大批量和长时间的训练中获益(更多)[Contrastive learning benefits (more) from larger batch sizes and longer training]
- Ⅴ. Comparison with State-of-the-art | Related Work
- Ⅵ. Discussion and Conclusion
- ▶本文参考附录

Ⅰ. Abstract
● 主要理论贡献: 提出了一个简单的视觉表征对比学习框架 —— SimCLR。【后面将深剖它】
● 实验结果:SimCLR v1 能够在 ImageNet 上优于以前的自监督和半监督学习方法。【如下图所示】根据 SimCLR 学习的自监督表示法训练的线性分类器达到 76.5% 的 top-1 精度,这比以前的最先进水平相对提高了 7%,与有监督的 ResNet-50 的性能接近。当仅对 1% 的标签进行微调时,我们达到 85.8% 的 top-5 精度,与 AlexNet 相比需要更少的标签(前者所需数量是后者的1/100)。

Ⅱ. Introduction
● Introduction(前言) 是 Abstract(摘要) 的一个扩展。
● 在这篇论文中,他们介绍了一个简单的视觉表征对比学习框架 —— SimCLR,它的结构简单,不需要特殊结构和『存储库(memory bank)』。
● 为了让我们理解是什么促成了良好的『对比表征学习( contrastive representation learning)』,他们系统地研究了该框架的主要组成部分,并展示出以下情况:
① 多个『数据增强(data augmentation)』操作对于产生有效的『表征(Representations)』起着重要作用。此外与有监督学习相比,无监督的『对比学习(Contrastive Learnin)』方法能从大型的『数据增强(data augmentation)』中收益更大。
② 通过在『表征(Representations)』和『对比损失(contrastive loss)』之间引入一个可学习的『非线性转换(nonlinear transformation)』,能大幅度的提高了表征学习的质量。
③『归一化(normalization)』的引入和适当调整的温度参数 τ τ τ 能有利于基于『对比交叉熵损失(contrastive cross entropy loss)』的『对比学习(Contrastive Learnin)』。
④ 与监督学习相比,『对比学习(Contrastive Learnin)』能从 “大批量和大训练” 收益更多。
Ⅲ. Method
3.1 模型训练框架——对比学习框架[The Contrastive Learning Framework]
● SimCLR 通过在『隐藏空间(latent space)』中进行『对比损失(contrastive loss)』,使相同数据样本的不同增强视图之间的一致性最大化,从而学习『表征(representations)』。【它的演示图如下】

◆ 说明:【SimCLR 包含以下 4 个主要成分】
① 一个随机数据增强模块:它能随机地变换给定的数据实例
x
x
x,使同一个例子产生两个对应的『视图(view)』,分别用
x
~
i
\tilde{x}_i
x~i 和
x
~
j
\tilde{x}_j
x~j 表示,我们认为这是一对『正样本对(positive pair)』。在这项工作中,他们依次采用了三种简单的数据增强手段:『随机剪裁(Random Crop)』然后调整回原始大小、『随机颜色失真(Random Color Distortion)』以及『高斯模糊(Gaussian Blur)』。
② 基础编码器 f ( ⋅ ) f(·) f(⋅):它是一个神经网络。它从增强后的数据样例中提取『表征向量(representation vectors)』。他们说 SimCLR 框架允许在不受限制的情况下可以选择各种(神经)网络架构。他们采用的是常用的 ResNet。上图中的 h i h_i hi 和 h j h_j hj 就是 x ~ i \tilde{x}_i x~i 和 x ~ j \tilde{x}_j x~j 分别经过 f ( ⋅ ) f(·) f(⋅) 运算后得到的『表征(Representation)』。也就是说: h i = f ( x ~ i ) = R e s N e t ( x ~ i ) h_i=f(\tilde{x}_i)=ResNet(\tilde{x}_i) hi=f(x~i)=ResNet(x~i),其中 h i ∈ R d h_i∈\mathbb{R}^d hi∈Rd 是『平均池化层(average pooling layer)』之后的输出
③ 投影头 g ( ⋅ ) g(·) g(⋅):它是一个小型的神经网络。它能将『表征(Representation)』映射到『对比损失(contrastive loss)』的空间。我们使用一个具有单层隐藏层的 MLP 来获得: z i = g ( h i ) = W ( 2 ) σ ( W ( 1 ) h i ) z_i=g(h_i)=W^{(2)}σ(W^{(1)}h_i) zi=g(hi)=W(2)σ(W(1)hi),其中 σ σ σ 是非线性的 ReLU。且他们在实验中发现, z i z_i zi 比 h i h_i hi 从『对比损失(contrastive loss)』中获益更多。
④ 对比损失函数:即一个专门为『对比预测任务(contrastive prediction task)』定义的对比损失函数,他能在给定一个包括一对『正例对(positive pair)』时,比如包含 x ~ i \tilde{x}_i x~i 和 x ~ j \tilde{x}_j x~j 的集合 { x ~ k } \{ \tilde{x}_k \} {x~k},它的最终目标是:在给定 x ~ i \tilde{x}_i x~i 的情况下,尽可能地识别出 x ~ j \tilde{x}_j x~j, { x ~ k } k ≠ i \{ \tilde{x}_k \}_{k≠i} {x~k}k=i。
● 他们随机抽取了
N
N
N 个小样本,并定义了基于该『小批量(minibatch)』样本(即
x
~
i
\tilde{x}_i
x~i)生成的增强样本对(即
h
~
i
\tilde{h}_i
h~i)的『对比预测任务(contrastive prediction task)』,得到
2
N
2N
2N 个『数据点集(data points)』。他们并没有明确列举负例,相反,他们另外用也在该『小批量(minibatch)』中的
2
(
N
−
1
)
2(N-1)
2(N−1) 个增强样本来作为负例。(比如说,若
N
=
3
N=3
N=3,假设这 3 个小样本分别是
x
、
y
、
z
x、y、z
x、y、z”,那么它们一起经过 “两路的” 数据增强,将会分别得到两个集合
{
x
i
、
y
i
、
z
i
}
\{ {x}_i、{y}_i、{z}_i \}
{xi、yi、zi} 和
{
x
j
、
y
j
、
z
j
}
\{ {x}_j、{y}_j、{z}_j \}
{xj、yj、zj},这两个集合由分别经过 “各自那条路的
f
(
⋅
)
f(·)
f(⋅)”,得到
{
h
x
i
、
h
x
i
、
h
z
i
}
\{ {hx}_i、{hx}_i、{hz}_i \}
{hxi、hxi、hzi} 和
{
h
x
j
、
h
y
j
、
h
z
j
}
\{ {hx}_j、{hy}_j、{hz}_j \}
{hxj、hyj、hzj},注意我写 “
h
x
hx
hx” 表达的意思是来自于
x
x
x 的表征
h
h
h。 然后对于 “
h
x
i
{hx}_i
hxi 和
h
x
j
{hx}_j
hxj” 来说,它两个就是『正例对(positive pair)』,而其余的 “
h
y
i
{hy}_i
hyi、
h
y
j
{hy}_j
hyj、
h
z
i
{hz}_i
hzi、
h
z
j
{hz}_j
hzj” 就是『负例对(negative pair)』)
● 他们定义了一个『余弦相似度函数(cosine similarity)』: s i m ( u , v ) = ( u T v ) / ( ∣ ∣ u ∣ ∣ ∣ ∣ v ∣ ∣ ) sim(u,v)=(u^Τv)/(||u||\,||v||) sim(u,v)=(uTv)/(∣∣u∣∣∣∣v∣∣)
● 那么对于一对『正例对(positive pair)』
(
i
,
j
)
(i, j)
(i,j) 的损失函数定义为:
ℓ
i
,
j
=
−
l
o
g
e
x
p
(
s
i
m
(
z
i
)
,
z
j
)
/
τ
∑
k
=
1
2
N
e
x
p
(
s
i
m
(
z
i
,
z
k
)
/
τ
)
,
其
中
k
≠
i
且
k
=
i
的
情
况
只
有
一
个
\ell_{i,j}=-log\dfrac{exp(sim(z_i),z_j)/τ}{\sum^{2N}_{k=1}exp(sim(z_i,z_k)/τ)},其中 k≠i 且 k=i 的情况只有一个
ℓi,j=−log∑k=12Nexp(sim(zi,zk)/τ)exp(sim(zi),zj)/τ,其中k=i且k=i的情况只有一个
◆ 公式说明:
τ
τ
τ 是一个『温度参数(temperature parameter)』
● 最后,他们再定义一个『归一化温度尺度交叉熵损失函数(the normalized temperature-scaled cross entropy loss)』,简称 NT-Xent:
L
=
1
N
∑
k
=
1
N
[
ℓ
(
2
k
−
1
,
2
k
)
+
ℓ
(
2
k
,
2
k
−
1
)
]
\mathcal{L}=\frac{1}{N}\sum^N_{k=1}[\ell(2k-1,2k)+\ell(2k,2k-1)]
L=N1k=1∑N[ℓ(2k−1,2k)+ℓ(2k,2k−1)]
◆ 公式说明:“
2
k
−
1
2k-1
2k−1” 和 “
2
k
2k
2k” 可以理解为 “奇数的样本图片” 和 “偶数的样本图片”。
● 整个算法的流程如下:【伪代码】

◆ 说明:
① 上图中的
t
\mathcal{t}
t 即是『数据增强(data augmentation)』操作。
② 它是通过什么方式使得 “update networks
f
f
f and
g
g
g to minimize
L
\mathcal{L}
L” 的呢?答案是『分层自适应速率缩放(Layer-wise Adaptive Rate Scaling)』,简称 “LARS算法”。
③ 在最后一行我们可以看出,整个算法最终训练出来并 return 的是 “基础编码器
f
(
⋅
)
f(·)
f(⋅)”,而不需要 “投影头
g
(
⋅
)
g(·)
g(⋅)”。这个 “基础编码器
f
(
⋅
)
f(·)
f(⋅)” 就能做别的『迁移学习(transfer learning)』,进行相应的『下游任务(Downstream tasks)』。
3.2 模型训练方法——大批量训练[Training with Large Batch Size]
● 为了简单起见,他们没有使用『存储库(memory bank)』来训练模型,代替的是将训练批量的大小
N
N
N 从 256 更改为 8192。这就能从两个『增强视图(augmentation views)』中为每个『正例对(positive pair)』提供 16382 个负例(16382 = 2 × 8192 - 2)
● 他们使用云 TPU 训练,根据批量大小使用了 32 到 128 个内核。(当批量大小为 4096,且设置为 100 次迭代时,使用 128 个 TPU v3 核,训练他们的 ResNet-50 需要 1.5 小时)
● Global BN:全局批量归一化,全称为 Global Batch Normalization。在具有数据并行性的分布式训练中,BN 均值和方差通常在每个设备上进行局部聚合(这是不好的现象)。在他们的对比学习中,由于『正例对(positive pair)』是在同一个设备中计算的。因此该模型可以在不需要提升『表征(Representations)』的质量的情况下,利用局部信息的 “全局共享” 来提高预测精度。他们通过在训练期间汇总所有设备的 BN 均值和方差来解决这个问题。其他方法包括:在设备之间对数据示例进行『洗牌(shuffle)』,或用『层归一化(Layer norm)』代替『批量归一化(BN)』。
3.3 模型评价方法——评价方案[Evaluation Protocol]
● 他们的结果大部分来至于对 ImageNet 的 ILSVRC-2012 数据集的训练和测试。还有一些额外的预训练来自于 CIFAR-10 数据集。
● 他们还用『预训练模型(Pre-trained Models)』测试了『迁移学习(transfer learning)』后的效果。为了评估学习到的『表征(representations)』,它们遵循『线性评估协议(Linear evaluation protocol)』,其中『线性分类器(Linear classifier)』在冻结的『基础网络(base network)』上进行训练,用测试准确率来反映『表征(representations)』的效果。除了线性评估之外,他们和『半监督学习(semi-supervised)』进行了比较。
● 在这里,他们最后提到了他们训练 SimCLR 时的默认设置:
① 三种简单的数据增强手段:『随机剪裁(Random Crop)』然后调整回原始大小、『随机颜色失真(Random Color Distortion)』以及『高斯模糊(Gaussian Blur)』。
② 基础编码器
f
(
⋅
)
f(·)
f(⋅) :它用的是 ResNet-50。
③ 投影头
g
(
⋅
)
g(·)
g(⋅):一个 2 层的 『多层感知机(Multilayer Perceptron,简称 MLP)』 。它能将『表征(representations)』投射到 128 维的『隐藏空间(latent space)』。
④ 对比损失函数:他们使用由 LARS 来优化的 NT-Xent。
⑤ 学习速率:为 4.8(= 0.3 × 4096 / 256 → 注意这里的 4096 是『批量的大小(BatchSize)』)。
⑥ 权重衰减率:10-6。
⑦ 训练机制:100 次迭代,每次迭代训练包含 4096 张图片的『批(Batch)』。
⑧ 其他说明:此外,他们还在前 10 个阶段使用『线性预热( linear warmup)』,并在不重启的情况下使用『余弦衰减方案(cosine decay schedule)』来衰减学习速率。
Ⅳ. Experiments
4.1 实验结果①——好的“数据增强组合”对学习好的表征很重要[Composition of data augmentation operations is crucial for learning good representations]
● 为了理解单个『数据增强(data augmentation)』的效果和组合『数据增强(data augmentation)』的效果,他们研究了单独或成对增强时框架的性能。
● 他们总是首先随机裁剪图像,并将它们调整到相同的分辨率,然后只将这个 “目标变换” 应用到 SimCLR 框架的一个分支,而将另一个分支作为标识,即 t ( x i ) = x i t(x_i) = x_i t(xi)=xi。(也就是说,假如现在有一张图片 x x x,它会经过 “随机剪裁+重调大小”,然后得到 x 1 x_1 x1 和 x 2 x_2 x2,其中 SimCLR 会把 x 1 x_1 x1 作为 x i x_i xi,而另一个 x 2 x_2 x2 还要经过其他 “数据增强” 才能成为 x j x_j xj)

◆ 对上图的说明:该图显示了单个和组合 “数据增强” 下的线性评估结果。对角线项对应于单个变换,而非对角线项对应于两个变换(注意有先后顺序,竖轴先,横轴后)的组合。最后一列单独的 “温标图” 反映了这一行的平均值。
● 对于上图来说,他们再论文中提到:没有哪个单一的变换能够有效地学习良好的『表征(representations)』,即使该模型几乎可以完美地识别对比任务中的『正例对(positive pair)』。在组合变换中,『对比预测任务(contrastive prediction task)』变得更加困难(指在编写代码、复杂度等方面),但『表征(representations)』的质量显著提高。
● 最后他们发现一个具有突出效果的“组件增强”:『随机裁剪(random cropping)』和『随机颜色失真(random color distortion)』。

◆ 对上图的说明:(a) 第一行对应假设是一张图片
x
x
x 的 4 个通道,(b) 第一行也对应
x
x
x 的 4 个通道。越窄的话,说明效果越好。
● 他们推测,当只使用『随机裁剪(random cropping)』作为『数据增强(data augmentation)』时,有一个严重的问题存在:图像中的大多数斑块都具有相似的颜色分布,导致对比预测任务效果不佳。而神经网络可以利用『随机颜色失真(random color distortion)』这一捷径来解决这个问题。
4.2 实验结果②——“对比学习”需要有比“监督学习”更丰富的数据增强[Contrastive learning needs stronger data augmentation than supervised learning]
● 为了进一步证明『颜色失真(color distortion)』的重要性,他们调整了『颜色失真(color distortion)』的强度,并测出如下 “Top-1 准确率表”。

◆ 对上表的说明:更强的『颜色失真(color distortion)』极大地提高了无监督学习模型的线性评价。同时他们也使用『自动增强(AutoAugment)』来测试,发现并不比 “简单的裁剪+(更强)颜色失真” 好。
● 当使用相同的增强集训练有监督学习模型时,可以观察到更强的『颜色失真(color distortion)』反而会损害其性能。因此,与有监督学习相比,无监督对比学习能从更强的『颜色失真(color distortion)』中获益。
● 尽管之前的研究称『数据增强(data augmentation)』有助于『自监督学习(self-supervised learning)』,但通过他们团队的实验证明:对于『有监督学习(Supervised learning)』而言不产生准确性益处的『数据增强(data augmentation)』,仍然可以在很大程度上帮助『对比学习(contrastive learning)』。
4.3 实验结果③——具有更大模型的无监督对比学习更有效[Unsupervised contrastive learning benefits (more) from bigger models]

◆ 对上图的说明:随着模型尺寸的增加,有监督模型和在无监督模型上训练的『线性分类器(linear classifiers)』之间的差距缩小,这表明无监督学习比监督模型能从更大的模型中获益更多。
4.4 实验结果④——非线性的“投影头”提高了“前一层”的表征质量[A nonlinear projection head improves the representation quality of the layer before it]

◆ 对上图的说明:【该图显示了对 “投影头
g
(
⋅
)
g(·)
g(⋅)” 使用三种不同架构的『线性评估(linear evaluation)』结果】
① 恒等映射(即上图中的 None)
② 线性投影(即上图中的 Linear)
③ 具有一个额外隐藏层的默认非线性投影(包含 ReLu 激活函数)
● 由上图可以观察到,当使用 “投影头
g
(
⋅
)
g(·)
g(⋅)” 时,无论输出量如何,都可以观察到类似的结果:非线性投影比线性投影好(+3%),比无投影好得多(>10%)。
● 另外,他们还另外发现,即使使用了非线性投影,投影头之前的层产生的“表征
h
h
h” 仍然比之后的层
z
=
g
(
h
)
z = g ( h )
z=g(h) 好得多(>10%),这表明 “投影头
g
(
⋅
)
g(·)
g(⋅)” 之前的隐藏层比之后的层有更好的『表征(representations)』。他们推测其原因是:之所以在非线性投影之前使用表征的重要原因,来自于对比损失导致的信息损失。
g
g
g 可能删除了对下游任务有用的信息,例如样例的颜色或方向。通过利用非线性变换
g
(
⋅
)
g(·)
g(⋅),可以不破坏
h
h
h,这样就可以在
h
h
h 中形成和保持更多(有用)的信息。
● 为了验证这一假设,他们还进行了实验,使用
h
h
h 或
g
(
⋅
)
g(·)
g(⋅) 来学会预测在预训练期间应用的 “transformation(即经过图像增强后的样例)” 。他们假设
g
(
h
)
=
W
(
2
)
σ
(
W
(
1
)
h
)
g(h)=W^{(2)}σ(W^{(1)}h)
g(h)=W(2)σ(W(1)h) 且具有相同的输入和输出维度(即2048),结果如下:

◆ 对上表的说明:在不同『表征(representations)』上训练额外的 MLP 来预测被采用的 “transformation(即经过图像增强后的样例)” 的准确性。可以
h
h
h 那边的准确率更高,所以
h
h
h 包含关于 “被采用的 transformation(即经过图像增强后的样例)” 的更多信息,而
g
(
h
)
g(h)
g(h) 丢失了其信息。
4.5 实验结果⑤——温度可调的归一化交叉熵损失比其他方法效果更好[Normalized cross entropy loss with adjustable temperature works better than alternatives]
● 他们将 NT-Xent 损失与其他常用的对比损失函数进行比较,如著名的 “logistic loss” 和 “margin loss” 等。其结果还是 NT-Xent 更好。

● 接下来,我们测试 “对 ℓ 2 \ell_2 ℓ2 进行『归一化(normalization)』” 和 “温度参数 τ τ τ” 的重要性。如下图所示:

◆ 对上表的说明:如果不进行标准化和适当的温度缩放,性能会显著降低。在没有 “对
ℓ
2
\ell_2
ℓ2 进行『归一化(normalization)』” 的情况下,对比任务的准确率较高,但在线性评价下 Top-1 结果较差。
4.6 实验结果⑥——对比学习能从大批量和长时间的训练中获益(更多)[Contrastive learning benefits (more) from larger batch sizes and longer training]
● 下图显示出:当模型针对不同数量的『迭代(epochs)』进行训练时,『批量大小(batch size)』对其的影响。他们发现,当迭代次数较少(例如 100 次)时,较大的批量比较小的批量具有显著优势。随着训练次数/时间的增加,不同『批量大小(batch size)』之间的差距将减小或消失(前提是每批都被随机重新取样)。与有监督学习相比,在对比学习中,更大的『批量大小(batch size)』提供了更多且更高比例的负例,这提升了效果。

Ⅴ. Comparison with State-of-the-art | Related Work
● 论文中这两个模块主要做了 “其他测验结果” 和 “引用别人的话”,但我实在写不动了,感觉没前面写的那些重要,就略了哈。
Ⅵ. Discussion and Conclusion
● 在论文中,作者就重新总结了他们做的工作,这里我就不写了,写一点关于写完这篇《SimCLR v1 文献研究》的 “写后感”
● 一开始我也是很抵触直接看这种,全英文论文的,啊…头巨疼,然后就去查知乎、查CSDN、查gitHub,先去看那种通俗易懂(插画多一点的)综述,先把 SimCLR v1 的核心内容理解了。然后就看深一点的东西,但我感觉这网上写得啊,参差不齐,好得好到拍案叫绝,差得就不说了。但是哈!最终,我发现,真的,原论文,原滋原味的,讲得才是最清楚的!!!!
▶本文参考附录
SimCLR v1原论文地址:https://arxiv.org/pdf/2002.05709.pdf.
[1] The Illustrated SimCLR Framework. 这篇图文并茂,虽然是全英,但把原理解释得很清楚,一开始我看的是这篇
[2] Self-Supervised Learning 超详细解读 (二):SimCLR系列. 这篇也蛮好
[3] 论文阅读笔记(10):A Simple Framework for Contrastive Learning of Visual Representations,用对比学习进行视觉表征的简单框架.
⭐️ ⭐️
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)