NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

在这个教程中,我们将介绍对比学习(Contrastive Learning)。 首先,我们将讨论这项技术背后的直觉和基本术语。 然后,我们将介绍最常见的对比训练目标和不同类型的对比学习。

1、对比学习背后的直觉

首先,让我们谈谈对比学习背后的直觉。 下面,我们可以看到一个很多孩子玩的传统游戏:

这个游戏的目标是在右侧寻找与左侧的图片相似的动物。 在我们的例子中,孩子必须在右边的四张图片中搜索一张狗的图片。 首先,孩子必须将四种动物中的每一种与一只狗进行比较,然后得出结论,左下角的图像描绘的是一只狗。

根据许多调查,孩子们通过这种方式比阅读有关动物的书更容易学习新概念。 但是为什么这种方法效果更好呢?

事实证明,对于像孩子这样没有先验知识的人来说,通过对比相似和不同的事物来学习新事物比一个一个地学习识别它们更容易。 起初,孩子可能无法识别狗。 但过了一段时间,孩子学会了区分狗的共同特征,比如鼻子的形状和身体姿势。

2、术语

受先前观察的启发,对比学习旨在通过对比相似和不相似的样本来学习数据的低维表示。 具体来说,它试图在表示空间中使相似的样本彼此靠近,并使用欧氏距离将不同的样本推得更远。

假设我们有三张图片 I_1、I_2 和 I_3。 前两幅图像描绘了一只狗,第三幅图像描绘了一只猫,我们想要为每幅图像(x_1、x_2 和 x_3)学习低维表示:

在对比学习中,我们希望最小化相似样本之间的距离,最大化不同样本之间的距离。 在我们的示例中,我们希望最小化距离 d(x_1, x_2) 并最大化距离 d(x_1, x_3) 和 d(x_2, x_3),其中 d() 是像欧几里得这样的度量函数。

与锚样本(I_1)相似的样本定义为正样本(I_2),与锚样本(I_3)不相似的样本定义为负样本。

3、训练目标

对比学习最重要的部分是引导模型学习对比表示的训练目标。 让我们描述最常见的目标。

3.1 Contrastive Loss

对比损失(Contrastive Loss)是用于对比学习的第一个训练目标之一。 它以一对相似或不相似的样本作为输入,并将相似的样本拉近,将不同的样本拉远。

更正式地说,我们假设我们有一对 (I_i, I_j) 和一个标签 Y,如果样本相似,则标签 Y 等于 0,否则为 1。 为了提取每个样本的低维表示,我们使用卷积神经网络 f 将输入图像 I_i 和 I_j 编码到嵌入空间中,其中 x_i = f(I_i) 和 x_j = f(I_j)。 对比损失定义为:

其中 m 是一个超参数,定义了不同样本之间的距离下界。

如果我们更详细地分析上面的等式,有两种不同的情况:

  • 如果样本相似 (Y=0),则我们将对应于它们的欧氏距离的项 ||x_i - x_j||^2 最小化。
  • 如果样本不相似 (Y=1),那么我们将 max(0, m - ||x_i - x_j||^2) 项最小化,这等同于最大化它们的欧几里得距离直到某个极限 m。

3.2 Triplet Loss

contrastive loss 的改进是 triplet loss,它通过使用样本的三元组而不是样本对来优于前者。

具体来说,它以锚样本 I、正样本 I^{+} 和负样本 I^{-} 作为输入。 在训练过程中,损失强制锚样本和正样本之间的距离小于锚样本和负样本之间的距离:

当我们使用三元组损失训练模型时,我们需要更少的样本来收敛,因为我们同时使用相似和不同的样本更新网络。 这就是为什么 triplet loss 比 contrastive loss 更有效的原因。

4、对比学习的类型

对比学习的思想可以用于有监督和无监督的学习任务。

4.1 有监督对比学习

在这种情况下,每个样本的标签在训练期间都是可用的。 因此,我们只需查看标签即可轻松生成正负对或三元组。

然而,生成所有可能的对或三元组需要大量时间和计算资源。 此外,在每个数据集中,有许多已经满足对比训练目标并给出零损失的负对或三元组,导致训练收敛缓慢。

为了解决这个问题,我们必须生成硬对和硬三元组,这意味着它们的损失值很高,即相距很远的相似对和非常接近的不同对。 许多 hard negative 挖掘方法已经被提出,这些方法通常使用快速搜索算法来研究 hard pairs 和 triplets 的表示空间。 在自然语言处理中,生成硬否定句对的一种简单方法是在锚句中添加一个否定词。

4.2 无监督对比学习

当我们没有标记样本时,我们会使用自我监督学习,我们利用数据的某些属性来生成伪标签。

用于无监督对比学习的著名自监督框架是 SimCLR。 它的主要思想是通过在锚图像中应用随机变换(如裁剪、翻转和颜色抖动)来生成正图像对,因为这些变化保持图像的标签不变:


原文链接:An Introduction to Contrastive Learning

BimAnt翻译整理,转载请标明出处