【深度学习:SimCLR 】利用 SimCLR 推进自监督和半监督学习
- SimCLR框架
- 表现
- 代码和预训练模型
最近,自然语言处理模型,如BERT和T5,已经表明,通过首先在大型未标记数据集上进行预训练,然后在较小的标记数据集上进行微调,可以在较少的类标签下获得良好的结果。同样,对大型未标记图像数据集进行预训练也有可能提高计算机视觉任务的性能,如Exemplar-CNN、Instance Discrimination、CPC、AMDIM、CMC、MoCo等所证明的那样。这些方法属于自监督学习的范畴,这是一系列通过从未标记的数据集创建代理标签将无监督学习问题转换为有监督学习问题的技术。然而,目前图像数据的自我监督技术很复杂,需要对架构或训练过程进行重大修改,并且尚未得到广泛采用。
在“ A Simple Framework for Contrastive Learning of Visual Representations”中,我们概述了一种方法,该方法不仅简化而且改进了先前的图像自监督表征学习方法。我们提出的框架,称为SimCLR,显着推进了自监督和半监督学习的最新技术,并在有限数量的分类标记数据下实现了图像分类的新记录(使用ImageNet数据集上1%的标记图像,前5名准确率为85.8%)。我们方法的简单性意味着它可以很容易地整合到现有的监督学习管道中。接下来,我们首先介绍SimCLR框架,然后讨论我们在开发SimCLR时发现的三件事。
SimCLR框架
SimCLR首先在未标记的数据集上学习图像的通用表示,然后可以使用少量标记的图像进行微调,以实现给定分类任务的良好性能。通用表示是通过同时最大化同一图像的不同转换视图之间的一致性和最小化不同图像的转换视图之间的一致性来学习的,遵循一种称为对比学习的方法。使用这种对比目标更新神经网络的参数会导致对应视图的表示相互“吸引”,而非对应视图的表示相互“排斥”。
首先,SimCLR从原始数据集中随机绘制示例,使用简单增强(随机裁剪、随机颜色失真和高斯模糊)组合对每个示例进行两次转换,创建两组相应的视图。单个图像的这些简单变换背后的基本原理是:(1)我们希望鼓励在变换下对同一图像进行“一致”表示,(2)由于预训练数据缺乏标签,我们无法先验地知道哪个图像包含哪个对象类,以及3)我们发现这些简单的变换足以让神经网络学习良好的表示,尽管也可以采用更复杂的变换策略。
然后SimCLR使用基于ResNet架构的卷积神经网络变体来计算图像表示。然后,SimCLR使用全连接网络(即MLP)计算图像表示的非线性投影,这放大了不变特征,并最大限度地提高了网络识别同一图像不同变换的能力。我们使用随机梯度下降来更新CNN和MLP,以最小化对比目标的损失函数。在对未标记的图像进行预训练后,我们可以直接使用CNN的输出作为图像的表示,或者我们可以用标记的图像对其进行微调,以获得良好的下游任务性能。
拟议的SimCLR框架的说明。同时训练CNN和MLP层,以产生对同一图像的增强版本相似的投影,而对不同的图像则不同,即使这些图像属于同一类对象。经过训练的模型不仅可以很好地识别同一图像的不同变换,而且还可以学习类似概念的表示(例如,椅子与狗),之后可以通过微调将其与标签相关联。
表现
尽管简单,SimCLR极大地推动了ImageNet上自监督和半监督学习的发展。在SimCLR学习的自监督表示之上训练的线性分类器达到了76.5% / 93.2%的top-1 / top-5准确率,而之前的最佳(CPC v2)为71.5% / 90.1%,与较小模型ResNet-50的监督学习性能相匹配,如下图所示。
用不同的自监督方法(在ImageNet上预训练)学习表征训练线性分类器的ImageNet top-1精度。灰色叉表示有监督的ResNet-50。
当仅对1%的标签进行微调时,SimCLR达到63.0% / 85.8%的前1 /前5准确率,而之前的最佳(CPC v2)为52.7% / 77.9%。也许令人惊讶的是,当对100%的标签进行微调时,预训练的SimCLR模型仍然可以显著优于从头训练的监督基线,例如,微调SimCLR预训练的ResNet-50(4倍)在30个epoch中达到80.1%的前1准确率,而从头训练它在90个epoch中获得78.4%的准确率。
理解表征的对比学习
SimCLR对以前方法的改进不是由于任何单一的设计选择,而是由于它们的组合。下面总结了几个重要的发现。
- 发现1: 用于生成相应视图的图像转换组合是至关重要的。
由于SimCLR通过最大化相同图像的不同视图的一致性来学习表示,因此组合图像转换以防止琐碎的一致性形式非常重要,例如颜色直方图的一致性。为了更好地理解这一点,我们探索了不同类型的转换,如下图所示。
我们发现,虽然没有单一的变换(我们研究的)足以定义产生最佳表示的预测任务,但有两种变换脱颖而出:随机裁剪和随机颜色失真。虽然裁剪和色彩失真本身都不能带来高性能,但组合这两种转换可以带来最先进的结果。
为了理解为什么将随机裁剪与随机颜色失真相结合是重要的,考虑一下在同一图像的两个裁剪之间最大化一致性的过程。这自然包含两种类型的预测任务,可以实现有效的表示学习:(a)从更大的“全局”视图(作物B)预测局部视图(例如,作物a),以及(B)预测邻近视图(例如,作物C和作物D之间)。
然而,同一图像的不同作物通常在色彩空间中看起来非常相似。如果颜色保持不变,模型可以通过简单地匹配颜色直方图来最大化作物之间的一致性。在这种情况下,模型可能只关注颜色,而忽略其他更一般化的特征。通过独立地扭曲每个作物的颜色,可以去除这些浅层线索,并且模型只能通过学习有用的和可推广的表示来达成一致。
- 发现2: 非线性投影很重要。
在SimCLR中,在计算对比学习目标的损失函数之前,采用基于mlp的非线性投影,这有助于识别每个输入图像的不变特征,并最大限度地提高网络识别同一图像不同变换的能力。在我们的实验中,我们发现使用这种非线性投影有助于提高表示质量,将在simclr学习的表示上训练的线性分类器的性能提高了10%以上。
有趣的是,将作为MLP投影模块输入的表示与投影输出的表示进行比较,发现早期阶段的表示在使用线性分类器进行测量时表现更好。由于对比目标的损失函数是基于投影的输出,所以投影前的表示更好,这有点令人惊讶。我们推测,我们的目标导致网络的最后一层对可能对下游任务有用的特征(如颜色)保持不变。有了额外的非线性投影头,投影头之前的表示层能够保留更多关于图像的有用信息。
发现3: 扩展可以显著提高性能。
我们发现(1)在同一批处理中处理更多的示例,(2)使用更大的网络,以及(3)更长的训练时间都会导致显著的改进。虽然这些似乎是显而易见的观察结果,但这些改进在SimCLR中似乎比在监督学习中更大。例如,我们观察到有监督的ResNet的性能在90到300个训练epoch之间达到顶峰(在ImageNet上),但是SimCLR即使在800个epoch的训练之后也可以继续提高。当我们增加网络的深度或宽度时,情况似乎也是如此——SimCLR的增益继续增加,而监督学习的增益开始饱和。为了优化扩展训练的回报,我们在实验中广泛使用了Cloud TPU。
代码和预训练模型
为了加速自监督和半监督学习的研究,我们很高兴与更大的学术社区分享SimCLR的代码和预训练模型。它们可以在GitHub存储库中找到。