术语解释:
- Unsupervised pre-training:该方法包括使用无监督学习方法(比如自动编码器)或本文中使用的对比学习方法,使用未标记数据逐个对层进行预训练(贪心方法)。在这个预训练之后,使用标记的数据进行微调。
这样的好处是什么?使用这种预先训练得到的权重训练一个模型比随机初始化权值产生更好的结果,因为模型在通常的预训练中预先学习数据的表示
- Contrastive learning: 它是基于相似图像相似性和不同图像之间的差异性,利用余弦相似函数的对比损失来学习表示
总结:
- 利用大的resnet进行无监督的预训练 (大网络resnet152)
- 在少量有标注数据集上有监督的微调
- 利用无标注蒸馏提炼并转换特定任务的知识,利用无标记样本将大网络的知识蒸馏给小网络(resnet50)
与SimCLR不同,v2使用了一个独特的方法,包括使用了无监督预训练、有监督的微调和未标记数据的蒸馏,使其成为视觉任务中的一个强大的基准,远远领先于最新的技术。
方法:
- Self-supervised pretraining with SimCLRv2
首先为了有效地学习未标记图像的一般视觉表示,研究人员使用了SimCLRv2。 使用随机裁剪,颜色失真和高斯模糊将每个图像放大两次,从而创建同一示例的两个视图。 现在,每个图像与同一图像的其他增强图像形成正对,而与不同图像的其他增强形成负对,这些对用于通过对比学习来训练网络。
这两个图像通过编码器网络f进行编码,以生成表示,然后再次使用非线性变换网络g(projection head)进行变换,该MLP具有完全连接的层和ReLu激活功能,该网络使用对比损失进行训练,该对比损失使用余弦相似度,该余弦相似度负责使正值之间的差异最小化,同时使负值之间的差异最大化。 整个学习过程称为对比学习。 - fine-tuning
经过无监督的预训练后,标记的样本现在用于微调网络。 由于基本编码器的输出被视为SimCLR中图像的表示,所以将投影头全部扔掉,而在SimCLRv2中的微调期间将其一部分添加到基本编码器中,所以从投影头的中间层进行微调,而不是从投影头的输入层进行微调。 - self-training
最后,为了进一步改善目标任务的网络,研究人员在这里使用经过微调的网络作为教师,在未标记样本上插入标签以训练学生网络。 可以使用具有相同模型架构的学生(自我蒸馏)来执行此过程,这可以进一步提高特定任务的性能。
在SimCLRv2中,相比v1有以下几点改进:
(1)V2大大加深了网络的规模,最大的规模达到了152层的ResNet,3倍大小的通道数以及加入了SK模块(Selective Kernels);
(2)V2还使用了更深的projection head;其次,相比于v1在预训练完成后直接抛弃projection head,v2保留了几层用于finetune,这也是保留了一些在预训练中提取到的特
(3)使用了一种记忆机制,设计一个记忆网络,其输出作为负样本缓存下来用以训练
参考文献:
https://zhuanlan.zhihu.com/p/234553441
https://zhuanlan.zhihu.com/p/262675181