对比损失Contrastive Loss

【时间】2-019.01.21

【题目】对比损失Contrastive Loss

PS:本文转载自Contrastive Loss

Contrastive Loss

在传统的siamese network中一般使用Contrastive Loss作为损失函数,这种损失函数可以有效的处理孪生神经网络中的paired data的关系。

1531909-0244cbc55e300cd2.png

siamese network-孪生神经网络
contrastive loss的表达式如下:

1531909-0ecc6b2518f1afe1.png
其中d=||an-bn||2,代表两个样本的欧式距离,y为两个样本是否匹配的标签,y=1代表两个样本相似或者匹配,y=0则代表不匹配,margin为设定的阈值。
这种损失函数最初来源于Yann LeCun的Dimensionality Reduction by Learning an Invariant Mapping,主要是用在降维中,即本来相似的样本,在经过降维(特征提取)后,在特征空间中,两个样本仍旧相似;而原本不相似的样本,在经过降维后,在特征空间中,两个样本仍旧不相似。

### 对比损失Contrastive Loss)概述 对比损失是一种用于训练神经网络的损失函数,其核心目标在于优化嵌入空间中的样本距离关系。具体而言,它通过拉近相似样本的距离并推远不相似样本的距离来实现这一目的[^1]。 #### 计算方法 对比损失的核心思想基于一对输入数据 \( (x_1, x_2) \),以及它们之间的标签 \( y \in \{0, 1\} \),其中 \( y=0 \) 表示两个样本属于相同类别,而 \( y=1 \) 则表示两者不属于同一类别。假设这两个样本经过模型映射到嵌入向量分别为 \( f(x_1) \) 和 \( f(x_2) \),则对比损失定义如下: \[ L_{contrastive}(f(x_1), f(x_2)) = y \cdot d(f(x_1), f(x_2))^2 + (1-y) \cdot [\max(0, m-d(f(x_1), f(x_2)))^2 ] \] 其中: - \( d(f(x_1), f(x_2)) \) 是两嵌入向量间的欧氏距离; - \( m \) 是一个超参数,称为边界值(margin),用来控制负样本间最小允许距离[^2]。 此公式表明当样本对为正类时 (\(y=0\)),会惩罚较大的距离;而对于负类样本 (\(y=1\)),只有在其距离小于设定阈值 \(m\) 的情况下才会施加惩罚。 #### 应用场景 对比损失广泛应用于多种领域,主要包括但不限于以下几个方面[^3]: - **人脸验证**: 可以有效地区分同一个人的不同照片与其他人的照片。 - **度量学习任务**: 这一技术适用于各种需要衡量对象之间差异的任务,比如物体检索、语音识别或签名认证等领域。 #### 在深度学习中的作用 在深度学习框架下,对比损失有助于构建更有效的特征提取器。通过对大量标注好的成对数据的学习过程,使得最终得到的特征能够更好地反映实际需求中的相似性和区别性标准。这不仅提高了分类准确性,在无监督或者半监督环境下也展现了强大的泛化能力。 ```python import torch import torch.nn as nn class ContrastiveLoss(nn.Module): def __init__(self, margin=1.0): super(ContrastiveLoss, self).__init__() self.margin = margin def forward(self, output1, output2, label): euclidean_distance = nn.functional.pairwise_distance(output1, output2) loss_contrastive = torch.mean((label) * torch.pow(euclidean_distance, 2) + (1-label) * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2)) return loss_contrastive ``` 上述代码片段展示了一个简单的 PyTorch 实现版本的对比损失函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值