paper地址:https://arxiv.org/abs/2002.05709
github地址:https://github.com/google-research/simclr
这篇文章提出了一个对比学习的简单的框架,用来学习视觉的表征。主要贡献如下:
这篇文章提出时,在ImageNet上,由SimCLR学习的自监督表示训练的线性分类器达到76.5%的精度,和ResNet50相当,超过了之前提出的一些自监督学习算法约7%。 在仅有1%的数据集上微调时,也获得了85.8%的top-5准确率,比AlexNet少了100倍的标签,却得到了可媲美的精度。
自监督视觉表征学习方法主流有两种,生成式和判别式:
然后本文继续介绍了提出的方法SimCLR,不仅精度超过之前的方法,而且简单,不需要特殊的空间结构和memory bank. 然后系统的研究了本文的主要贡献:
此外,除了在ImageNet上取得比较好的效果外,还评估了其他的数据集,在12个数据集中,有10个都超过了监督学习的base。
SimCLR学习表征,经过一个潜在空间的对比损失,这个对比损失是最大化同一数据中不同增强视图之间的一致性来实现的。
本文的框架如下:同一数据增强族中随机采用两个独立的数据增强算子,并应用于每个数据示例中以获得两个相关的视图。并训练一个基础的encoder网络和一个projection 头,使用对比损失来最大化一致性。
训练结束后,丢弃projection头,使用encoder部分的表征来服务于下游任务
框架流程如下:
由于一个batch内有很多图像对,除了自己本身外,其他图像对都看成负样本。
比如图像1和图像1之间,为正样本。 图1和其他图则为负样本对,负样本对也参与损失的计算。
本文还定义了一个归一化后的交叉熵损失函数,如下:
其中 s i m ( z i , z j ) sim(z_i, z_j ) sim(zi,zj)就是余弦相似度。值得注意的是,A图和B等其他图组成一对,B也需要和A等其他图组成一对,所以最终的损失,是奇数对于偶数对之前相加,再求平均。
关于这里的损失函数,如何完成同类相吸,异类互斥,知乎一篇文档有详细的讲解。
https://zhuanlan.zhihu.com/p/258958247
本文将Batchsize从256尝试到8192,每个正样本对应双倍的增强,比如batchsize=8192时,就有16282个负样本。
当使用具有线性学习率尺度时SGD/Momentum,大的batchsize可能不稳定,因此,本文使用LARS优化器
值得注意,本文采用GlobalBN 来解决普通BN之间信息泄漏的问题,有些方法是采用shuffle-BN(每个节点的均值方差互换)或者layer norm。
这篇文章以前,尽管数据增强已经被广泛应用,但都没有系统性应用数据增强到对比学习中。
以前的通常都是改变网络结构,比如:
实验一、数据增强的组合对学习好的特征表达非常重要,数据论证了:
1、没有一个单一的论证可以学到好的特征表示;
2、随机crop和随机颜色变换组合是最佳的
颜色失真也很重要,不然的化,仅仅靠直方图就能判断两个图像是不是同一个图crop的
表1表示了,对比学习需要更多的数据增强,且本文还对比了监督学习算法中的一种自动数据增强,发现在对比学习中,效果也不是很好。
图8表示,加了非线性层的预测头后,特征表示更好了。
这里有个有趣的现象,也就是非线性层预测头的维度,对特征表示没有多大影响。
文中如此解释: z = g ( h ) z=g(h) z=g(h) 被训练为对数据的变换是不变的(同一图,做不同的数据增强,都是求相似度),因此失去了对下游任务支持的信息。
图9也实验证明了这点,文中表示,大的batchsize提供了更多的负样本,有利于收敛。
but, 动不动就4096的batchsize, 小实验一般玩不起啊!
本文提出了一个简单的框架及其实例化的对比视觉表示学习。并仔细研究了其组成部分,展示了不同设计选择的影响。通过结合,大大改进了以前的自我监督、半监督和迁移学习的方法。
然后是,本文方法与ImageNet上的标准监督学习仅在3个方面不同:数据增强的选择、在网络末端使用非线性头部和损失函数方面。
这个简单框架的优势表明,尽管最近人们的兴趣激增,但自监督学习仍然被低估了。
还有更多的实验在附录中,如在验证集中随机选择了10个类别,应用t-SNE降维后,视觉表征层相比投影层的特征界限,更加明显。