对比损失Contrastive Loss(CVPR 2006)原理解析

paper:http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf

 

本文提出的对比损失contrastive loss被广泛应用于自监督模型中,但最初对比损失是作为一个特征降维方法而提出的。 

摘要

降维是学习一种映射关系,通过这种映射关系,将一组高维输入点映射到一个低维流形上,输入空间中的“相似”点映射到流形上后对应点之间的距离比较近。大多数现有的降维方法存在两个缺点,一是它们中的大多数都依赖于输入空间中一个有意义并且可计算的距离度量,二是它们没有计算一个可以精确地映射新的输入样本的“函数”,这些新的输入样本和训练样本的关系是未知的。

本文提出了一种通过学习不变映射的降维方法(Dimensionality Reduction by Learning an Invariant Mapping, DrLIM)来学习一个全局相关非线性映射函数,从而将数据均匀地映射到输出流形。这种学习仅依赖于邻域关系而不需要输入空间中的任何距离度量。通过实验证明,该方法可以学习到对输入某些变换的不变映射。

现有方法存在的问题

当前大多数降维方法存在两点不足,一是它们无法生成一个函数或映射可以应用于与训练样本关系未知的新样本,二是许多方法都假设输入空间中存在一个有意义并且可计算的距离度量。

当前方法的另一个局限性是,它们倾向于在输出空间中聚类点,有时点的分布过于密集,可能会被认为是退化解。而大家更希望找到一个被样本均匀覆盖的流形。

本文的创新点

本文提出的Dimensionality Reduction by Learning an Invariant Mapping (DrLIM),为上述问题提供了一种解决方法。DrLIM是一种学习全局相关非线性函数的方法,该函数将数据映射到一个低维流形。该方法具有四个基本特征:

  • 它只需要训练样本之间的邻域关系。这些关系可以来自先验知识或手动标记,并且独立于任何距离度量。
  • 它可以学习具有对输入的复杂非线性变化的不变性的函数,如照明变化和几何畸变。
  • 学习到的函数在没有先验知识的情况下,可以用来映射在训练过程中没有见过的新样本。
  • 由函数生成的映射在某种意义上在输出空间中是“平滑的”和连贯的。

方法介绍

本文提出了一种新的损失函数 - 对比损失函数contrastive loss,通过拉进邻域样本之间的距离拉远非邻域样本之间距离的方式,来学习参数化函数 \(G_{W}\) 的参数 \(W\)。先验知识可以用来判断样本间的邻域关系。

考虑一组高维训练向量 \(\vec{X}_{i} \) 的集和 \(\mathcal{I}\),假设对于每个 \(\vec{X}_{i}\in \mathcal{I}\) 都有一组训练向量 \(S_{\vec{X}_{i} }\) 与之相似。这个相似向量集和可以通过先验知识得到,例如对distortion或temporal proximity的不变性,而不是基于一个简单的距离。一个有意义的映射会将输入空间中相似的向量映射成输出流形中距离相近的点,将不相似的向量映射为距离较远的点。本文提出的对比损失和传统的损失不同,之前的损失函数遍历所有样本计算和对应GT之间的损失然后求和,而对比损失是计算两两样本对之间的损失。假设 \(\vec{X}_{1},\vec{X}_{2}\in \mathcal{I}  \) 是一对输入向量,\(Y\) 是分配给这对向量的二进制标签,如果 \(\vec{X}_{1},\vec{X}_{2}\) 是相似的,\(Y=1\),反之 \(Y=0\)。定义 \(\vec{X}_{1},\vec{X}_{2}\) 之间需要学习的参数化距离 \(D_{W}\) 为 \(G_{W}\) 的输出之间的欧式距离

为了简便,\(D_{W}(\vec{X}_{1},\vec{X}_{2})\) 记为 \(D_{W}\),对比损失的通用形式如下

其中 \((Y,\vec{X}_{1},\vec{X}_{2})^{i}\) 是第 \(i\) 对有标签样本,\(L_{S}\) 是一对相似样本点的偏损失函数,\(L_{D}\) 是一对不相似样本点的偏损失函数,\(P\) 是训练样本对的数量(它可能和样本数量的平方一样大)。

\(L_{S}\) 和 \(L_{D}\) 的设计必须使最小化 \(L\) 等价于减小相似样本对的 \(D_{W}\),增大非相似样本对的 \(D_{W}\)。

损失函数的具体形式如下

其中 \(m>0\) 是一个边界值,它定义了 \(G_{W}(\vec{X})\) 周围的一个半径。不相似的样本对只有它们的距离在这个半径范围内时才会对损失函数有贡献,如下图所示。

 

其中关于不相似样本对的对比项 \(L_{D}\) 是至关重要的,只在所有的相似样本对集合上最小化 \(D_{W}(\vec{X}_{1},\vec{X}_{2})\) 通常会得到一个崩溃解,因为可以通过将 \(G_{W}\) 设为一个常数从而使 \(D_{W}\) 和损失 \(L\) 都变为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
发出的红包

打赏作者

00000cj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值