什么是对比学习(Contrastive Learning)?

本文翻译自:https://analyticsindiamag.com/contrastive-learning-self-supervised-ml/

近年来,自我监督模式的成功可以归因于研究者对对比学习这一自我监督学习范式的重新兴趣。例如,人类可以辨认出野外的物体,即使我们不记得物体的确切样子。

我们通过记住高层特征而忽略微观层面的细节来做到这一点。所以,现在的问题是,我们是否可以建立一个不关注像素级细节,只编码足以区分不同对象的高级特征的表示学习算法?通过对比学习,研究人员正试图解决这一问题。

最近,甚至连Google的SimCLR也展示了对比学习的含义,我们将在本文的最后简要介绍这一点。

对比学习的基本原则

via Ankesh Anand

对比学习是一种为ML模型描述相似和不同事物的任务的方法。利用这种方法,可以训练机器学习模型来区分相似和不同的图像。

对比学习的内部工作可以表述为一个分数函数,它是衡量两个特征之间相似度的一个尺度。

在这里

x+是与x相似的数据点,称为阳性样本

x−是与x不同的数据点,称为阴性样本

在此基础上,可以构建一个softmax分类器来正确地对正样本和负样本进行分类。在最近引入的 SimCLR 框架中也可以找到这种技术的类似应用。

应用对比学习(Contrastive Learning)

via Google AI

谷歌推出了一个名为“SimCLR”的框架,使用对比学习。该框架首先学习未标记数据集上图像的一般表示,然后针对给定的分类任务,使用带标签图像的小数据集对其进行微调。

通过同时最大化同一图像的不同版本或视图之间的一致性,并通过对比学习缩小差异来学习基本表征。

当使用这个对比目标更新神经网络的参数时,相应视图的表示相互“吸引”,而非对应视图的表示相互“排斥”。

这个博客中,对原始论文作了更细致的解释。

程序如下:

  1. 首先,从原始图像生成一定大小的批处理数据(Batch),比如N
  2. 对于这个批处理中的每个图像,应用一个随机变换函数来获得一对两个图像
  3. 一对图像中的每个增强图像都通过一个编码器来获得图像表示。
  4. 两个增强图像的表示然后通过一个非线性密集层,然后是一个ReLU,然后是另一个密集层。这些图像被传递到一系列这些层上,以应用非线性变换并将其投影到表示中
  5. 对于批处理中的每个增强图像,获取一个嵌入向量。

现在,图像的两个增强版本之间的相似性是用余弦相似性来计算的。SimCLR使用“NT-Xent损失”(标准化的温度标度交叉熵损失),即所谓的对比损失

via amitness

首先,逐个获取批处理中的增广对。然后应用一个softmax函数来计算这两个图像相似的概率。

via amitness

如上所示,softmax函数可用于计算两个增强cat图像的相似性,并将批处理中的所有剩余图像作为不同的图像(负对)进行采样。

基于这种损失,编码器和投影头的表示会随着时间的推移而改进,并且得到的表示将相似的图像放在更近的空间中。

SimCLR的实验结果表明,它在ImageNet上的性能优于以往的自监督学习方法。

其他相关博客:

https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html

https://amitness.com/2020/03/illustrated-simclr/

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据