对比学习与SimCLR
对比学习
通俗来讲,对比学习就是将相同的作为正例,不同的作为正例,将正例和负例相互之间进行对比,让模型学习其中的规律
自监督任务
简单来说,自监督任务就是以数据本身作为标签,而不需要进行额外的标注。在这个过程中,正样本就是相同的类别的图片,负样本就是不同类别的图片
SimCLR v1
1.网络结构 整体网络结构需要经过数据增强、特征提取、相似度损失。
(1) 数据增强
数据增强,就是给于模型挑战性,让模型在各种情况下都能够识别正例,以增强模型的鲁棒性。
在自监督中,数据增强一定要足够强,一般来说,搭配裁策略与颜色变换效果会更好。 当只使用裁剪策略时,模型仅仅通过颜色直方图就能够准确分类,从而失去了鲁棒性。
(2)特征提取(ecoder)
特征提取就是使用网络提取特征,可以使用ResNet/Transformer等等。
(3)相似度损失NT-Xent loss(温度可调的归一化交叉熵损失)
如果我们要正确识别正例和负例,我们希望正例相似度高,而负例相似度低。因此,我们使用正例作为分子,而相似度度矩阵之和作为分母,意思上让正例相似度占总体相似度的比例足够大。但是这不极大了吗?前面加负号就变成极小化损失了。
结语:自监督学习通过在大规模数据集训练, 能够学习强大的特征表示,进而提升下游任务的性能。
SimCLR v2
SimCLR v2提出了一种半监督学习方法,该方法分为3个步骤:(1)使用SimCLRv2对大型ResNet模型进行无监督预训练(2)对一些有标记的示例进行监督微调(3)使用未标记的数据进行蒸馏。
(1)使用SimCLRv2对大型ResNet模型进行无监督预训练
无监督预训练的目标能够有效获取未标记图像的特征表示。模型越大,效果越好,且标签效率越高,使用更少的有标签数据进行微调就能取得很好的性能。此外,增加非线性投影层的数量也能够提升模型的性能。
(2)使用有标签数据微调
使用有标签数据微调能够使预训练模型适用于特定任务。另外,预训练阶段的投影层不是直接扔掉,而是将部分投影层加入编码器(ecoder)中。
(3)模型蒸馏
大模型能够获得很好的特征表示,但是在应用到具体的任务时,我们可能并不需要这么大的模型。因此,使用未标记数据进行蒸馏,能够提升具体任务的性能,并得到一个应用于具体任务的更小的网络。在模型蒸馏中,微调后网络作为教师模型提供伪标签,以此训练学生模型。