论文阅读:《A Simple Framework for Contrastive Learning of Visual Representations》
论文地址:https://arxiv.org/abs/2002.05709
SimCLR v1
论文阅读:《Big Self-Supervised Models areStrong Semi-Supervised Learners》
论文地址:https://arxiv.org/abs/2006.10029
论文翻译:https://zhuanlan.zhihu.com/p/213737892
SimCLR v2
论文代码:https://github.com/google-research/simclr
代码主要包含一下几个部分:数据增强:simclr/tf2/data.py 网络结构:simclr/tf2/resnet.py Loss函数:simclr/tf2/objective.py 网络模型:simclr/tf2/model.py
SimCLR v1
作者们构建了一种用于视觉表示的对比学习简单框架 SimCLR,它不仅优于此前的所有工作,也优于最新的对比自监督学习算法,而且结构更加简单:这个结构既不需要专门的架构,也不需要特殊的存储库。由于采用了对比学习,这个框架可以作为很多视觉相关的任务的预训练模型,可以在少量标注样本的情况下,拿到比较好的结果。
主要发现:
多个数据增强方法对于对比预测任务产生有效表示非常重要
与监督学习相比,数据增强对于无监督学习更加有用;
在表示和对比损失之间引入一个可学习的非线性变换可以大幅提高模型学到的表示的质量;
与监督学习相比,对比学习得益于更大的批量和更多的训练步骤。
创新点
1.数据增强
实验得出的结论是:单独使用一种数据增强,对比学习的效果会很差;random cropping与random color distortion进行组合效果最好;数据增强对对比学习的影响非常明显,这不是一个好的性质,很多时候我们需要进行穷举试错。
2.projection head
在representation与contrastive loss间使用可学习的non-linear projection,并证明效果较好。这边使用可学习的网络的优势在于避免计算 similarity 的 loss function 在训练时丢掉一些重要的feature。论文中使用非常简单的单层MLP,配上ReLU activation function作为non-linear projection。
3.对比损失函数
NT-Xent(the normalized temperature-scaled cross entropy loss),重点在于normalized embedding与appropriately adjusted temperature parameter
表示计算两个向量的余弦相似度,为超参数,2N张图像的损失函数之和求平均,得到最终的损失函数,其实就是在进行2N-1的分类。
4.加点负例
计算loss时多加了负例。以前都是拿右侧数据的N-1个作为负例,SimCLR将左侧的N-1个也加入了进来,总计2(N-1)个负例。另外SImCLR不采用memory bank,而是用更大的batch size,最多的时候batch size为8192,有16382个负例。为了稳定训练,对所有批量使用LARS优化器。我们使用云TPU训练我们的模型,根据批量大小使用32到128个核心。
在具有数据并行性的分布式训练中,BN均值和方差通常在每个设备上进行局部聚合。在我们的对比学习中,由于正对是在同一个设备中计算的,该模型可以利用局部信息泄漏来提高预测精度,而不需要改进表示。我们通过在训练期间对所有设备的BN均值和方差进行汇总来解决这个问题。其他方法包括洗牌数据示例,或用层规范替换BN
In distributed training with data parallelism, the BN mean and variance are typically aggregated locally per device. In our contrastive learning, as positive pairs are computed in the same device, the model can exploit the local information leakage to improve prediction accuracy without improving representations. We address this issue by aggregating BN mean and variance over all devices during the training. Other approaches include shuffling data examples across devices , or replacing BN with layer norm .
拆分步骤:
稍微回顾一下:
unsupervised:是使用没有标注的数据训练模型
supervised:是使用了有标注的数据训练模型
semi-supervised:是同时使用了有标注与没有标注的数据训练模型。
而self-supervised翻成中文大概是自监督学习,也就是没有标注资料也会自己会学习的方法,属于unsupervised learning。
对比学习(Contrastive learning)
Contrastive learning是self-supervised learning中非常naive的想法之一。像小孩子学习一样,透过比较猫狗的同类之间相同之处与异类之间不同之处,在即使是在不知道什么是猫、什么是狗的情况下 (甚至没有语言定义的情况),也可以学会分辨猫狗。对比学习的基本概念,其实很简单,这是一种试图教会机器区分相似和不同的东西。
SimCLR v2
参考资料:https://blog.csdn.net/weixin_42764932/article/details/112787761
https://blog.csdn.net/dhaiuda/article/details/117906514