深度度量学习(Deep Metric Learning, DML) 在很多场景中都发挥着重要的作用,一个经典的应用就是人脸识别,Google 的FaceNet模型使用Triplet-Loss刷新了当时人脸识别的记录,近两年基于Softmax改进的Angular-Softmax, Additive Margin Softmax等在人脸识别成功应用的损失函数,都引入了度量学习的思想。
基于深度学习的度量学习其发展主要体现在各种不同的Loss Function上。最基本的两种损失函数分别是 Contrastive Loss 和 Triplet-Loss。 Contrastive Loss主要是约束成对数据之间的相似或者不相似。Triplet-Loss 则包括一个锚点(anchor) 、一个正样本和一个负样本,它的目的是使得锚点和正样本的距离尽可能小,与负样本的距离尽可能大。一般来说,Triplet-Loss的效果比Contrastive Loss的效果要好,因为他考虑了正负样本与锚点的距离关系。基于上述的两种损失函数衍生出了很多变形,比如将数据丰富的结构化信息加入到Loss中,而不仅仅局限于二元组或三元组。
Ranking-Motivated Structured Losses
先回顾下目前几种基于排序思想的损失函数。
Triplet Loss
其中是三元组的集合,距离使用的是欧氏距离,表示hinge函数。
N-pair-mc
不同于Triplet Loss使用单个的正负样本,这个损失函数利用了数据之间的结构信息来学习到更有区别性的表示。具体来说,样本由一个正样本和N - 1 个负样本组成,这N - 1 个负样本来自于N - 1个不同的类别,即每个类别1个负样本。
其中是来自N个类别的N个样本,分别表示anchor和对应的正样本,是负样本集合。通过引入N-1个负样本来提升性能。
Lifted Struct
这个目标函数比N-pair-mc更进一步,提出引入所有的负样本,通过促使锚点与一个正样本的距离尽可能近,与所有的负样本的距离都大于α。
Proxy-NCA
这个方法提出的目的是去解决采样的问题。假设W代表着训练集中的一小部分数据,在采样时通过选择与W中距离最近的一个样本u作为代理(proxy), 即:
基于选择的proxy, 使用传统的NCA损失:
上述几种损失的示意图如下:
上述的损失函数都存在如下的两点局限性:
1. 这些损失函数虽然都提出了加入更多的负样本来获得结构化的信息,但是使用的负样本仅仅是一小部分;
2. 另外这些损失函数没有考虑类内的数据分布,都追求将同一个class压缩到一个点上。
本文基于上述的两个原因,提出了相应的改进措施。
Methodology
首先对一些符号进行说明: 表示训练集,其中每一组元素表示成对的样本与其标签,总共包括C个类别,即, 表示属于类别c的所有样本,Nc表示相应类别的样本数量。
我们的目标是学习到一个函数f使得正样本对之间的相似度高于负样本之间的相似度。
Pairwise Constraint
为了将正负样本区分开,我们希望负样本之间的距离大于某个阈值α,并且正样本之间的距离小于α-m,即正负样本之间至少有m的间隔。基于此,提出了pairwise margin loss:
其中当时, ,否则, 距离使用欧式距离。
Ranked List Loss
给定一个anchor , 基于相似度对其他样本进行排序,在这个排序的结果中,有Nc-1 个正样本,用表示。同样地,有个负样本,用表示。
Non-trivial Sample Mining
对样本进行合适采样可以加快模型的收敛速率和提高模型性能,比如常见的困难样本挖掘。本文使用的采样策略很简单,就是损失函数不为0的样本,具体来说,对于正样本,损失函数不为0意味着它们与anchor之间的距离大于α-m , 类似的,对于负样本,损失函数不为0意味着它们与anchor之间的距离小于α。
Loss-based Negative Examples Weighting
但是存在一个问题就是负样本的数量通常比较大,并且它们的损失值幅度范围也较大,为了更好的利用它们,作者提出了对负样本进行加权的策略。加权的方式为:
它基于样本多大程度地违反了pairwise的约束。
Optimisation Objective
对于每个anchor , 我们希望使得它与正样本集P的距离越近越好,并且与负样本集Nc,i之间存在着m的间隔,同时,我们还希望使得负样本的之间大于边界α。因此我们相当于使得同一类别位于一个半径为α-m大小的超球体内。因此对于正样本我们使用的损失函数为:
对于负样本集,考虑到它的样本数量比较大,因此对每个负样本使用加权的方式:
那么整个的损失函数就是:
Learning Deep Models Based on RLL
整个算法的流程如下:
实验
作者在多个数据集上都进行了相关实验,取得了不错的效果。具体可以参考论文的实验部分。