ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何用深度学习来做检索:度量学习中关于排序损失函数的综述(2)

2021-01-09 14:33:06  阅读:167  来源: 互联网

标签:检索 pairs 嵌入 综述 样本 batch 损失 三元组 学习


导读

今天是度量学习损失函数的第二部分,N-Pair和Angular损失。

这是排序损失综述的第二部分。第一部分涵盖了对比损失和三元组损失。在这一部分中,给出了N-pairs和angular损失。

N-Pairs Loss

对比损失和三元组损失都利用欧氏距离来量化点之间的相似性。此外,训练小批中的每个锚点都与一个单个负样本配对。N-Pairs损失改变了这两个假设。首先,利用余弦相似度来量化点之间的相似度。因此,N-pairs损失使用两个向量之间的角度来比较嵌入,而不是范数。这并不是很大的变化,所以它的表达方式仍然类似于单个三元组(a,p,n)的三元组,如下所示:

图片

N-pairs的公式为单个三元组(a,p,n)使用余弦相似度。相同的嵌入的余弦相似性为1,不同的嵌入的余弦相似性为0。

但是,N-pairs损失的核心思想是为每个锚都配对一个正样本,同时配对所有的负样本。

图片

N-pairs公式将每个锚f_a与batch中的一个正样本f_p和所有的负样本f_n配对。

对于N-pairs,一个训练batch包含来自每个类的单个正样本对。因此,一个大小为B的batch将有B//2对正样本对,每个锚都与(B-2)个负样本配对,如下图所示。

图片

(左)三元组损失对每个锚(f)有一个正样本(f+)和负样本(f-)。(右)N-pairs 锚与一个单一的正样本(f+)和batch中所有的负样本

N-pairs的直觉是利用batch中的所有负样本来指导梯度更新,从而加速收敛。

N-pairs损失通常优于三元组损失,而且没什么要注意的东西。训练batch的大小的上限是由训练类的数量决定的,因为每个类只允许有一个正样本对。相比之下,三元组损失和对比损失batch的大小仅受GPU内存的限制。此外,N-pairs损失学习了一个没有归一化的嵌入。这有两个结果:(1)不同类之间的边界是用角度来定义的,(2)可以避免退化的嵌入增长到无限大,一个正则化器,来约束嵌入空间,是必需的。

Angular Loss

Angular loss解决了三元组损失的两个限制。首先,三元组损失假设在不同类别之间有固定的margin m。固定的margin是不可取的,因为不同的类有不同的类内变化,如下图所示:

图片

t-SNE为斯坦福汽车数据集计算的特征嵌入示例,其中福特Ranger SuperCab(右)的图像分布比沃尔沃C30两厢车(左)更多样化。传统的三元组损失难以处理这种不平衡的类内变化。提出的angular损失解决了这个问题,通过在负样本点上最小化具有尺度不变性的角度。

第二个限制是三元组损失是如何产生负样本的梯度的。下图显示了为什么负梯度的方向可能不是最佳的,也就是说,不能保证远离正样本的类中心。

图片

如果不保证远离锚点x_a和正样本x_p属于的类,负样本x_n的梯度可能不是最优的,它不垂直于直线[x_a,x_p]。

为了解决这两个限制,作者建议使用n的角度代替margin m,并在负样本点x_n处纠正梯度。不是基于距离把点往远处推,目标是最小化角度n,即,使三角形a-n-b在n点处的角度更小。下一个图说明angular loss的公式将负样本点x_n推离xc,xc为由x_a和x_p定义的局部簇的中心。另外,锚点x_a和正样本点x_p被彼此拖向对方。

图片

使用生成的三元组的角度约束的说明。(a)直接使∠n最小是不稳定的,因为它会把x_n拖向x_a。(b)更稳定的是最小化由[x_m,x_n,x_c]重构出来的三角形的∠n ',其中x_c是x_a,x_p之间的中心。

与原来的三元组损耗只依赖于两点(例如grad = x_a - x_n)相比, angular loss的梯度要稳健得多,因为它们同时考虑了所有三点。另外,请注意,与基于距离的度量相比,操纵角度n '不仅是旋转不变的,而且本质上也是尺度不变的。

我的一些建议:

N-pairs和Angular loss通常优于原始的三元组损失。然而,在比较这些方法时,需要考虑一些重要的参数。

  • 用于训练三元组损失的采样策略会导致显著的性能差异。如果避免了模型崩溃,困难样本挖掘是有效的,并且收敛速度更快。

  • 训练数据集的性质是另一个重要因素。当进行行人重识别或人脸聚类时,我们可以假设每个类由单个簇表示,即具有小的类内变化的单一模式。然而,一些检索数据集,如CUB-200-2011和Stanford Online Products有很多类内变化。根据经验,hard triplet loss在人/人脸再识别任务中工作得更好,而N-pairs和 Angular losses在CUB-200和Stanford Online Product数据集上工作得更好。

  • 当使用一个新的检索任务和调整一个新的训练数据集的超参数(学习率和batch_size)时,我发现semi-hard三元组损失是最稳定的。它没有达到最好的性能,但它是最不可能退化的。

标签:检索,pairs,嵌入,综述,样本,batch,损失,三元组,学习
来源: https://blog.csdn.net/update7/article/details/112391276

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有