论文链接: https://arxiv.org/pdf/2002.05709.pdf
官方github链接: https://github.com/google-research/simclr
他人复现pytorch链接: https://github.com/sthalles/SimCLR
1 概况
核心观点:
- 数据增强(data augmentations)的组合对预测任务的表现有重要影响,对于非监督学习而言,数据增强的提升作用更大;
- 本文定义了一个对比损失和表征之间的可学习非线性转换,大幅提高了表征的质量;
- 具有对比交叉熵损失(contrastive cross entropy loss)的表征学习得益于归一化嵌入和适当地调整温度参数;
- 与监督学习相比,对比学习可以通过更多的训练和更大的Batch Size 获得更好的表现,更深更宽的网络对对比学习表现的提升也有益。
框架效果:
-
在对Image Net 进行分类实验时,在top-1精度上取得了76.5%的结果,获比之前最先进的无监督或半监督提升7%,与有监督的Res-Net-50性能相媲美;
-
对Image Net 1%的Label 进行微调时,SimCLR 实现了85.8%的top-5精度,相对性能提升10%,超越了100× fewer label的AlexNet;
-
在其他自然图像分类数据集上进行微调时,SimCLR 在12个数据集中的10个数据集上的表现相当于或优于强监督的Baseline。
2 方法
2.1 对比学习框架
SimCLR 通过潜在空间上的对比损失,最大化相同数据示例的不同增强视图之间的协议进行表征学习,主要由四个主要组件组成:
-
随机数据增强模块
将任意给定的数据示例随即转换为同一示例的两个相关视图,用 x ~ i \widetilde{x}_i x i和 x ~ j \widetilde{x}_j x j表示,将其视为一个正对。本文使用了三种方法进行数据增强:随即裁剪和调整(如随机翻转)(裁剪后调整图像尺寸为原图大小),随机色彩失真和随机高斯模糊,作者认为随即裁剪和色彩失真的结合是使网络具有良好性能的关键。
-
神经网络基编码器(base encoder)
基编码器定义为 f ( ⋅ ) f(·) f(⋅),其作用在于从增强后的数据集中提取表征向量。作者认为SimCLR可以在无任何约束的情况下选择各种网络架构的基编码器,论文中选择的是常见的ResNet。因此,对于数据 x ~ i \widetilde{x}_i x i,有:
h i = f ( x ~ i ) = R e s N e t ( x ~ i ) \boldsymbol{h}_i=f(\widetilde{x}_i)=ResNet(\widetilde{x}_i) hi=f(x i)=ResNet(x i)
其中, h i ∈ R d \boldsymbol{h}_i\in\R^d hi∈Rd,为经过平均池化层之后的输出。 -
小型神经网络投影头(projection head)
投影头 g ( ⋅ ) g(·) g(⋅)的作用是将编码后的表征 h i h_i hi映射到应用对比损失的潜在空间中,本文使用的是一个两层MLP,具体计算方法如下:
z i = g ( h i