【学习笔记--短文--对比学习2】通过对比损失(Contrastive Loss)设计loss function

本篇内容参考对比损失思想设计loss function的方法,有关对比学习相关工作的讲解请细看原文。


目录

一、对比损失介绍(What)

二、对比损失的定义 

 三、一些现有工作

1. Improved Deep Metric Learning with Multi-class N-pair Loss Objective

 2.  Unsupervised Feature Learning via Non-Parametric Instance Discrimination

3. Momentum Contrast for Unsupervised Visual Representation Learning

四、初认识——Contrastive learning


一、对比损失介绍(What

        对比损失在非监督学习中应用很广泛。最早源于 2006 年Yann LeCun的“Dimensionality Reduction by Learning an Invariant Mapping,该损失函数主要是用于降维中,即本来相似的样本,在经过降维(特征提取)后,在特征空间中,两个样本仍旧相似;而原本不相似的样本,在经过降维后,在特征空间中,两个样本仍旧不相似。同样,该损失函数也可以很好的表达成对样本的匹配程度

Paper_Add:Dimensionality Reduction by Learning an Invariant Mapping | IEEE Conference Publication | IEEE Xploreicon-default.png?t=N7T8https://ieeexplore.ieee.org/abstract/document/1640964

        在非监督学习时,对于一个数据集内的所有样本,因为我们没有样本真实标签,所以在对比学习框架下,通常以每张图片作为单独的语义类别,并假设:同一个图片做不同变换后不改变其语义类别,比如一张猫的图片,旋转或局部图片都不能改变其猫的特性。因此,假设对于原始图片 X,分别对其做不同变换得到 A 和 B,此时对比损失希望 A、B 之间的特征距离要小于 A 和任意图片 Y 的特征距离。

二、对比损失的定义 

        对比损失(Contrastive Loss)是对比学习中常用的一种损失函数,它通过比较正样本对和负样本对之间的相似性,引导模型学习有意义的特征表示。在对比损失中,目标是使正样本对的相似性更大,而负样本对的相似性更小。

对比损失的定义如下:

设输入样本为 x_ix_j,它们分别属于同一类别的正样本对,或者来自不同类别的负样本对。对于这两个样本,模型输出的特征表示分别为 f(x_i)f(x_j),通常通过一个神经网络得到。

对比损失的基本形式是欧氏距离(Euclidean Distance)的平方,如下:

L_{ij}=\frac12\cdot y_{ij}\cdot\|f(x_i)-f(x_j)\|_2^2+\frac12\cdot(1-y_{ij})\cdot\max(0,m-\|f(x_i)-f(x_j)\|_2)^2

其中:
· y_{ij}是指示函数,当样本 x_ix_j 属于同一类别时为1,不同类别时为0。
· m 是一个控制负样本对间隔的超参数,通常称为margin
· 欧氏距离用于度量样本对在特征空间中的距离。
· L_{ij} 表示样本对 x_ix_j 的对比损失。

        对比损失的含义是,在正样本对 x_ix_j 属于同一类别时,通过最小化它们的特征表示间的距离来促使相似性增加;而在负样本对时,通过最小化它们的距离与margin之差的平方来促使相似性减小。

对比损失函数L:

L(W,(Y,X_1,X_2))=\frac{1}{N}\sum_{n=1}^{N}YD_W^2+(1-Y)max(m-D_w,0)^2

其中, D_W(X_1,X_2)=||X_1-X_2||_2=(\sum_{i=1}^P(X_1^i-X_2^i)^2)^{\frac12}

D_W代表两个样本特征的欧式距离,P代表特征的维度,Y为两个样本是否匹配的标签(Y = 1代表两个样本相似或匹配,Y = 0代表两个样本不相似或不匹配),M为设定的阈值(超过M的把其loss看作 0,即如果两个不相似特征离得很远,那么对比loss应该是很低的),N为样本数量。

通过 : (X_1,X_2)=||X_1-X_2||_2=(\sum_{i=1}^P(X_1^i-X_2^i)^2)^{\frac12}

可以发现,对比损失可以很好的描述成对样本的匹配程度,能够很好的用于训练提取特征的模型:

(1) 当Y = 1时,即两个样本相似或匹配时,损失函数\begin{aligned}L_s=\frac{1}{N}\sum_{n=1}^NYD_W^2\end{aligned},即如果原本相似或匹配的样本如果其被模型提取的特征欧氏距离很大,说明模型效果不好导致loss很大。

(2) 当Y = 0时,即两个样本不相似或不匹配时,损失函数L_s=(1-Y)max(m-D_w,0)^2,如果这时两个样本被模型提取的特征欧式距离很小,那么loss会变大以增大模型的惩罚从而使loss减小,如果两个样本被模型提取的特征欧式距离很大,说明两个样本特征离得很远,此时如果超过阈值M则把其loss看作 0,此时的 loss很小。

 三、一些现有工作

1. Improved Deep Metric Learning with Multi-class N-pair Loss Objective

Paper_add:https://proceedings.neurips.cc/paper/2016/file/6b180037abbebea991d8b1232f8a8ca9-Paper.pdf

简介:本文是基于 Distance metric learning,目标是学习数据表征,但要求在 embedding space 中保持相似的数据之间的距离近,不相似的数据之间的距离远。其中,N-pair loss指的是——需要从 N 个不同的类中构造 N 对样本——属于自监督学习。

 2.  Unsupervised Feature Learning via Non-Parametric Instance Discrimination

Paper_add:https://arxiv.org/pdf/1805.01978.pdf

简介:本文将 instance discrimination 机智地引入了 memory bank 机制,并且真正地把 loss 用到了 unsupervised learning。该论文主要论述如何通过非参数的 instance discrimination 进行无监督的特征学习。主要的思想是将每个单一实例都看作不同的“类”。
其中,Instance discrimination 区分不同实例,将当前实例于不同实例进行空间划分 memory bank 由数据集中所有样本的表示组成。

3. Momentum Contrast for Unsupervised Visual Representation Learning

Paper_add:https://arxiv.org/pdf/1911.05722.pdf

简介:本文解决了一个非常重要的工程问题:如何节省内存节省时间搞到大量的 negative samples?文章的 motivation源于之前 contrastive learning 存在两种问题:1)在用 online 的 dictionary 时(即是文章中比较的 end-to-end 情形),constrastive learning 的性能会受制于 batch size,或者说显存大小2)在用 offline 的 dictionary 时(即是文章中说的 memory bank(InstDisc)情形),dictionary 是由过时的模型生成的,某种程度上可以理解为 supervision 不干净,影响训练效果。那么很自然的,如果想要一个 trade-off,兼顾 dictionary 的大小和质量。文章给出的解法是对模型的参数空间做 moving average,相当于做一个非常平滑的 update

