ICode9

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

度量学习DML之Circle Loss

2021-12-26 17:59:28  阅读:466  来源: 互联网

标签:Loss 函数 positive DML 损失 Circle 优化


度量学习的目标:

  1. 相似的或者属于同一类的样本提取到的embedding向量之间具有更高的相似度,或者具有更小的空间距离
  2. 对于out-of samples的样本,也就是未见过的样本,希望也能提取到有效的embedding,也就是模型的泛化能力更好

Circle Loss

论文:《Circle Loss: A Unified Perspective of Pair Similarity Optimization》

参考:Circle Loss 感想 - 知乎

参考:如何理解与看待在cvpr2020中提出的circle loss? - 知乎

        以往的损失函数(如Triplet Loss)是通过训练使positive之间的相似度大于positive和negative之间的相似度,损失值的计算是通过(有时也写作)这种方式实现的,这种计算方式有一个特点,就是为了满足“positive之间的相似度大于positive和negative之间的相似度”这个条件,有两个优化方向:1)、增大;2)、降低。这两个优化方向的权重是相同的,这就导致了在同一个限制条件下,在决策边界上的所有点都满足这个限制条件。如下图(a)中,只要之间满足就行,这条决策边界上的任何点都是符合优化条件的。Cirlcle Loss认为这种方式是不灵活的,直觉上应该是偏离最优目标更远的样本对更应被重视,而不是一视同仁,Circle Loss就是以这个为出发点来设计的,如下图(b)。

         上图中(a)就是传统损失函数的处理方法,当之间不满足时,这时候就需要优化或者,或者同时优化使得满足。在上图(a)中,, ,这两个点都满足当时的不等式条件,那么将C这个点优化到或者哪种结果是最好的呢?

        Circle Loss认为离最优值越远的样本对应该具备更大的优化权重,所以对分别进行了独立加权,这样优化目标就变成了,其中的线性函数,的线性函数,且相互独立,用来控制自适应优化步长(allowing each similarity score to learn at its own pace)。对于上图中的A,B,C三个点,在相同的限制参数控制下,图(a)中将A、B、C可能被优化到决策边界上的任意一点,图(b)中将A、B、C三点优化到圆形的决策边界上,经过Circle Loss优化后的之间的分离度更大,效果更好。

        假设有一个空间特征向量embedding是,假设与属于相同ID的样本有K个,与属于不同ID的样本有L个,即。在Circle Loss中,作者首先提出了一个基础版的损失函数如下:

        从上式可以看出,上述损失函数也是可以同时处理一个batch中的多个positive和多个negative的,分别计算batch中每一个positive和每一个negative之间的损失值,用来控制之间的分离度,起到损失尺度缩放的作用。

        上述损失函数的决策边界是,对于的优化权重是相同的,Circle Loss对此进行改进,使用自学习得到的权重参数来控制的学习步长,Circle loss的损失函数如下:

        是非负的权重参数,用来控制的梯度大小。当与最优值偏离较大时,具有较大的梯度,偏离较小是,具有较小的梯度。假设的最优值分别是,那么对应的定义如下:

        上述公式说明,当时,说明得到的已经足够好了,不需要再进行惩罚了,同理,对于也一样。在优化方法中,限制参数对于是等价的,作用于上就是加上一个,作用于上就是减去一个。但是在上述Circle Loss的公式中,由于引入了,导致的优化不再是等价的了,因此需要对分别使用独立的限制参数,分别记做,Circle Loss的计算公式进一步演变为:

        其中分别用来控制异类和同类之间的margin大小。Circle Loss期望。这样的话Circle Loss就有5个超参数。为了简单起见,作者将p设置如下:

        越小,对于训练集要求得到的预测置信度越高,在训练集上的拟合程度就越高,对于unseen的数据泛化能力就相对差一些,反之同理(不清楚这样理解是否恰当)。这样的话Circle Loss就只有两个超参数了。

        上图是关于超参数的对比实验结果。

        通过上图可以看到,在Circle Loss中,当越小时,得到的越大,越小。

        Circle Loss实际用起来效果确实很nice,在使用时batch_size一定要大,不然效果就不是很nice了,我目前使用的batch_size=2048。

 

参考:深度度量学习-论文简评 - 知乎

参考:深度度量学习中的损失函数 - 知乎

标签:Loss,函数,positive,DML,损失,Circle,优化
来源: https://blog.csdn.net/cxx654/article/details/122158148

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

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

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

ICode9版权所有