【学习笔记--短文--对比学习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角度等方面分块介绍一些有价值的研究工作。希望和大家一起进步!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对比损失Contrastive Loss)是一个用于度量相似度或距离的损失函数。在PyTorch中,我们可以使用这个损失函数来训练一些需要度量相似度或距离的模型,比如人脸识别、语音识别等。该损失函数的计算方式是将正样本(相似样本)的距离(或相似度)降低,将负样本(不相似样本)的距离(或相似度)增加。 ### 回答2: 对比损失是一种针对分类问题的常见损失函数,用于衡量两个样本之间的相似度或差异度。PyTorch提供了实现对比损失的API,即`nn.ContrastiveLoss()`。 对比损失的计算方法是将两个输入样本通过一个共享的神经网络模型,得到两个特征向量$f(x_1), f(x_2)$,然后计算它们之间的欧氏距离$d = ||f(x_1)-f(x_2)||_2$,并将其作为损失函数的一部分。如果两个相同类别的样本(即$y_1=y_2$)距离小于一个预设的阈值$m$,则认为它们是“相似”的,此时损失为$d^2$,反之如果是不同类别的样本(即$y_1\neq y_2$)距离大于$m$,则认为它们是“不相似”的,此时损失为$max(0, m-d)^2$。 在PyTorch中,可以使用以下代码来定义对比损失: ```python loss_fn = nn.ContrastiveLoss(margin=1.0) ``` 其中`margin`参数是阈值$m$。 然后将输入样本和相应标签传递给模型并计算损失,例如: ```python x1, x2 = get_input_samples() # 获取输入样本 y = get_input_labels() # 获取标签 out1, out2 = model(x1, x2) # 执行前向计算 loss = loss_fn(out1, out2, y) # 计算损失 ``` 需要注意的是,在使用对比损失函数时,样本对的构造方式至关重要。一般来说,可以使用负采样的方式来构造不同类型的样本对,使得训练集中正样本和负样本数量相等。否则,模型很容易就会收敛到一个平凡的解。 总之,对比损失是一种较为常用的损失函数,可以用于许多不同的任务,例如人脸识别、图像检索、文本分类等。在PyTorch中,可以很方便地使用`nn.ContrastiveLoss()`实现对比损失的计算。 ### 回答3: contrastive loss就是一种损失函数,其主要目的是将同类样本的特征向量拉近,把不同类的特征向量拉远。这有助于使训练模型更加准确地分类不同类的问题。 PyTorch是一种用于构建深度学习模型的开源框架,使用PyTorch可以更方便地实现深度学习算法。 在PyTorch中,实现contrastive loss的方法可以通过构建一个自定义的损失函数来实现。首先,需要定义一个度量函数,用于度量输入样本之间的相似度。其中,常见的度量函数有欧式距离和余弦距离等。然后,在自定义的损失函数中,根据度量函数计算输入样本之间的相似度,并利用这些值来计算损失。 具体而言,对于具有标签的输入数据,损失函数的计算包括以下步骤: 1. 首先,将输入数据分为两类,一类是同类样本,一类是不同类样本。 2. 对于同类样本,使用定义的度量函数度量它们之间的相似度,并将相似度值作为损失函数的一部分。 3. 对于不同类样本,使用度量函数度量它们之间的距离,并将距离值作为损失函数的一部分。同时,需要设置一个阈值,将距离值小于阈值的样本划分为同类样本。 4. 最终,将同类样本和不同类样本的损失加权求和,并反向传播用于调整模型参数。 总之,contrastive loss pytorch可以通过自定义损失函数来实现。对于训练深度学习模型时需要进行分类或相似度匹配问题时,contrastive loss pytorch是一个非常有效的工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值