一文入门对比学习

对比学习

Contrastive Learning

1. 概述

自监督学习,通过创建正负样本对,来学习样本之间的相同与差异,获得对比条件下的特征,可以用在预训练阶段

2. SimCLRv2

2.1 Data Augmentation

对于数据集中的每一张图像,进行数据增强,增强方法有

  • 裁剪
  • 调整大小
  • 重新着色

从中任意选取方法(1-2种)对数据进行增强得到增强样本A ,进行另外一种增强得到增强样本a,可以配成一对,形成正样本对,A和a之间的特征应当是相似的

对于不同图片之间,形成负样本对,他们之间的特征应当是差别较大的

2.2 训练过程

我们将正样本对(或负样本对)输入到深度学习模型中,为每一个图像创建一个向量表示(特征),目标是正样本对的向量特征相似,而负样本对的向量特征不相似

下面以正样本对为例,阐述其训练过程,如果是负样本,损失函数前加一个负号即可

通过最大化正样本对两个向量表示的相似性,最小化负样本对两个向量表示的相似性,深度学习模型会逐渐学习到猫与猫是相似的,猫与狗是不同的,于是便可以再见到猫和狗的时候,区分出来。

扫描二维码关注公众号,回复: 15361691 查看本文章

关于这个深度学习模型,还有一些注意的点

1. Projection Head

图像经过CNN网络提取特征后,还需要经过几个Dense Layers,这几层网络称之为Projection head(起到映射特征的功能),根据经验,经过这个步骤,可以提高模型性能

2.最大化相似度(损失函数)

我们要做的是衡量两个表示向量之间的距离,来计算他们之间的相似度

在这里插入图片描述

可以选择使用余弦相似度来衡量距离(其它的也可以)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s1oj4iPi-1682751481997)(null)]

两个向量间的距离就是两个向量之间的夹角

我们以这个夹角作为两个向量之间的相似度度量,我们在一个批次中,会有多种图片的读入,我们需要设置一个损失函数来综合所有图片的距离,对于正样本对,距离要小,损失要小,对于负样本对,距离要大,损失要大

在这里插入图片描述

正样本对就是上面说的A和a样本,(B,b),(C,c)等,而负样本对,则是一个批次(N个图像)中,这个正样本与其它样本(非正样本对中的其它样本)的组合(共有(N-1 + N-1个)例如(A,B),(A,C),(A,b),(A,c),

τ为温度系数

关于infoNCE loss的来源与温度系数的作用,可以看这篇文章

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

那么有一个问题是,一个批次N个图像中,如果有两张猫,该怎么办呢,也能算成负样本对嘛?

这是个问题,会有一点副作用的,也有一些论文对这个问题提出了新的解决方案

3. 应用

常用方法:自监督的预训练,有监督的微调,知识蒸馏

猜你喜欢

转载自blog.csdn.net/weixin_45621688/article/details/130440787