自监督学习——对比学习SimCLR框架(原理+代码)

1原理

对比学习

通过比较不同实例之间的相似性和差异性来进行学习。在对比学习中,我们将输入数据分为不同的类别或组(正负样本对),并通过比较样本之间的差异来提取特征或进行分类。
自监督学习——对比学习SimCLR框架(原理+代码)_第1张图片

样本相似度

对比学习有几种不同的方法,其中最常见的是基于距离度量的方法。这些方法使用距离函数来度量两个实例之间的相似性,例如欧氏距离余弦相似度。通过计算实例之间的距离,我们可以找到最相似或最不相似的实例,从而进行特征选择、相似性匹配或分类任务。(正样本对相似度越近越好,负样本对相似度越远越好)
自监督学习——对比学习SimCLR框架(原理+代码)_第2张图片

SimCLR——对比学习通过度量学习,提供特征提取的能力
自监督学习——对比学习SimCLR框架(原理+代码)_第3张图片

  1. 取一个输入图像:同1张图像进行2种数据增强,形成一个正样本对儿;不同图像之间是负样本对儿。
  2. 准备2个随机的图像增强:旋转,颜色/饱和度/亮度变化,缩放,裁剪等。文中详细讨论了增强的范围,并分析了哪些增广效果最好。
  3. 特征提取:运行一个深度神经网络(最好是卷积神经网络,如ViT、ResNet50)来获得那些增强图像的图像特征表示(嵌入)
  4. 特征投影:运行一个小的全连接线性神经网络,将嵌入投影到另一个向量空间。
  5. 计算loss:计算对比损失并通过两个网络进行反向传播。当来自同一图像的投影相似时,对比损失减少。投影之间的相似度可以是任意的,这里我使用余弦相似度,和论文中一样。
  6. 下游任务:对比学习得到Encoder做为特征提取器,根据下游任务的数据集进行微调Finetuin。

自监督学习——对比学习SimCLR框架(原理+代码)_第4张图片
数据要多,batch要大(batchsize=8192)
自监督学习——对比学习SimCLR框架(原理+代码)_第5张图片
正负样本对的构建,不需要标注
自监督学习——对比学习SimCLR框架(原理+代码)_第6张图片

损失loss函数怎么设计?

l i , j = − l o g e x p ( s i m ( z i , z j ) / t ) ∑ k = 1 2 N 1 [ k ! = i ] e x p ( s i m ( z i , z k ) / t l_{i,j}=-log{\frac{exp(sim(z_i,z_j)/t)}{\sum_{k=1}^{2N}1_{[k!=i]}exp(sim(z_i,z_k)/t}} li,j=logk=12N1[k!=i]exp(sim(zi,zk)/texp(sim(zi,zj)/t)
其中,分子是同类之间的相似度(正样本之间的距离),分母是不同类之间的相似度(负样本对之间的距离)。 t t t是temperature(尺度<1)参数,用于调整比列。
自监督学习——对比学习SimCLR框架(原理+代码)_第7张图片

2 代码

你可能感兴趣的:(学习)