四、初认识——Contrastive learning

        经过对Contrastive learning的定义和基本知识的学习。大家应该可以发现,设计对比学习模型的重点在于——定义一个合适的对比损失函数和构建对比样本

        对比学习是一种自监督学习方法,通过学习样本之间的相似性和差异性,来学习有意义的特征表示。在设计对比学习模型时,我们可以从下面的一些关键点着重切入:

  1. 对比损失函数的选择: 对比损失函数是对比学习模型的核心。常见的对比损失函数包括Triplet LossContrastive LossN-pair Loss等。这些损失函数在衡量正样本对之间的相似性和负样本对之间的差异性方面有不同的设计思路。选择适合任务和数据特点的对比损失函数非常关键。

  2. 正负样本的构建: 对比学习依赖于构建正负样本对。正样本对应于同一样本的不同视图或增强,而负样本对应于不同样本。合理的样本构建策略有助于提高模型的泛化能力。对于图像任务,可以使用数据增强、随机裁剪等方式生成正负样本对。

  3. 网络架构设计: 对比学习模型的网络架构应当能够捕捉输入样本的有意义表示。常用的网络架构包括Siamese NetworkTriplet Network以及近年来流行的Contrastive Divergence等。网络架构的设计需要考虑模型的深度、宽度以及是否使用预训练模型等因素。

  4. 学习率和优化算法: 对比学习的训练通常需要仔细调整学习率和选择合适的优化算法。适当的学习率可以加速模型收敛,而优化算法的选择可能影响到损失函数的优化效果。

  5. 评估指标: 在设计对比学习模型时,需要定义合适的评估指标来衡量模型的性能。这可能涉及到对比学习任务的具体应用,例如图像检索、特征表示学习等。

  6. 领域特定的调整: 对于不同的任务和应用场景,可能需要进行一些领域特定的调整。这包括选择合适的输入特征、调整损失函数的权重、进行领域自适应等。


        后期,我将整理一篇对比学习高质量论文集,希望能从任务、构建loss角度等方面分块介绍一些有价值的研究工作。希望和大家一起进步!

