NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》

文章目录

    • 原文地址
    • 论文阅读方法
    • 初识
    • 相知
    • 回顾
    • 代码

原文地址

原文

论文阅读方法

三遍论文法

初识

对比学习这两年在自监督学习、无监督学习任务中非常火,取得了非常优秀的性能。这个工作就是想办法将其用在监督学习任务中,在训练过程中更有效地利用标签信息。

文章研究的点主要在于对比学习在分类任务中的应用

作者首先分析了分类任务中最常采用的交叉熵损失函数的缺点:① 对噪声数数据缺乏鲁棒性; ② 分类边界的问题(the possibility of poor margins)。这样会导致模型泛化能力下降,因此也有不少工作针对交叉熵进行改进(比如人脸领域的LargeMargin Loss, ArcFace,以及Label smoothing,知识蒸馏等),但目前大数据集上的分类任务(比如ImageNet),使用最多的仍然是交叉熵。

因此本文就探索了对比学习在ImageNet任务上的效果,提出了Supervised Contrastive Learning,并验证了其性能优越性。如下图所示,对比了在ImageNet上的实验性能。
NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第1张图片

auto-augmentrand-augment可以参考博客,简单理解的话,就是一种自动增广策略,针对数据集找到最有效的增广策略,提升模型泛化性。

相知

对比学习

对比学习的核心思想就是在特征空间将拉近achor和正样本,推远负样本。其目前主要用于无监督表征学习中,在这个任务中没有标注信息,所以正常样本通常是同一个实例的两个View(同一图像的两个增广结果),而负样本来自同一个batch中的其他样本。

可以视为在最大化数据不同视角下的互信息,这个思路最先由SimCLR提出,目前已经广泛采用。

而本文的出发点非常简单,既然有了标签信息,那我不就可以准确地找到anchor对应的正样本和负样本吗?因此Supervised Contrastive Learning的目标就是在特征空间中拉近同一类数据的特征,推远不同类之间的特征。

NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第2张图片

训练框架

采用两阶段训练的方法,第一阶段非常与SimCLR非常像。首先对batch内的图像都进行两次增广,得到两倍Batch大小(2N)的数据。

先送入Encoder网络得到2048维的特征输出,然后再进一步经过一个Project网络映射到另一个空间中(通常维度更小,本文中为128),经过归一化(normalization映射到超球面)后在这个特征空间中计算Supervised Contrastive Learning

第一阶段训练好之后,移除掉Project网络,固定住Encoder网络,用交叉熵损失再训练一个分类head,用于后续测试。

NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第3张图片

一些细节:① 也可以不采用2阶段的方式,而是使用交叉熵联合训练分类head,效果也能差不多。但这里为了更好地体现所提出的监督学习效果(迁移任务上),选择分离训练。② 达到相同的形象,SupCon需要的学习率比交叉熵的要更大。③ 理论上温度系数越小越好,但是过小容易数值不稳定。④ 实验过程中尝试了不同的优化器(LARS,RMSProp,SGDm)。

监督对比学习形式

自监督对比学习的形式如下所示:
在这里插入图片描述
其中I包含了一个Batch中的所有数据(2N),·表示内积,其实在超球面上就可以表示余弦相似度, τ \tau τ表示温度系数,A(i)表示I\{i},1个anchor对应1个正样本和2N-2个负样本。

根据自监督对比学习的定义,引入标签信息后,可以非常容易地对其进行更改。作者首先提出了两种监督对比学习形式:

NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第4张图片
其中,P(i)表示在当前batch内,anchor样本i所对应的所有正样本。在形式2中,会先计算所有正样本对之间的log项再求均值,而形式3会先计算求得均值再计算log项。

首先,无论是形式2还是形式3,他们都有以下几个性质:

  1. 可以很好地泛化到多个正样本对:也就是说对于正样本的个数没有限制;
  2. 负样本越多,对比性能越强:形式2和形式3在分母的负样本求和,这也保留了在原对比学习中的负样本越多越好的性质(实际上负样本越多,对比时就有更多hard negative,效果更好);
  3. 具有困难样本挖掘能力:不仅仅是正样本也包含了负样本,在损失中hard positive/negative的贡献远大于easy positive/negative(作者在附录中给了数学上的证明)。

但这两中形式实际上是不一样的,根据杰森不等式能得到如下关系:
在这里插入图片描述

Jensen’s Inequality: 过一个下凸函数上任意两点所作割线一定在这两点间的函数图象的上方

这或许推测in形式要优于out形式,但结论却恰好相反,作者经过实验表明,out的性能要更优。作者在也给出了数学上的证明,说明in形式更容易达到次优解,因此在之后的实验中均采用out形式。
NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第5张图片
部分实验
NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第6张图片
表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要更鲁棒。
NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第7张图片
作者还测试了损失对超参数的稳定性以及一些消融实验,如下图所示,均优于交叉熵。
NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第8张图片

作者还验证了Supervissed Contrastive Learning的模型迁移能力。
NIPS20 - 将对比学习用于监督学习任务《Supervised Contrastive Learning》_第9张图片

回顾

对比学习核心在于“在特征空间拉近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

你可能感兴趣的:(读点论文,-,无监督学习,深度学习,机器学习)