原文
三遍论文法
对比学习这两年在自监督学习、无监督学习任务中非常火,取得了非常优秀的性能。这个工作就是想办法将其用在监督学习任务中,在训练过程中更有效地利用标签信息。
文章研究的点主要在于对比学习在分类任务中的应用
作者首先分析了分类任务中最常采用的交叉熵损失函数的缺点:① 对噪声数数据缺乏鲁棒性; ② 分类边界的问题(the possibility of poor margins
)。这样会导致模型泛化能力下降,因此也有不少工作针对交叉熵进行改进(比如人脸领域的LargeMargin Loss, ArcFace,以及Label smoothing,知识蒸馏等),但目前大数据集上的分类任务(比如ImageNet),使用最多的仍然是交叉熵。
因此本文就探索了对比学习在ImageNet任务上的效果,提出了Supervised Contrastive Learning
,并验证了其性能优越性。如下图所示,对比了在ImageNet上的实验性能。
auto-augment
和rand-augment
可以参考博客,简单理解的话,就是一种自动增广策略,针对数据集找到最有效的增广策略,提升模型泛化性。
对比学习
对比学习的核心思想就是在特征空间将拉近achor
和正样本,推远负样本。其目前主要用于无监督表征学习中,在这个任务中没有标注信息,所以正常样本通常是同一个实例的两个View
(同一图像的两个增广结果),而负样本来自同一个batch中的其他样本。
可以视为在最大化数据不同视角下的互信息,这个思路最先由SimCLR提出,目前已经广泛采用。
而本文的出发点非常简单,既然有了标签信息,那我不就可以准确地找到anchor
对应的正样本和负样本吗?因此Supervised Contrastive Learning
的目标就是在特征空间中拉近同一类数据的特征,推远不同类之间的特征。
训练框架
采用两阶段训练的方法,第一阶段非常与SimCLR非常像。首先对batch内的图像都进行两次增广,得到两倍Batch大小(2N)的数据。
先送入Encoder网络得到2048维的特征输出,然后再进一步经过一个Project网络映射到另一个空间中(通常维度更小,本文中为128),经过归一化(normalization
映射到超球面)后在这个特征空间中计算Supervised Contrastive Learning
。
第一阶段训练好之后,移除掉Project网络,固定住Encoder网络,用交叉熵损失再训练一个分类head,用于后续测试。
一些细节:① 也可以不采用2阶段的方式,而是使用交叉熵联合训练分类head,效果也能差不多。但这里为了更好地体现所提出的监督学习效果(迁移任务上),选择分离训练。② 达到相同的形象,SupCon需要的学习率比交叉熵的要更大。③ 理论上温度系数越小越好,但是过小容易数值不稳定。④ 实验过程中尝试了不同的优化器(LARS,RMSProp,SGDm)。
监督对比学习形式
自监督对比学习的形式如下所示:
其中I
包含了一个Batch中的所有数据(2N),·
表示内积,其实在超球面上就可以表示余弦相似度, τ \tau τ表示温度系数,A(i)表示I\{i}
,1个anchor
对应1个正样本和2N-2个负样本。
根据自监督对比学习的定义,引入标签信息后,可以非常容易地对其进行更改。作者首先提出了两种监督对比学习形式:
其中,P(i)表示在当前batch内,anchor样本i
所对应的所有正样本。在形式2中,会先计算所有正样本对之间的log项再求均值,而形式3会先计算求得均值再计算log项。
首先,无论是形式2还是形式3,他们都有以下几个性质:
但这两中形式实际上是不一样的,根据杰森不等式能得到如下关系:
Jensen’s Inequality: 过一个下凸函数上任意两点所作割线一定在这两点间的函数图象的上方
这或许推测in
形式要优于out
形式,但结论却恰好相反,作者经过实验表明,out
的性能要更优。作者在也给出了数学上的证明,说明in
形式更容易达到次优解,因此在之后的实验中均采用out
形式。
部分实验
表2展示了本文提出的supervised contrastive learning
要优于SimCLR,交叉熵以及Max-Margin,表3展示了其也优于其他的数据增广策略。
需要注意的是,训练过程中的batch size为6144,增广后就是12288了。
作者也尝试了MoCo这类方法,使用memory bank,memory size为8192,batch size为256,取得了79.1%的top-1准确率,效果更好(Kaiming yyds)。
但即使使用的是memory bank也需要8块V100… …
作者也在ImageNet-C数据集上进行了测试,其包含一些人造噪声,效果也很不错。这也说明了supervised contrastive learning
要更鲁棒。
作者还测试了损失对超参数的稳定性以及一些消融实验,如下图所示,均优于交叉熵。
作者还验证了Supervissed Contrastive Learning
的模型迁移能力。
对比学习核心在于“在特征空间拉近anchor
与正样本对之间的距离,推远与负样本之间的距离”
往简单了说,对比学习就是一种损失函数类型。往深了说,就是对数据分布的一种先验假设。在无监督学习任务中,由于没有具体的标签信息,所以在对比学习任务中采用同一实例的不同增广结果作为正样本对,其他实例作为负样本。这样会受到false negative的影响,比如两张图片全是cat
这一类,但你却要强行推远它们在特征空间中的距离,这样会损害特征的判别性(缺少了捕获同类特征的能力)。
因此本文引入了标签信息,在强监督学习设置下进行对比学习SupCon
。提出了两种损失形式,并通过实验和数学上的证明,保留了效果最好最鲁棒的一种。
SupCon
也保留了对比学习本身的一些特性,其中有一条就是随着负样本的增加,性能会越来越好。实验也证明了在大batch size下性能优于普通的交叉熵。但在batch size较小的情况下却没有给出实验结果(我觉得可能不如交叉熵)。如果只有在大batch size的情况下才能彰显SupCon
的优越性显然就限制了它的应用场景,毕竟不是谁都像G家卡那么多,所以这也意味着还有很大的改进空间。
官方tf代码链接:https://t.ly/supcon,torch代码链接:https://github.com/HobbitLong/SupContrast