©原创 · 作者 | 
张琨

学校 | 中国科学技术大学博士生
研究方向 | 自然语言处理
自监督学习(Self-Supervised Learning, SSL),或者自监督学习中的对比学习(Contrastive Learning,CL)在近两年成为人工智能研究的一个重要研究方向和方法。自监督学习或者对比学习能够充分利用数据本身的特性,在不需要标注的前提下实现对输入数据的准确表征学习,辅助增强了模型在下游任务中的性能。
为了进一步挖掘自监督学习或者对比学习的潜能,针对自监督学习,人们设计了更加精巧,和下游任务更相关的自监督任务用于模型训练;针对对比学习,不同的距离度量方法,不同的损失函数设计,不同的正负样本采样方法,是否使用已有的标签信息都是重要的研究方向。
本文针对对比学习,尤其是对比学习中利用更好的采样方式增强对比效果的一些工作进行简单介绍,希望能为大家带来一些微小的启发。
对比学习简介
什么是对比学习,简单来讲,对比学习就是通过数据之间的对比进行表示学习,目的就是为了获得更通用的知识,用于辅助下游任务。它与表示学习,度量学习相比,都是为了获得输入的更好表征,只是侧重点不同。
对比学习更侧重于学习方法,他的核心思想可以总结为在向量表征空间中将正样本(positive example)与锚点样本(anchor example)之间的距离拉近,将负样本(negative example)与锚点样本(anchor example)之间的距离拉远,通过这样的方式自然而言的就能够构建损失函数(triplet loss)进行模型训练。
因此重点就落到了如何定义正样本,负样本,为了避免对标签的要求,通用的做法是利用数据增强的方法(例如图像中的旋转,裁剪等)获得锚点样本的增强样本,作为正样本;而在同一批次的训练数据中,其他样本都可以认为是负样本。这样就实现了在不需要标签信息的条件下,利用数据本身的特点进行对比学习。以上就是对比学习的基本思想。下图是对比学习中的一个典型框架。
对比学习降低了对标签的依赖,让我们能够在不需要标签的条件下实现输入数据的准确表示。但从他的基本思想中也可以看出来,在样本的选择上仍然有些粗放。例如数据增强的样本都是正样本么?自然语言中有时候改掉一些词会直接导致整体语义的变化,通过替换词进行数据增强不一定能够保证正样本的真正性(true positive)。
负样本直接从同一个 batch 中进行选择,很直接的同一个 batch 中肯定包含属于同一类的样本,那么这种样本的真负性(true negative)该如何保证?为了解决这些问题,进一步挖掘对比学习的潜力,例如利用已有标签的方法实现更好的样本选择,当然也有很多其他的选择更好样本的方法被提出来。接下来,本文将对其中的一些代表性工作进行介绍。
监督对比学习
论文标题:
Supervised Contrastive Learning
收录会议:
NeurIPS 2020
论文链接:
https://arxiv.org/abs/2004.11362
代码链接:
https://github.com/google-research/google-research/tree/master/supcon
2.1 亮点
该工作 [1] 在对比学习中引入了标签信息,利用标签信息将对比学习的损失扩展为支持 multiple positive 和 multiple negative 的形式,以监督学习的设置实现了对比学习效果的提升。
作者通过梯度计算的角度说明了文中提出的 loss 可以更好地关注于 hard positives and negatives,从而获得更好的效果。
2.2 方法
首先是传统对比学习与本文提出的监督对比学习的比较,从图中可以看出,当小狗为对比锚点时,传统对比学习只能学习到单个小狗的特征,而同属于小狗但属于不同品种的小狗则会被作为负例,从而使得小狗这一类别的通用特征无法被整个模型学习到。
因此,如果将同属于小狗这一类别的样本也作为锚点的正例,那么模型不仅能够学习到单个小狗的通用特征(数据内特征),同时也能学习到同一类别的特征(类内特征),考虑到对比学习的基本思想,属于同一类的数据距离将会更近,类与类之间的差异将会更明显。为了实现这个效果,作者从损失函数上进行了相对修改,假设有 N 个随机选择的样本 ,传统对比学习的 InfoNCE 损失可以表示为如下形式:
其中,即排除出锚点样本之外的其他样本。通过这个损失函数可以发现,整个模型在优化的时候是在考虑一个正样本和多个负样本之间的关系。为了引入标签信息,作者在损失函数上进行了如下改进:
首先,由于考虑了标签信息,那么在一个训练 batch 中的属于同一类的样本将会被发现作为正样本。这样首先就可以将对比损失拓展为多个正样本对多个负样本。公式中 表示和锚点样本属于同一类的样本。这两个公式的不同之处在于求和位置的不同,一个是在 log 内求和,一个是在 log 外求和。作者通过分析这两个损失函数都拥有以下特性:
1. 能够泛化到任意数量的正样本:保证了模型能够将属于同一类的样本聚的更紧密;
2. 通过求和操作,能够进一步利用负样本增强对比学习的性能:这两个公式都是在所有的负样本挑选上进行了求和,效果有点类似 noise contrastive estimation 和 n-pair losses [2] [3]
3.能够更好的实现强负样本(正样本)的选择:通过考虑额外的标签信息,模型在正负样本的选择上可信度就更好,属于同一类别的样本彼此之间会作为正样本, 保证了类内特征的学习,属于不同类别的样本才会被作为负样本,同时求和操作是在所有挑选的负样本上进行的,因此负样本也可以得到充分的保证。
2.3 实验
有了这样的一个损失函数之后,作者分别在不同的方法和不同的数据集上进行效果的验证,以下是相关实验结果:
从这些实验结果上可以看出作者提出的方法确实有效提升了模型的性能。
从这个工作中,可以看出通过充分利用已有数据,在选择样本的时候能够更好的选择正样本,实现了对比学习性能的提升,这也为我们将标签信息融入到模型中提供了参考的思路。
HCL
论文标题:
Contrastive Learning with Hard Negative Samples
收录会议:
ICLR 2021
论文链接:
https://arxiv.org/abs/2010.04592
代码链接:
https://github.com/joshr17/HCL
3.1 亮点
本文首次提出一种利用采样分布实现更好的负采样的方法,并且给出了一种在缺乏真实的不相似信息的条件下如何进行采样的采样策略。在不使用标签的条件下实现了更好的负采样,提升了对比学习的性能。
3.2 方法
首先是整个方法的思路图,在传统的对比学习负采样工作中,主要是对同一个 batch 中的非锚点随机采样,作为负样本;或者是前一个工作中利用标签信息进行负样本选择。那么这些工作确实会选择到一个负样本,并将其分开。
但这些工作也存在一些问题,一些简单的负样本能够被分的很开,而一些距离较近的负样本则并没有享受到对比学习带来的优惠,他们之间依然是难分的,这些负样本就可以认为是强负样本(离样本点很近但确实又不属于同一类的样本),例如图中的下方例子。为了实现这个目标,作者首先定义了什么是好的强负样本,它们需要满足两个条件:
  1. 与原始样本拥有不同的标签
  2. 与原始样本尽可能的相似
