近期,人脸识别研究领域的主要进展之一集中在了Softmax Loss的改进之上;在这里中,旷视研究院(上海)(MEGVII Research Shanghai)从两种主要的改进方式-做归一化以及增加类间的余量-展开梳理,介绍了基于Softmax的Loss的研究进展。
目录
参考文献
引言
关于人脸识别领域Softmax损失相关的科普文章其实很多。例如[人脸识别的LOSS(上,下)]以及[人脸识别最前沿在研究什么?]等文章分别从论文和当前主流工作的角度因此,这里不再敲个盘点时下各个纸张处理的工作,而是从人脸识别中的Softmax Loss的历史发展脉络这个角度出发,从而这条时间线详细介绍Softmax Loss的各种。改进在当时的背景下是如何提出来的。
Softmax简介
Softmax Loss因为其易于优化,收敛快等特性被广泛的图像分类领域所取代。然而,直接使用softmax loss训练得到的功能已获取,验证等“需要设置阈值”的任务时,往往且不够好。
这其中的原因还得从Softmax的本身的定义说起,Softmax loss在形式上是softmax函数加上交叉熵损失,它的目的是让所有的类别在概率空间具有最大的对数似然,也就是保证所有类别的分类正确,而retievel和verify任务所需要的是一个泛化性能更好的尺度空间(度量空间)。保证分类正确和保证一个泛化性优良的度量空间这两者之间虽然相关性很强,但并不直接等价。
因此,标准化,人脸识别领域的主要技术进展集中在如何改进softmax的损失,由于既能充分利用其易于优化,收敛快的优良性质,又使其能优化出一个具有优良泛化性的度量空间。而这些技术改进主要又能被归为两大类别,做归一化以及加保证金。以下从这两个方面进行一些梳理。
首先从一个简单的基于Softmax Loss的例子出发。下图描述了基于softmax loss做分类问题的流程。输入一个训练样本,倒数第二层的特征提取层输出特征x,和最后一层的分类层的类别权重矩阵
相乘,得到各类别的分数,再通过softmax函数得到归一化后的类别概率,再得到交叉熵损失。
图片来自[FaceRecSurvey]
体重
可看作是一个类别所有样本的代表。
是样本特征和类别重量的点积,可以认为是样本和类别的相似度或分数。通常这个分数被称为logit。
Softmax能够放大微小的类别间的logit差异,这导致它对这些微小的变化非常敏感,这往往对优化过程非常有利。我们用一个简单的三分类问题以及几个数值的小实验来说明这个问题。假设正确的类别为1。如下表的情况(d)所示,正确类别的概率才1/2,并不高。
如果要进一步提高正确类别概率,需要正确类别分数远高于其他类别分数,需要网络针对不同样本(类别)的输出差异巨大。网络要学习到这样的输出很困难。然而,加了softmax操作之后,正确类别概率轻松变为
,已经足够好了。
可见,softmax中的指数操作,可以迅速放大原始的logit之间的差异,因此“正确类别概率接近于1”的目标变得简单很多。这种效应可以称为“强者通吃”。
归一化(归一化)
归一化(归一化),是人脸识别领域中一个重要的方法它的做法实际上非常简单归一化的定义如下。:
权重归一化
为了搞清楚为什么需要做体重归一化,这首先要从数据不均衡的问题说起,这一问题在常见的人脸识别数据集中很普遍。下图展示了在几个常用的人脸识别数据集上类别与sample数量的统计分布。
图片来自[UnequalTraining]
在[SphereFace]的附录部分,表示了关于训练数据不均衡如何影响体重的规范的一个经验分析。左边的两张图是MNIST上的实验结果,右边的两张图是WebFace上的实验结果。对于样本数多的类别,它的weight的规格会更大。
图片来自[SphereFace]
再举一个非常极端的例子。假设有一个三个人的分类问题,其中A,B两个人各有100张照片,而另外一个人C的照片只有5张,那么训练这个三分类问题,最终将其weight的每一列在二维空间上做一个可视化,就应该是下图这个样子。
对于数据量大的A,B两个人,他们的weight的norm很大,几乎瓜分了整个特征空间,而C由于照片数量少,他的weight的norm很小。而我们当然知道,实际情况下, A,B,C三个人绝对应该是处于一个平等的副本的,换言之,在特征空间里面,他们也应该处于一个“三足鼎立”的模式,就像下图所示。
如何让A,B,C这三个人在训练时受到平等对待呢?这个时候,Weight Normalization就起作用了。Weight Normalization的想法被2016年NIPS的[WeightNorm]提出。本文通过大量的实验表明了权重归一化批次归一化可以减少计算量,并且可以使网络恢复的收敛。
不过这篇论文并没有提到体重归一化可以通过改善数据不均衡的问题。最初把体重归一化和数据不均衡问题联系起来的是郭冬瑶等人的工作。郭冬瑶等人在2017年提出了一堆种做权重归一化的方法变种[UPLoss],他们首先计算所有权重模长的均值,并幅值给α
然后再用下面的损失约束每一个weight vector靠近这个均值
作者自己建立了一个人的脸数据集,包含两部分,第一部分大概包含20k个id,每个id有50-100张图片,第二部分包含1k个id,每个id仅有20张图片。如果在这个数据集上使用不加重量归一化的softmax,得到的结果如下。
图片来自[UPLoss]
可以发现,上图最右边,从2到2.1这个区间,也就是最后的1k个id的体重的规范明显小于前20k个。并且,最后1k个id在训练集上的回忆只有30%。而在增加了作者提供的体重正常化方法后,最后1k个id的weight规范和前20k个id的weight norm之间的差距明显变小了。作者提到在训练集上的召回一下子提升到了70% 。
图片来自[UPLoss]
作者在一份体重正常化后报于LFW上报得到的结果是99.71%,已经远远超过了不做体重正常化的基线为98.88%。
所以说来说去,权重归一化基本上上就做了一件事,在网络中约会一个先验,即告诉网络,无论类别本身的样本数量是多还是少,所有类别的一部分都应该是平等的,因此它们的体重的规范也是相似的。
特征归一化
为了搞清楚为什么需要做特征归一化,我们首先看看Softmax Loss在优化的过程中会发生什么。
优化softmax损失需要扩大
,也需要增大
。
为了变大
,根据上面的定义,优化会倾向于:
。效果是样本多,简单的类别,重量标准大。反之则小。证据见[A-Softmax]的附录。
。效果是简单样本norm大,困难样本norm小。证据见很多paper,例如本文下面[L2-Softmax]的图。
例如,[NormFace]中给了这样一个例子,MNIST上,功能的尺寸限定为2,10个类别的,该数学上,上面的三种变化会同时发生,导致最终的特征分布呈现出“扇形”形式。特征分布可视化如下:
图片来自[NormFace]
尽管分类的精度可以很高,但是这样的功能分布,对于困难样本是敏感的,推广性不好。
(困难样本,norm小)和
属于同一类,但由于norm相差太大,反而和norm差不多的
(另外一类的困难样本)距离更近,于是分错了。这个例子也说明feature norm小的样本更容易。
同时也说明了,使用欧氏距离作为特征和特征之间的尺寸是偏差的,因为它依赖于特征的规范。而如果我们用角度作为特征和特征之间的差异,则可以不受规范限制不稳定的影响。因此,我们希望网络更多的从第3点“缩小特征和权重向量的夹角”这个方向去学习。
为了让网络从“缩小特征和权重向量的夹角”这个方向去学习,我们自然就需要把另外两个路给堵死。最理想的情况也就是体重归一化和特征归一化都做。2017年,[ CrystalLoss](也就是[L2-Softmax])提出了功能归一化,并同时进行了分析和实验证明这个简单的技巧对分类问题极为有效。
在[CrystalLoss] 中,作者在MNIST上和一个简单的3个人的分类问题进行了可视化实验。在MNIST上,每个类变得更“窄”,在人脸实验上,每个类的功能变这些实验都证明了,使用特征归一化确实可以实现不同的类学出的嵌入,在角度方向上更具有可区分性。
图片来自[CrystalLoss]
不过,如果只是单纯的对特征做归一化,那么极有可能陷入一个网络难以收敛的矛盾境,这个现象在 [L2-Softmax] 和 [NormFace] 中都提到了,并且 [NormFace] 还从数值上称为了这个现象的解释,这里不再合并这些细节。不过解决方法也很简单,只需要在对特征做归一化后,再乘上一个大于1的伸缩系数,从而情况下才能获得不错的收敛性。
在[L2-Softmax] 中,对如何如何选择这个伸缩系数进行了分析和实验。一个好消息是,[L2-Softmax] 的实验结果确实表明,网络对这个系数的拾取还是非常鲁棒的。下图展示了,伸缩系数α的拾取,从10左右,到50左右,网络都有不错的表现。
图片来自[CrystalLoss]
不过遗憾的是[L2-Softmax]并没有把两个规范化都加,而只是单纯加了特征规范化。
在[L2-Softmax]的基础上,[NormFace]进一步把两个规范化都做了,并做了更详尽的分析,对规范化中的三个问题进行了全面系统的回答:
[NormFace]本身并没有提出新的想法,只是全面系统的总结了前人关于normalization的经验和技巧,并进行了令人信服的分析。
除了这些主流的两种做normalization的方法,还有一些它们的变体。在2017年的[DeepVisage]中,提出了一种对特征做白化,而不是单纯的normalization的方法。在2018年的[ CCL]中对这个想法进行了更加细致的分析和实验。对特征做白化的定义如下:
与单纯的特征归一化,对特征做白化的效果是希望使其所有的特征尽可能均匀地分布在空间中,同时每个维维发挥的作用试图相似,不要浪费空间和尺寸。
作者做了一个简单的实验来展示这种归一化方式的效果,左边表示的是原始的Softmax训练后所得样本的功能。在二维空间可视化后的分布,右边是使用白化后的效果。很明显能抛光白化后的功能能更好地利用整个功能空间。
图片来自[CCL]
不过在实验部分,文章还是承认了,白化这种归一化方式,在实际使用时,由于均值很大,而方差又极小,在数值上基本上就和特征归一化很接近。
2018年CVPR的另一篇文章讨论功能归一化的工作是[RingLoss]。[RingLoss] 的动机是传统的硬方式的归一化可能带来非凸的优化问题,提出的解决方案很简单,直接加软归一化约束到优化里面就可以了。
不过作者并没有很严格的地域传统传统硬方式归一化是属于非凸以及新的软方式归一化是凸的证明,只是从一个数值实验上表面了环损具有优良的收敛性。
图片来自[RingLoss]
环损的具体形式很简单:
其中,R是需要学习的功能规范的参数(例如[L2-Softmax]的α和[NormFace]中的l,λ是控制环损耗项的权重。
到现在为止,我们基本上已经明白了特征归一化或权重归一化能够在一定程度上控制网络对简单或者难样本的关注程度。具体一点就是,如果不加约束,网络总是希望让简单的样本的特征模长和weight模长变大,让难的样本的特征和weight的模长变小,这个现象在[SphereFace],[NormFace]以及[RingLoss]中纳入分析。
现在,我们知道应该把两个规范化都加,让网络去学习角度方向上的差异性。不过如果两个规范化都做了,而不加别的处理,网络会非常难train。在[NormFace]中,对这种现象进行了数值上的分析,指出在权重和特征都归一化到1之后,在类别数分裂时,即使是正确分类的样本,都将获得与分错的样本在数值上差不多大小的梯度,而这自然就会影响网络去关注那些更需要学习的样本。
[NormFace]的解决方法和[l2Softmax]几乎一样,就是约会一个scale参数(对应[L2Softmax]中的α)。而scale参数又是如何具体的影响网络优化的过程呢?针对这个问题,[HeatedUpSoftmax]完成了非常完整的分析。并提出了两种归一化方法。都做时,在训练的不同阶段,通过人为的控制这个比例系数α,能达到控制网络关注简单样本还是难样本的目的。
[HeatedUpSoftmax]中的Softmax形式如下。
文章提出的证据是,α从0变大的过程中
选择不同的α会影响这些样本在优化过程中的运动速度和分布情况。
下面是一个MNIST上的很好的玩具示例,显示选择不同α时的影响。
图片来自[HeatedUpSoftmax]
因此,文章提出的一种称为“ HeatedUp”的训练策略,就是希望在开始的阶段,使用大的α让网络关注简单样本,从而迅速收敛,在训练的后期使用小的α让网络开始关注难样本。
据此,本文提出动态调整α的策略:刚开始优化时使用大的α,让硬样本迅速转变为边界样本。然后逐渐变小α,让边界样本也能获得足够的梯度,进一步缩小分类面。
逐渐变小α的过程,也就是逐渐把分类表面附近的样本往类中心挤压的过程。对应地,温度逐渐升高,也就是本文的“加热”。
最后再总结一下,无论是早期的体重归一化,特征归一化,还是后续这些形式的一些变体以及一些技巧,它们归根结底,都是为了以下三点:
增加类间
在真实任务中,例如面部验证,我们需要计算未知类别的样本的相似度,此时仅保证“已知类别分类正确”是不够的。为了更好的泛化性能,我们还需要某种“类内样本差异小”和“类间样本差异大”这样的良好性质,而这些并不是softmax loss的直接优化目标。(尽管,softmax loss优化的好可以间接的达成这些目标。)
换而言之,除了好的分类概率,一个好的度量空间更重要。前者成立并不意味着并成立。如上图的例子,在该度量空间内,欧氏距离的性质是很差的。
公制学习的方法会显式地优化“类内样本差异小”和“类间样本差异大”的目标,也被广泛识别的脸部识别,例如,[DeepID2]同时使用了softmax损失和对比损失(成对损失,),著名的[FaceNet]仅使用三重损失即可获得表现良好的功能。然而,简单的Metric Learning是不够的。
给定N个样本,softmax损失遍历所有样本的复杂度仅为O(N),而对比损失和Triplet损失的复杂度为
和
,,无法简单遍历,需要有效的搜索好的训练样本,即“ hard example mining”问题,训练过程复杂,尤其是当类别数量很大时,如何找到好的样本本身已经足够困难。(当然,此时的超大softmax损失也是个问题)。
2016年ICML的论文[L-Softmax]首次在softmax上发表了margin的概念,具有非常重大的意义。对于增加边距的形象说明,文章称为了一个很好的示意图。
图片来自[L-使用SoftMax]
表示特征x和类权重
是简化的软最大损失,分界面的向量位于两类权重的中间,此是该的权重被归一化了,此时夹角就决定了样本x被分到哪一类。时
(训练)样本会紧贴着分界面。测试的时候,就容易混淆了。右边是L-使用SoftMax,为了在两类中间留下空白(裕度),要求分界面是
。
此时为了分类正确,样本特征会被压缩到一个更小的空间,两个类别的分类面也会被拉开。容易研磨,此时两个类别之间的角度决定余量是
,其中
是班级体重
和
的夹角。不过可惜的是,这篇论文发表的比较早,在同时期[WeightNorm]才被发表出来,因此,在[L-Softmax]中并没有约会WeightNormalization。2017年CVPR的[SphereFace]在L-Softmax的基础上日期了权重归一化。
[SphereFace]作者通过一个很形象的特征分布图,展示了约会margin的效果,可见,转换margin的增加,类内被压缩的更紧凑,类间的界限也变得更加清晰了。
图片来自[SphereFace]
[SphereFace]提出的损失的具体形式是
,这个与L2-Softmax的分开仅仅就是把当前样本与所属类别的夹角
变成了
。
但约会margin之后,有一个很大的问题,网络的训练变得非常非常困难。在[SphereFace]中提到需要组合策略等极端繁琐的训练技巧。这导致这种加margin的方式极其不实用。事实上,这一切的困难,都是因为约会的margin是乘性margin造成的。我们来分析一下,乘性margin到底带来的麻烦是什么:
,在
处在区间[0,π]时,是一个单调函数,从而
落在这个区间里面的任何一个位置,网络都会朝着把
补充的方向优化。但加上乘性margin m后
的单调区间被压缩到了
,那如果恰巧有一个sample的
落在了这个单调区间外,那网络就很难优化了;
的夹角。前面我们已经分析了,两个类别之间的
,其中
是两个班级的体重的夹角。这自然带来一个问题,如果这两个班级本身挨得很近,那么他们的margin就小。特别是两个难以区分的班级,可能它们的体重挨得特别近,也就是
几乎接近0,那么按照乘性margin的方式,计算出的两个类别的间隔也是接近0的。换言之,乘性margin对易于取代的类不具有可分性。
为了解决这些问题,2018年ICLR的[AM-Softmax]首次将乘性的保证金改成加性的保证金。虽然很小,但意义重大。换成加性保证金之后,上述提到的两个乘性margin的弊端自然就消失了。
同时年的另一篇论文论文[CosFace]与之完全一样。2018年实际上还有一个工作叫[ArcFace](做人脸识别研究的同学应该人尽皆知,产业良心),但遗憾的是在18年,[ArcFace]并没有被任何顶会收录,不过他在19年还是被CVPR 2019收录了。[ArcFace]与[AM-Softmax]同样也是加性的margin,只是只是[ArcFace]的margin加在Cos算子的里面,而[AM-Softmax]的余量在加性算子的外面。这两个对网络的优化性能几乎一致。
在[ArcFace]中,作者对集中加margin的方式简化很形象的对比,如下图所示。可以切割,[ArcFace]提出的margin更符合“角度” margin的概念,而[CosFace]或者[AM-Softmax]更符合余弦裕度的概念。
图片来自[Arcface]
最后,我们总结一下加margin的几个Softmax的几种形式:
总结 译者梳理了人脸识别领域近几年使用SoftMax相关的两大关键主题,做归一化以及增加的余量。通过归一化的技巧,极大缓解了传统使用SoftMax在简单与困难样本间“懒惰学习”的问题以及长尾数据造成的类间不平衡问题。通过增加保证金,从而Softmax损失能学习到更具有区分性的度量空间。但到这里问题还远远没有结束,现存的问题有:
这些问题依然还没有被很好解决。