### 对比学习损失函数在聚类中的应用 对于聚类任务而言,对比学习通过构建正样本对和负样本对来优化模型表示能力。具体到聚类场景下,对比学习的目标是在嵌入空间中拉近属于同一簇的数据点(即正样本),而推远来自不同簇的数据点(即负样本)。为了实现这一目标,通常采用的损失函数形式可以概括为: #### InfoNCE Loss 一种广泛使用的对比损失函数是InfoNCE (Noise Contrastive Estimation),其定义如下: \[ \mathcal{L}_{\text {infoNCE }}=\sum_{i=1}^{N}-\log \frac{\exp (\operatorname{sim}\left(\boldsymbol{z}_i, \boldsymbol{z}_j\right) / \tau)}{\sum_{k=1}^{K} I(k \neq j) \exp (\operatorname{sim}\left(\boldsymbol{z}_i, \boldsymbol{z}_k\right) / \tau)} \] 其中 \( z_i \) 和 \( z_j \) 是同一个实例经过不同变换得到的两个视图对应的表征向量;\( sim() \) 表示相似度度量方式,比如余弦相似度;\( τ \) 则是一个温度参数用来调整分布锐利程度[^1]。 然而,在实际操作过程中发现仅依靠上述标准对比损失难以获得理想的聚类效果,因为这需要大量精心挑选的负样本来维持良好的互信息边界。针对这个问题,研究者们提出了多种改进方案,例如引入额外的正则化项以增强特征表达力或减少对抗噪声干扰等。 #### 正则化损失 Lreg 考虑到直接最大化簇间距离可能带来过拟合风险,有工作建议加入一个专门设计的正则化损失 \( L_{\mathrm{reg}} \),旨在扩大不同基底间的高维特征差异的同时保持一定平滑性。该损失基于成对样本之间余弦相似度 s_ij 的计算,并试图最小化跨类别样本间的这种相似度得分,从而促进更清晰可分的集群结构形成[^5]。 ```python import torch from torch.nn.functional import normalize def info_nce_loss(z_i, z_j, temperature=0.5): """Compute the InfoNCE loss.""" batch_size = z_i.shape[0] # Normalize representations to unit vectors z_i_norm = normalize(z_i) z_j_norm = normalize(z_j) # Compute pairwise cosine similarities between all pairs of samples logits_ii = torch.mm(z_i_norm, z_i_norm.t()) / temperature logits_ij = torch.mm(z_i_norm, z_j_norm.t()) / temperature mask = torch.eye(batch_size).to(logits_ii.device) positives = logits_ij.diag() negatives = torch.cat([logits_ii[mask==0], logits_ij[mask==0]], dim=-1) nominator = torch.exp(positives) denominator = nominator + torch.sum(torch.exp(negatives), dim=-1) return -torch.mean(torch.log(nominator/denominator)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值