本文首次撰稿于2021年8月23日,旨在记录一些关于深度度量学习中的心得笔记,仅供个人参考使用。
如文中有误,请予以批评指正!
距离度量公式/相似度指标:
1.欧几里得距离/欧几里得度量/欧式距离:
两点或多点之间的距离表示方法。基于欧几里得距离,两个样本之间的相似度越小,则欧氏距离越大;两个样本之间的相似度越大,则欧式距离越小。
n维空间的欧几里得距离其中,,。
2.马哈拉诺比斯距离/马氏距离:
马氏距离时欧氏距离的一种修正,表示数据之间的协方差距离,主要是为了解决数据中各个维度尺度不一致且相关的问题。
尺度不一致:样本的每个特征拥有不同的单位标准。
尺度相关:样本的特征之间存在相关性。
数据点x,y之间的马氏距离x,y是两个样本数据点,是多维随机变量的协方差矩阵,如果协方差矩阵是单位向量,则表示各维度之间独立同分布,马氏距离简化为欧式距离。
3.出租车几何/曼哈顿距离:
曼哈顿距离标明两个点在标准坐标系上的绝对轴距总和。
曼哈顿距离4.余弦相似度/余弦相似性:
基于余弦相似度,两个样本之间的相似度越小,则余弦相似度越小;两个样本之间的相似度越大,则余弦相似度越大(与欧氏距离相反)。
余弦相似度给出的相似性范围在[-1,1]之间。
余弦相似度计算公式Ps:在深度度量学习中,由于嵌入特征会经过L2范数归一化使得归一化后向量的平方和为1,因此,上述余弦相似度计算公式可约去分母,仅留下向量点积的分子部分。
深度度量学习论文
1.Dimensionality Reduction by Learning an Invariant Mapping(Contrastive loss)(PDF)
Author:Raia Hadsell, Sumit Chopra, Yann LeCun CVPR2006 (Citations:2723)
目标问题:传统的降维有两个缺陷:一是它们没有产生一个从输入到流形空间的可以用于训练关系未知的新样本的函数(或映射);二是需要假设在输入空间存在一个有意义的(可计算的)距离度量。
解决方案:提出了对比损失。对比损失的核心思想为:对于正样本对,需要缩小它们之间的距离;对于负样本对,需要增大它们之间的距离。因此,根据对比损失,当两个样本之间的标签相同时(即anchor与正样本),需要减小它们之间的欧氏距离;当两个样本之间的标签不相同(即anchor与负样本),需要增大它们的之间的欧式距离直到该距离大于margin。
Contrative loss正样本对和负样本对之间的距离与损失的关系如图所示(横坐标为能量(距离),纵坐标为损失):
样本距离与损失关系图其中,红色虚线为正样本对损失,蓝色实现为负样本对损失。可以看出,当正样本对之间的距离减小时,损失降低;当负样本对之间的距离增大时,损失减小,并且当距离大于margin时,损失为0,这与对比损失的思想和公式保持一致。
2.FaceNet: A Unifified Embedding for Face Recognition and Clustering(Triplet loss)(PDF)
Author:Florian Schroff, Dmitry Kalenichenko, James Philbi CVPR2015 (Citations:8460)
目标问题1:解决人脸识别(这个人是谁),人脸验证(是否是同一个人)以及聚类问题。
解决方案1:提出了三元组损失。三元组损失的三元分别指anchor,positive example 和 negative example。三元组损失的核心思想与对比损失一致,对于正样本对,需要缩小它与anchor之间的距离;对于负样本对,需要增大它与anchor之间的距离。不过,三元组损失同时基于正样本对和负样本对的损失进行更新,当负样本与anchor之间的距离小于正样本与anchor的距离加上margin时,才会产生损失。相当于在anchor周围画一个半径为正样本与anchor距离加上margin值的圆,当负样本落在该圆内时,产生损失,将负样本拉远直至脱离圆的半径范围。
期望不等式:负样本距离大于正样本距离加上margin Triplet loss 三元组损失示意图目标问题2:在所有的三元组组合中,一部分组合本身就满足期望函数。这部分三元组组合对训练过程不会产生帮助,反而会降低收敛的速度。因此,需要对三元组组合进行筛选,挑出对模型由训练意义的难例三元组。
解决方案2:提出了三元组筛选策略即筛选出违反期望不等式的三元组样本。对于给定的anchor,我们首先找到距离最远的正样本(难正例)和负样本(难负例)。
3.A Discriminative Feature Learning Approach for Deep Face Recognition(Center loss)(PDF)
Author:Yandong We,Kaipeng Zhang,Zhifeng Li,Yu Qiao ECCV2016 (Citations:2438)
目标问题:首先,作者针对softmax loss的判别能力进行了实验,发现该损失只能进行类间的区别,对于类内的紧致性效果并不佳,因此,通过该损失学习到的特征空间不具备足够的判别能力。
Softmax loss的判别能力可视图:可以发现,类内的样本仍然非常分散,不具备足够的判别能力解决方法:针对类间紧致度问题,作者提出了center loss,用以辅助softmax loss。center loss为每个类别提供一个中心点,通过最小化每一个mini-batch中每个样本到该类样本中心点的距离来达到缩小类内差距的效果。
单纯的center loss softmax loss 辅以center loss4.Triplet-Center Loss for Multi-View 3D Object Retrieval(Triplet-center loss)(PDF)
Author:Xinwei He,Yang Zhou,Zhichao Zhou,Song Bai,Xiang Bai CVPR2018 (Citations:198)
目标问题:Center loss虽然在softmax loss的基础上增强了类内的紧致度,但是由于没有考虑类间的区分度,因此在类间仍然会有部分样本区域重叠。本文针对center loss的上述缺陷加以改进,在center loss的基础上加强了类间的区分度。
解决方案:在center loss的基础上结合triplet loss,提出了triplet-center loss。本质上相当于将triplet loss的anchor替换为center loss中的正类中心,将negative sample替换为center loss中的负类中心,positive sample即为随机样本点。根据损失函数可知,三元组中心损失(TCL)拉近样本与正类中心的距离,并拉远样本与最近负类中心的距离直到大于margin。
Triplet-Center Loss文章针对不同损失的深度特征分布进行了可视化实验,其中,(a)为softmax loss的特征分布,可以看到,虽然在不同类之间已经产生了分类边界,但是类内的紧致度和类间的区分度的判别力不足;(b)为center loss+softmax loss的特征分布,和论文3描述一致,提升了类内的紧致度;(c)为triplet-center loss+softmax loss,可以看到该组合下的损失不仅提升了类内的紧致度,而且进一步拉大了类间的距离,提升了类间的区分度,进一步增强了特征的判别力。
深度特征分布可视化实验结果5.Improved Deep Metric Learning with Multi-class N-pair Loss Objective(N-pair-mc loss)(PDF)
Author:Kihyuk Sohn NIPS2016 (Citations:835)
目标问题1:本文针对Contrastive Loss和Triplet Loss的慢收敛问题所提出,作者认为上述损失收敛速度慢的根源在于交互方式上,即在每一次迭代中,一个样本只与一个负样本进行交互,这很大程度上降低了算法收敛的速度,而难例挖掘成本高。
解决方案1:为了解决收敛慢的目标问题,作者提出了(N+1)-tuplet loss,将query与一个正样本和N-1个负样本组合构成一个N+1维的tuplet,最终形成一个M*(N+1)维的batch,加快Query和负样本之间的对比频率和速度。
(N+1)tuplet loss (N+1)tuplet loss 效果图:在拉近与正样本距离的时候,同时拉远与其他N-1个样本之间的距离损失函数为:其中x为query,x+为正样本,N-1个xi为负样本。根据损失函数可知,为了减小损失,需要减小query和负样本之间的余弦相似度即(相当于扩大距离),增大query和正样本之间的余弦相似度(相当于缩小距离)。
(N+1)-tuplet loss目标问题2:上述方案虽然解决了收敛慢的问题,但是其数据规模太大,在每一次参数更新中,都需要输入M*(N+1)个样本,这对于针对大规模数据集的深度神经网络来说是难以接受的。
解决方案2:抛弃解决方案1中的所有负样本,仅保留anchor和单个相对应的正样本,利用不同类别anchor的正样本来充当当前anchor的负样本,使得每一个批量的样本大小由原先的N*(N+1)降低为当前的2N。
批量构建过程损失函数为:相当于将解决方案1中的负样本替换为其他类别anchor对应的单个正样本。
N-pair-mc loss目标问题3:对于具有大规模输出类别的数据集,需要对训练过程中使用的负样本进行筛选。
解决方案3:本文提出了负类挖掘策略,贪婪地选择训练过程中使用到的负类,具体流程如下:1. 评估嵌入向量:随机选择大量的输出类C;对于每个类,随机选择几个(一到两个)样本来提取其嵌入向量。
2. 选择消极类:从步骤1的C类中随机选择一个类(相当于anchor)。接下来,贪婪地增加一个违反三元组约束最多的新类(相当于距离最近的负样本),直到我们达到N个类。当出现平局时(相当于两个负样本与anchor之间的距离一致),我们从平局的类中随机挑选一个添加到负样本对中。
3. 确定N个样本对:从步骤2的每个选定的类中抽取两个例子(相当于每个类含有一个anchor和正样本)。
6.Learning Deep Embeddings with Histogram Loss(Histogram loss)(PDF)
Author:Evgeniya Ustinova, Victor Lempitsky NIPS2016 (Citations:4151)
目标问题:Pair-wise loss需要调参。
解决方案:本文提出了直方图损失,在不需要调参的情况下引入了一种新型的嵌入方式。本文不同于以上常规的loss,需要减少每一个正样本对在特征空间中的距离而增大负样本对的距离,而是引入了正样本对和负样本对的距离分布,通过概率估计来完成特征嵌入。
该方法分为两个步骤:(1)分别计算嵌入空间中正样本对和负样本对的一维相似度分布:首先将小批量样本通过神经网络和L2范数归一化得到每个样本的特征向量。然后计算正样本对和负样本对的距离得到和。
正样本对和负样本对距离集合基于正负样本对距离集合,来构建两个R维的直方图(R表示直方图的bin的个数),两个bin之间的距离为2/R-1,并通过线性插值法确定每一个bin的值。
线性插值法确定bin的值Histogram-loss将相似的特征点对(positive pair)和不相似的特征点(negative pair)对进行排列组成概率分布分布(probability distribution),然后对positive pair的概率分布做累计密度分布,将positive pair的累计密度分布和negative pair的分布进行相乘,然后再进行积分,就得到了我们需要的Histogram-loss,通过在正样本中随机取样所得到的相似性比从负样本中随机取样得到的相似性低的可能性(引用自Oldpan的个人博客):
直方图损失(连续) 直方图损失(离散)7.Deep Metric Learning with Angular Loss(Angular Loss)(PDF)
Author:Jian Wang, Feng Zhou, Shilei Wen, Xiao Liu, Yuanqing Lin ICCV2017 (Citations:302)
目标问题:基于距离的损失函数对尺度变化非常敏感,而且距离只考虑了样本之间的二阶关系(比如说triplet loss只考虑了anchor与正样本以及anchor与负样本之间的关系)。
解决方案:为了解决上述问题,作者提出了三角损失,通过设计负样本点的角度来编码三元组的三阶关系。作者首先根据三元组损失的定义(即anchor与正样本的距离+margin <= anchor与负样本的距离)以及三角形内角和为180度的定义发现,在由anchor、正样本点和负样本点组成的三角形中,负样本点所对应的角小于60度。由此对三元组中负样本点角提出了新的限制,如下图:
原始三角损失限制该限制相较于距离限制有两个优点,一是角度是一个相似性不变的度量,二是余弦规则使得三角形中的三条边都被纳入了计算范围,这就解决了目标问题中二阶关系的问题,三是超参数的设定由于其在几何学中的具体及可解释性意义而变得更加简单。但是该设定不完善,会导致负样本点缩进其与anchor之间的距离(如图a),因此需要进行改进。
改进方法需要构建辅助结构,首先根据anchor和正样本点构建外接圆,然后构建超平面使其垂直于圆心与负样本所构成的直线,并且该超平面与圆心相交,最后确定圆与超平面相交的点,示意图如图b所示:
图a:原始三角损失缺陷示意图;图b:辅助结构构建示意图基于辅助结构,来设计新的三角损失。在三角损失的梯度影响下,负样本会被推离外接圆的圆心,相当于远离anchor和正样本,而anchor与正样本之间会互相吸引,相当于拉近距离。
三角损失
网友评论