度量学习-对比学习

度量学习:

度量学习是从数据中学习一种度量数据对象间距离的方法。如图所示,其目标是使得在学得的距离度量下,相似对象间的距离小,不相似对象间的距离大

深度度量学习主要由三方面组成,它们是:样本挖掘、模型结构、损失函数

样本挖掘:

最容易能想到的样本挖掘方法是随机采集正负样本对。但是这种方法采集到的样本对不难区分,模型无法从这些数据中学到足够有信息量的知识。因此就需要采用一些样本挖掘方法,从数据集中找到难区分的样本对。

一组典型的样本由anchor、negative与positive组成。positive是和anchor类别相同的正样本,negative是和anchor类别不同副样本。根据anchor与正样本及负样本之间的距离不同,可以将样本挖掘分为如下图所示的3类。

Hard Negative Mining:使用训练集训练后得到的假阳性样本作为负样本

Semi-Hard Negative Mining:在某个margin范围内寻找负样本

Easy Negative Mining:在某个margin范围外找到的负样本

(margin具体解释见损失函数部分)

进行样本挖掘的优点:

模型更容易学到有用的知识,有利于提升模型的区分能力。

有利于防止过拟合。如果模型一直看到容易区分的样本,容易使模型发生过拟合,陷入局部最优值。

有利于降低训练的时间复杂度。遍历数据中的所有(anchor, positive, negative)三元组需要O(n^3)的时间复杂度,而选择少量难以区分的数据对模型进行训练就可以达到同样的效果。

模型结构

典型的对比学习模型结构有Siamese Network(孪生网络)和Triplet Network。

损失函数

Contrastive Loss是最简单也最直观的损失函数:

直观上分析这个公式,当两个样本的标签相同时,模型的损失函数值为这两个样本在特征空间内的距离,这时梯度回传是为了使这两个样本更“靠近”。而当这两个样本的标签不同时,这里的 α 是 margin,当这两个样本对的在特征空间的距离大于 margin 时,就使损失为0,即不更新网络维持现状,当小于 margin 时,我们就惩罚模型,使这两个样本的距离不断逼近 margin。

同时 margin 更重要的作用是避免模型欺骗损失函数,即将所有的样本都映射到特征空间的同一个点,学到一个“捷径”使损失不断接近0。

什么是对比学习?

对比学习是一种自监督学习方法,用于在没有标签的情况下,通过让模型学习哪些数据点相似或不同来学习数据集的一般特征。

让我们从一个简单的例子开始。想象一下,你是一个试图理解世界的新生婴儿。在家里,假设你有两只猫和一只狗。

即使没有人告诉你它们是“猫”和“狗”,你仍可能会意识到,与狗相比,这两只猫看起来很相似。

仅仅通过识别它们之间的异同,我们的大脑就可以了解我们的世界中物体的高阶特征。

例如,我们可能意识地认识到,两只猫有尖尖的耳朵,而狗有下垂的耳朵。或者我们可以对比狗突出的鼻子和猫扁平脸。

本质上,对比学习允许我们的机器学习模型做同样的事情。它会观察哪些数据点对“相似”和“不同”,以便在执行分类或分割等任务之前了解数据更高阶的特征。

为什么这个功能如此强大?

这是因为我们可以在没有任何注释或标签的情况下,训练模型以学习很多关于我们的数据的知识,对比学习属于自监督学习。

在大多数实际场景中,我们没有为每张图像设置标签。以医学成像为例,为了创建标签,专业人士必须花费无数个小时查看图像以手动分类、分割等。

通过对比学习,即使只有一小部分数据集被标记,也可以显著提高模型性能。

 

现在我们了解了对比学习是什么,以及它为什么有用,让我们看看对比学习是如何工作。

整个过程可以简明地描述为三个基本步骤:

(1)对于数据集中的每个图像,我们可以执行两种增强组合(即裁剪 + 调整大小 + 重新着色、调整大小 + 重新着色、裁剪 + 重新着色等)。我们希望模型知道这两个图像是“相似的”,因为它们本质上是同一图像的不同版本。

(2)为此,我们可以将这两个图像输入到我们的深度学习模型(Big-CNN,例如 ResNet)中,为每个图像创建向量表示。目标是训练模型输出相似图像的相似表示。

(3)最后,我们尝试通过最小化对比损失函数来最大化两个向量表示的相似性

随着时间的推移,模型将了解到猫的两个图像应该具有相似的表示,而猫的表示应该与狗的表示不同。

这意味着模型能够在不知道图像是什么的情况下区分不同类型的图像!

对比学习与度量学习:

目前,对比学习并没有一个非常明确的定义。综合来看,对比学习跟以下两个目前比较流行的技术关联较深。

Bert采用的自监督学习:Bert采用自监督学习,节约了大量的人工标注成本,可以有效发挥海量数据的潜力。对比学习借鉴了自监督学习的思路,旨在充分利用海量的无标注数据;

度量学习:度量学习的基本思路是让正例特征编码内容距离拉近,负例编码结果距离推远。其中的正例一般是源自有监督数据。对比学习主体思路跟度量学习接近,最大的区别在于其正例是由自监督方式得来。

综上,可以认为对比学习是一种自监督版本的度量学习。

参考文献:

https://blog.csdn.net/cziun/article/details/119118768

https://blog.csdn.net/AmbitionalH/article/details/123444279

https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/122646171

https://zhuanlan.zhihu.com/p/449626899

https://www.cnblogs.com/gaowenxingxing/p/14860451.html

https://kexue.fm/archives/6024

https://zhuanlan.zhihu.com/p/348998459

https://mp.weixin.qq.com/s/MteoquDoks4kuVPA9jzT_Q

 

posted @ 2023-04-04 16:06  TheBigSeven  阅读(1324)  评论(0编辑  收藏  举报