✅ 个人简介:

南京邮电大学,Linyong Wang,计算机科学与技术,在读本科,



在这里插入图片描述

原论文链接:https://arxiv.org/pdf/2002.05709.pdf
Code:https://github.com/google-research/simclr.

Ⅰ. 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 hiRd 是『平均池化层(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(N1) 个增强样本来作为负例。比如说,若 N = 3 N=3 N=3,假设这 3 个小样本分别是 x 、 y 、 z x、y、z xyz”,那么它们一起经过 “两路的” 数据增强,将会分别得到两个集合 { x i 、 y i 、 z i } \{ {x}_i、{y}_i、{z}_i \} {xiyizi} { x j 、 y j 、 z j } \{ {x}_j、{y}_j、{z}_j \} {xjyjzj},这两个集合由分别经过 “各自那条路的 f ( ⋅ ) f(·) f()”,得到 { h x i 、 h x i 、 h z i } \{ {hx}_i、{hx}_i、{hz}_i \} {hxihxihzi} { h x j 、 h y j 、 h z j } \{ {hx}_j、{hy}_j、{hz}_j \} {hxjhyjhzj},注意我写 “ 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)/(uv)

● 那么对于一对『正例对(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=logk=12Nexp(sim(zi,zk)/τ)exp(sim(zi),zj)/τk=ik=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=1N[(2k1,2k)+(2k,2k1)]
公式说明:“ 2 k − 1 2k-1 2k1” 和 “ 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 N256 更改为 8192。这就能从两个『增强视图(augmentation views)』中为每个『正例对(positive pair)』提供 16382 个负例(16382 = 2 × 8192 - 2)

● 他们使用云 TPU 训练,根据批量大小使用了 32128 个内核。(当批量大小为 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 x4 个通道,(b) 第一行也对应 x x x4 个通道。越窄的话,说明效果越好。

● 他们推测,当只使用『随机裁剪(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,用对比学习进行视觉表征的简单框架.


⭐️ ⭐️

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