为了满足这个条件,那就要完成使用无监督的方法删选出不属于同一类的样本,这个目标感觉更像是一个监督分类问题。对无监督来说过于复杂了,为此,作者进行了一些妥协,即尽量满足条件 1,在对样本难度要求不那么大的时候,可以忽略条件 2。接下来就是具体的实施办法。
作者首先指出条件一的目标就是要设计一个通过 embedding 和锚点样本可以得到的概率分布 q,在这个分布上,能够采样出一批满足条件的负样本,为此,作者首先给出采样分布函数:
即难负样本的分布是以于锚点样本不同为条件的概率分布,具体可以通过锚点样本与负样本的向量点积之后,先乘以一个系数,然后作为指数项在于单纯负样本的分布相乘。值越大,代表这个样本越难,那么这个样本就更应该被采到。但这个时候条件 1 依然是不满足的,因为在无标签的条件下,我们无法得知采到的负样本是否真的与锚点样本的标签是不一致的。为了解决这个问题,这里作者使用了 PU-learning [5] 的方法重新了上述分布,即得到了如下形式:
即把负样本拆分成来自同一标签的分布和来自不同标签的分布两个部分,则来自同一个标签的分布使用和第一个公式相似的方法,可以得到
那么满足两个条件的负样本分布就可以表示为如下形式:
在此基础上,针对原始对比损失和只使用难负样本的对比损失就可以表示为如下形式:
这个目标函数只需要估计期望 和 即可,而针对 和 的采样,本文采用了经典了蒙特卡洛重要性采样:
式子右边分母的和是两个配分函数,可以用均值近似:
至此,整个技术部分就完成了介绍。整体看着十分复杂,设计多种多样的抽样方法。但在具体实现过程中,做着吃出,通过重新调整目标函数的权重,而不是采样过程,只需要额外的两行代码就能够实现整个方法,作者在附录中还贴心的给出来实验代码:
3.3 实验
作者选择 SimCLR 作为 baseline 在多个数据集上进行了相关的实验,实验结果如下:
1. 图像表征
2. 图的表征
3. 句子表征
从这些实验结果中可以充分证明作者提出的方法的有效性。同时,为了更好的展示作者提出的方法的优越性,作者还对强负样本进行详细的分析,例如是否更难的样本一定更好?避免错误的样本是否会改善整个采样?通过这些实验验证,作者进一步展示了所提出的方法的优越性。
False Negative Cancellation
论文标题:
Boosting Contrastive Self-Supervised Learning with False Negative Cancellation
论文链接:
https://arxiv.org/abs/2011.11765
4.1 亮点
本文首次关注负样本的正确性,提出一种 false negative cancellation 的方法,通过将假负样本从对比损失计算中删除提升对比学习的性能。作者还提出了一种无监督的识别假负样本的方法,在无监督条件下实现对比学习性能的提升。
4.2 方法
在对比学习中,正例一般是通过数据增强的方法得到,因此它的准确性是可以保证的。但负例的准确性相对来说比较难以保证,同一个 batch 中的其他样本有可能是和锚点样本属于同一类,例如上图。
在这种情况下,将右侧的样本作为负例一方面会使得模型忽略输入所包含的隐式语义信息,另一方面则会影响模型的收敛速度。之前的方法大多集中在如何选择质量更高的正负样本,忽略了样本的准确性。为此,作者就从这个角度展开研究。
一个直观的思路,既然负例样本的准确性之前没有考虑过,那考虑一下不就好了,在对比学习的损失中将那些假负例直接删除,只留下真负例不就好了。基于这样的想法,作者直接对损失函数进行了修改,框架图可以表示为下图:
首先就是识别出来假负例,然后将其从负例样本中删除,更进一步,为了更加充分的利用数据,还可以将这些假负例作为真正例来使用,从而进一步提升对比学习的效果,而且这种形式还可以实现第一个工作中提到的多对对对比形式。具体形式化可以表现为如下方式:
首先是原始的对比学习损失函数:
当我们识别出 batch 中的假负例集合 的时候,我们直接将这些内容删除即可,
更进一步,既然这些样本 是假负例,那么他们就是真正例,也就是说可以将这些作为正例的样本进一步提升对比学习的性能,
思路非常简单且易于理解和实现,那么关键问题来了,如何确定假负例?和第一个工作类似使用标签的话那就和第一个工作区别不大了,如何在无标签的条件下实现假负例的识别呢?这个就是另一个创新点
作者通过分析数据发现,假负例拥有以下两个特点:
1. 假负例是来自不同输入数据,但和锚点数据拥有相同语义内容,因此他们之间存在一定的相似度
2. 假负例可能和锚点没有那么相似,但是他和锚点的增强样本必然有更大的一个相似度,因为每个增强样本都是从不同角度对锚点的一个表示。
基于以上者两个发现,作者提出了一种无监督的假负例样本识别方法,首先举个例子:
从这个例子中可以看出,右侧蓝框的图片不是左侧锚点样本的增强样本,因此它会被作为负样本,但实际上这个样本和左侧样本的 support views 存在比较高的相似度,也应该被当作正样本。也就是说,我们可以通过分析负样本与锚点样本的不同数据增强样本之间的相似度计算来找到那些假负例。为此,作者提出了自己的方法,具体流程如下:
1. 对每个锚点样本,除了生成增强样本,同时也会额外生成一些增强样本,组成 support set
2. 针对每个负样本,分别计算负样本与 support set 中的每个样本之间的相似度(可以使用不同的相似度计算方法)
3. 将得到的相似度得分进行整合(不同的整合方法)
4. 根据得到的最终相似度得分,选择出合适的负样本,将其作为假负样本集合,用于损失函数计算。
以上就是整个方法的技术部分,非常简单易理解,但感觉特别有意思。
4.3 实验
为了验证作者提出的方法的效果,作者从多个角度进行了模型效果的验证:
1. 整体的实验效果:
2. 两种损失函数的对比
3. 假负例选择策略的对比
以上只展示了部分实验结果,为了充分验证作者提出的假负例取消策略,作者进行了多角度的实验验证,一次来充分说明作者提出的方法的效果。美中不足的是作者只进行了 CV 方面的实验,如果可以加一些 NLP 相关的实验,那就更好了。
总结
本文简单介绍了在对比学习的采样中设计更好的采样策略提升对比学习性能的方法,包括直接使用已有标签,构建更好的概率分布实现更好的样本选择,以及通过对假负样本的识别和重利用提升对比学习的性能,整体思路非常有意思。而确定采样样本的质量能够有效提升模型的性能,这方面还有更多值得研究的,例如如何确定选取样本的质量,如何选择更合适的数据增强策略,如何提升所选取的样本的可信度等等。这方面的研究是一个非常有意思的研究方向。
参考文献
[1] Khosla P, Teterwak P, Wang C, et al. Supervised contrastive learning[J]. arXiv preprint arXiv:2004.11362, 2020. 
[2] Gutmann M, Hyvärinen A. Noise-contrastive estimation: A new estimation principle for unnormalized statistical models[C]//Proceedings of the thirteenth international conference on artificial intelligence and statistics. JMLR Workshop and Conference Proceedings, 2010 
[3] Sohn K. Improved deep metric learning with multi-class n-pair loss objective[C]//Advances in neural information processing systems. 2016: 1857-1865. [^4]: Robinson J, Chuang C Y, Sra S, et al. Contrastive learning with hard negative samples[J]. arXiv preprint arXiv:2010.04592, 2020. 
[5] Elkan C, Noto K. Learning classifiers from only positive and unlabeled data[C]//Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining. 2008: 213-220. 
[6] Huynh T, Kornblith S, Walter M R, et al. Boosting contrastive self-supervised learning with false negative cancellation[J]. arXiv preprint arXiv:2011.11765, 2020.
特别鸣谢
感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。
更多阅读
#投 稿 通 道#
 让你的文字被更多人看到 
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected] 
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
·
·
继续阅读
阅读原文