对比学习梳理


对比学习的思想是去 拉近相似的样本,推开不相似的样本,而目标是要 从样本中学习到一个好的语义表示空间

自监督对比学习

自监督对比学习是将样本“照镜子”,转为有监督任务。

以图像领域提取图片feature为例,在不使用图片类别等信息的情况下,对无标签的图片做augmentation(旋转、裁剪、添加noise等),将一个batch的样本转为监督任务,具体如下:

  • 一个batch包含N张图,通过augmentation获得 N N N张图,将2N张图输入Network得到 2 N 2N 2N个feature: [ z 1 , z 2 , ⋯   , z N − 1 , z N ] [z_1,z_2,\cdots,z_{N-1},z_N] [z1,z2,,zN1,zN]
  • 对于每个特征 z i z_i zi,都存在一个特征 z j z_j zj与之同源(来自同一张图),所以 z i z_i zi z j z_j zj的距离越接近越好;反之,对于其余 2 N − 2 2N-2 2N2个图片特征,与 z i z_i zi的距离越远越好。

自监督的损失函数如下:
L s e l f = ∑ i ∈ I L i s e l f = − ∑ i ∈ I log ⁡ exp ⁡ ( z i ⋅ z j ( i ) / τ ) ∑ a ∈ A ( i ) exp ⁡ ( z i ⋅ z a / τ ) \mathcal{L}^{self}=\sum_{i\in I}\mathcal{L}_i^{self}=-\sum_{i\in I}\log\cfrac{\exp{\left(z_i\cdot z_{j(i)}/\tau\right)}}{\sum_{a\in A(i)}\exp(z_i\cdot z_a/\tau)} Lself=iILiself=iIlogaA(i)exp(ziza/τ)exp(zizj(i)/τ)
其中, j ( i ) j(i) j(i)是与 i i i来自同一张图片的索引, ⋅ \cdot 代表内积符号, z l z_l zl是l2标准化后的向量, τ ∈ R + \tau\in\mathcal{R}^{+} τR+是一个温度系数, A ( i ) ≡ I \ { i } A(i)\equiv I\backslash \{i\} A(i)I\{i}。index i i i称为anchor,index j ( i ) j(i) j(i)称为positive,另外 2 ( N − 1 ) 2(N-1) 2(N1)个样本( k ∈ A ( i ) \ { j ( i ) } k\in A(i)\backslash\{j(i)\} kA(i)\{j(i)})称为negatives。

自监督思路的不足在于没有考虑同一类图片的特征相关性,例如下图中同属于狗的两张图片距离学习到的特征距离也会越大。

在这里插入图片描述

监督对比学习

Supervised Contrastive Learning

为了让同类图片的特征距离接近,需要引入类别信息,将“自监督”转为“监督”。则对比学习的依据由“是否来自同一张图片”变为"是否属于同一类"。loss公式如下:
L s e l f = ∑ i ∈ I L i s e l f = ∑ i ∈ I − 1 ∣ P ( i ) ∣ ∑ p ∈ P ( i ) log ⁡ exp ⁡ ( z i ⋅ z p / τ ) ∑ a ∈ A ( i ) exp ⁡ ( z i ⋅ z a / τ ) \mathcal{L}^{self}=\sum_{i\in I}\mathcal{L}_i^{self}=\sum_{i\in I}\frac{-1}{\lvert P(i)\rvert}\sum_{p\in P(i)}\log\cfrac{\exp{\left(z_i\cdot z_p/\tau\right)}}{\sum_{a\in A(i)}\exp(z_i\cdot z_a/\tau)} Lself=iILiself=iIP(i)1pP(i)logaA(i)exp(ziza/τ)exp(zizp/τ)
其中 P ( i ) ≡ { p ∈ A ( i ) : y ~ p = y ~ i } P(i)\equiv \{p\in A(i):\tilde{y}_p=\tilde{y}_i\} P(i){pA(i):y~p=y~i}是与样本 i i i所属同一类的样本, ∣ P ( i ) ∣ \lvert P(i)\rvert P(i)是样本个数。

另一种先求和再取 log ⁡ \log log的公式:
L i n s e l f = ∑ i ∈ I L i n , i s e l f = ∑ i ∈ I − log ⁡ { 1 ∣ P ( i ) ∣ ∑ p ∈ P ( i ) exp ⁡ ( z i ⋅ z p / τ ) ∑ a ∈ A ( i ) exp ⁡ ( z i ⋅ z a / τ ) } \mathcal{L}^{self}_{in}=\sum_{i\in I}\mathcal{L}_{in,i}^{self}=\sum_{i\in I}-\log{\left\{\frac{1}{\lvert P(i)\rvert}\sum_{p\in P(i)}\cfrac{\exp{\left(z_i\cdot z_p/\tau\right)}}{\sum_{a\in A(i)}\exp(z_i\cdot z_a/\tau)}\right\}} Linself=iILin,iself=iIlogP(i)1pP(i)aA(i)exp(ziza/τ)exp(zizp/τ)
则对于上述损失函数,与 i i i同类的图片的特征与 i i i的距离越近,余弦距离越大越好;反之,与 i i i异类的图片的特征与 i i i的距离越远,余弦距离越小越好。

