度量学习介绍

知乎大神Flood Sung发表在CVPR2018上的paper,介绍了一种基于metric的模式识别方法,创新之处在于它不同于常用的matric-based方法,使用人为定义的度量,像简单的欧式距离、马氏距离,而是采用了用神经网络去训练这个度量,模型虽然简单,但是效果却很显著。

1、度量(Metric)

先说一下关于度量这个概念:在数学中,一个度量(或距离函数)是一个定义集合中元素之间距离的函数。一个具有度量的集合被称为度量空间

2、度量学习的作用

度量学习也叫作相似度学习,根据这个叫法作用就很明确了。

之所以要进行度量学习,一方面在一些算法中需要依赖给定的度量:如Kmeans在进行聚类的时候就用到了欧式距离来计算样本点到中心的距离、KNN算法也用到了欧式距离等。这里计算的度量,就是比较样本点与中心点的相似度。

这里的度量学习在模式识别领域,尤其是在图像识别这方面,在比较两张图片是否是相同的物体,就通过比较两张图片的相似度,相似度大可能性就高。

### 关于度量学习中的损失函数 #### 损失函数介绍 度量学习旨在通过调整样本之间的距离来改进相似性判断。为了实现这一目标,设计合理的损失函数至关重要。在度量学习领域内,三元组损失(Triplet Loss)、对比损失(Contrastive Loss)以及多类N-pair损失等都是常用的选择[^1]。 #### 计算方式 - **对比损失(Contrastive Loss)**:该方法基于成对数据计算,如果两个输入属于同一类别,则希望它们的距离尽可能小;反之则大。具体表达式如下: ```python def contrastive_loss(d, y, margin=1.0): """ d: 距离度量结果 y: 类别标签 (相同为0 不同为1) margin: 边界参数 """ loss = torch.mean(y * torch.pow(d, 2) + (1 - y) * torch.pow(torch.clamp(margin - d, min=0.0), 2)) return loss ``` - **三元组损失(Triplet Loss)**:此策略涉及三个样例——锚点(anchor),正样本(positive) 和负样本(negative)。目的是使来自同一个体的不同表示更接近,而不同个体间的差异更大。其公式可以写作: ```python def triplet_loss(anchor, positive, negative, alpha=0.2): pos_dist = torch.sum((anchor - positive).pow(2), dim=-1) neg_dist = torch.sum((anchor - negative).pow(2), dim=-1) basic_loss = pos_dist - neg_dist + alpha loss = torch.max(basic_loss, torch.zeros_like(basic_loss)) return torch.mean(loss) ``` 这些损失函数的设计使得模型能够更好地捕捉特征空间内的结构化信息,从而提高识别性能[^2]。 #### 应用场景 这类损失函数广泛应用于人脸识别、图像检索等领域,在这些任务中,衡量对象间的关系变得尤为重要。例如,在人脸识别系统里,利用上述提到的方法可以让算法区分不同人的脸部特征更加精准;而在商品推荐方面,则有助于找到与用户兴趣最匹配的商品[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值