相比于自监督学习,监督对比学习的效果如下图:

在这里插入图片描述

监督学习做预训练模型fine-tuning

论文Supervised Contrastive Learning for Pre-trained Language Model Fine-tuning与上述监督学习类似,不过这里应用到预训练模型的fine-tuning上,在分类损失交叉熵的基础上,添加一个对比loss来使得“同类相近,异类远离”。公式如下:
L = ( 1 − λ ) L C E + λ L S C L L C E = − 1 N ∑ i = 1 N ∑ c = 1 C y i , c ⋅ log ⁡ y ^ i , c L S C L = ∑ i = 1 N − 1 N y i − 1 ∑ j = 1 N 1 i ≠ j 1 y i = y j log ⁡ exp ⁡ ( Φ ( x i ) ⋅ Φ ( x j ) / τ ) ∑ k = 1 N 1 i ≠ k exp ⁡ ( Φ ( x i ) ⋅ Φ ( x k ) / τ ) \mathcal{L}=(1-\lambda)\mathcal{L}_{CE}+\lambda\mathcal{L}_{SCL}\\ \mathcal{L}_{CE}=-\frac{1}{N}\sum_{i=1}^N\sum_{c=1}^Cy_{i,c}\cdot\log{\hat{y}_{i,c}}\\ \mathcal{L}_{SCL}=\sum_{i=1}^N-\frac{1}{N_{y_i}-1}\sum_{j=1}^N 1_{i\neq j}1_{y_i=y_j}\log\frac{\exp\left(\Phi(x_i)\cdot\Phi(x_j)/\tau\right)}{\sum_{k=1}^N1_{i\neq k}\exp(\Phi(x_i)\cdot\Phi(x_k)/\tau)} L=(1λ)LCE+λLSCLLCE=N1i=1Nc=1Cyi,clogy^i,cLSCL=i=1NNyi11j=1N1i=j1yi=yjlogk=1N1i=kexp(Φ(xi)Φ(xk)/τ)exp(Φ(xi)Φ(xj)/τ)

对于一个多分类(类别数为 C C C)问题,计算对象为一个batch的样本 { x i , y i } i = 1 , … , N \{x_i,y_i\}_{i=1,\dots,N} {xi,yi}i=1,,N Φ ( ⋅ ) ∈ R d \Phi(\cdot)\in \mathcal{R}^d Φ()Rd表示编码器生成l2标准化后的向量, N y i N_{y_i} Nyi是与 y i y_i yi类别相同的样本数, τ > 0 \tau>0 τ>0是一个温度系数, y i , c y_{i,c} yi,c表示label, y ^ i , c \hat{y}_{i,c} y^i,c表示样本 i i i预测类别 c c c的值, λ \lambda λ是一个超参数用于调节下游任务。

论文中,新增的监督对比学习的损失可以达到如下效果:
在这里插入图片描述

参考

有监督对比学习:Supervised Contrastive Learning

超细节的对比学习和SimCSE知识点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
无监督对比学习是一种用于训练深度神经网络的自监督学习方法,它在没有标签的大规模未标记数据上进行训练。该方法通过使模型学习将相似样本聚集在一起,将不相似样本分开来,从而学习到有用的特征表示。 以下是几种常见的无监督对比学习方法: 1. MoCo(Momentum Contrast):MoCo是一种基于对比学习的方法,它使用了动量更新策略来增强对比学习的性能。它通过构建一个动态的字典来扩展正样本的数量,并使用动量更新策略来提高特征的一致性。 2. SimCLR(Simple Contrastive Learning):SimCLR是一种简单而有效的对比学习方法,它通过最大化正样本间的相似性并最小化负样本间的相似性来进行训练。SimCLR使用了数据增强和大批量训练等技术来提高性能。 3. SwAV(Swapping Assignments between Views):SwAV是一种基于视图交换的对比学习方法,它通过交换不同视图下的样本分配来增强对比学习过程。SwAV还使用了聚类损失来进一步优化特征表示。 4. BYOL(Bootstrap Your Own Latent):BYOL是一种基于自举的对比学习方法,它通过预测一个网络的自我编码器输出来进行训练。BYOL使用了移动平均权重和在线网络更新等技术来提高性能。 5. SimSiam(Simplified Siamese):SimSiam是一种简化的孪生网络对比学习方法,它通过最大化网络预测的一致性来进行训练。相比于传统的对比学习方法,SimSiam省略了负样本的构造过程,简化了训练过程。 这些无监督对比学习方法在图像和自然语言处理等领域都取得了很好的效果,并且被广泛应用于预训练模型的训练中。每种方法都有其独特的特点和优势,可以根据具体任务和数据集选择适合的方法进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值