热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述

最近,人脸识别研究领域的一个主要进展集中在SoftmaxLoss的改进上;主要的改进方法–做归一化以及增加类间,并且近年来引入了基于Softmax的loss研究发展史。导论关于人脸

最近,人脸识别研究领域的一个主要进展集中在Softmax Loss的改进上; 主要的改进方法 – 做归一化以及增加类间,并且近年来引入了基于Softmax的loss研究发展史。

导论

关于人脸识别领域Softmax Loss相关的科学文章其实很多。例如[面部识别的失败(上下)]和[面部识别的最前沿是什么?从纸张和当前主流工作的角度梳理了其他文章。因此,本文没有看到目前每篇论文所做的工作,而是从人脸识别中Softmax Loss的历史发展的角度出发,沿着这个时间线详细介绍了Softmax Loss在当时的各种改进。背景是如何提出的?

Softmax 简介

Softmax Loss因其易于优化和快速收敛而广泛用于图像分类。然而,使用softmax损失训练获得的特征来获取“需要阈值”的任务(例如检索,验证等)往往不够好。

其原因在于Softmax本身的定义,它正式是softmax函数加上交叉熵损失。其目的是使所有类在概率空间中具有最大的对数似然性,即确保所有类别都被正确分类,以及撤销和验证任务需要的是具有更好泛化性能的度量空间。一个度量空间,保证正确的分类并保证良好的泛化。虽然相关性很强,但并不直接相同。

因此,近年来,人脸识别领域的主要技术进步集中在如何提高softmax的损失,使其能够充分利用其易于优化和快速收敛的优良特性,并使其能够优化具有出色泛化的度量空间。。这些技术改进主要可分为归一化和边际两大类。以下是这两方面的一些梳理。

从基于Softmax Loss的简单示例开始。下图描述了基于softmax损失对问题进行分类的过程。输入训练样本,倒数第二层的特征提取层输出特征x,以及最后一层的分类层的类权重矩阵

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

相乘,得到各类别的分数,再经过 softmax function 得到 normalize 后的类别概率,再得到 cross-entropy loss。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

类别 weight

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

可看作是一个类别所有样本的代表。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

是样本 feature 和类别 weight 的点积,可以认为是样本和类别的相似度或者分数。通常这个分数被称为 logit。

Softmax能够放大微小类别之间的logit差异,这使得它对这些微小变化非常敏感,这通常对优化过程非常有利。我们用一个简单的三类问题和一个带有几个值的小实验来说明这个问题。假设正确的类别是1.如下表的情况(d)所示,正确类别的概率是1/2,这不是很高。

如果要进一步提高正确的类别概率,则需要正确的类别得分远高于其他类别得分,并且不同样本(类别)的网络输出差异很大。网络很难学习这样的输出。但是,在添加softmax操作后,很容易改变正确的类别概率

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

,这已经足够了。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

可以看出,softmax中的指数运算可以快速放大原始logit之间的差异,使“正确类别概率接近1”的目标更加简单。这种效应可以称为“强者全部”。

归一化(Normalization)

归一化是人脸识别领域的重要方法。它的方法实际上非常简单。规范化的定义如下:

特征规范化的定义是

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

权重归一化的定义是

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

Weight Normalization

为了弄清楚为什么需要权重归一化,这开始于数据不平衡问题,这在常见的人脸识别数据集中是常见的。下图显示了几种常用人脸识别数据集的类别和样本数量的统计分布。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

在[SphereFace]的附录中,给出了关于训练数据不平衡的规范如何影响体重的实证分析。左边的两个图像是MNIST的实验结果,右边的两个图像是WebFace上的实验结果。可以看出,对于具有大量样本的类别,其重量范数将更大。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

让我们采取另一个非常极端的例子。假设存在三个人的分类问题,其中A和B各有100张照片,而另一个人C只有5张照片,然后训练三级问题并最终在二维空间中列出其每个权重。要进行可视化,它应该如下所示。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

对于拥有大量数据的A,B,他们的规范具有很大的规范,几乎划分了整个特征空间,而C由于照片数量较少而具有较小的权重范数。当然,我们知道在实际情况下,A,B和C绝对应该处于同等地位。换句话说,在特征空间中,它们也应处于“三足”模式,如下图所示:

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

如何在训练期间平等对待三个人A,B和C?此时,权重标准化将起作用。权重归一化的思想是由NIPS [WeightNorm]在2016年提出的。本文通过大量实验表明,权重归一化可以减少与Batchnormal化相比的计算量,并且可以使网络更快地收敛。

但是,本文未提及权重归一化可用于改善数据不平衡。权重归一化与数据失衡之间最早的联系是郭东尧等人的工作。2017年,郭东尧等人。提出了权重归一化方法[UPLoss]的一种变体,它首先计算所有权重模块长度的平均值,并给出α的大小。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

然后再用下面的 loss 约束每一个 weight vector 靠近这个均值

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

作者自己创建了一个由两部分组成的人脸数据集。第一部分包含大约20k ID,每个id有50-100个图像,第二部分包含1k ID,每个id只有20个图像。如果在此数据集上使用softmax而不进行权重归一化,则结果如下:

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

可以发现,上图的最右边,从2到2.1,也就是说,最后1k id的权重的范数明显小于前20k。此外,最后1k id仅占训练集召回率的30%。在增加作者提供的权重归一化方法之后,最后1k id的权重范数与前20k id的权重范数之间的差异显着较小。提交人提到,对训练集的召回突然增加到70%。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

在做了 weight normalization 后在 LFW 上 report 得到的结果是 99.71%,已经远远超过了不做 weight normalizaton 的 baseline 98.88%。

所以说,体重正常化基本上只做一件事。在网络中引入先验,告诉网络无论类别本身的样本数量如何,所有类别的状态应该相等。所以他们体重的标准是相似的。

Feature Normalization

为了搞清楚为什么需要做 feature normalization,我们首先看看 Softmax Loss 在优化的过程中会发生什么。

优化 softmax loss 需要增大

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

,也需要增大

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

为了变大

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

,根据上面的定义,优化会倾向于:

增大正确类别的 weight norm

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

。效果是样本多,简单的类别,weight norm 大。反之则小。证据见 [A-Softmax] 的附录。

增大样本的 feature norm

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

。效果是简单样本 norm 大,困难样本 norm 小。证据见很多 paper,例如本文下面 [L2-Softmax] 的 Figure。

缩小 feature 和 weight vector 的夹角。

数学上,上面的三种变化会同时发生,导致最终的 feature 分布呈现出“扇形”形式。例如, [NormFace] 中给了这样一个例子,MNIST 上,feature 的维度限定为 2,10 个类别的 feature 分布可视化如下:

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

尽管分类的准确性可能非常高,但是这种特征分布对于难以处理的样本是敏感的并且通用性差。在上面的例子中,(困难的样本,规范很小)属于同一类,但由于规范太不同,它类似于规范(另一种难的样本)更接近,所以它是错误的。此示例还显示具有小特征规范的样本更不稳定。

它还表明,使用欧氏距离作为特征和特征之间的度量是不稳定的,因为它取决于特征的范数。如果我们使用角度来衡量特征和特征之间的差异,我们就可以免受规范不稳定性的影响。因此,我们希望网络从第三点“减少特征与权重向量之间的角度”中学到更多。

为了使网络从“减少特征和权重向量之间的角度”的方向学习,我们自然需要阻止其他两条道路。理想情况是完成权重归一化和特征规范化。2017年,[CrystalLoss](也称为[L2-Softmax])提出了特征规范化,并进行了大量的分析和实验,以证明这个简单的技巧对分类问题非常有效。

在[CrystalLoss]中,作者用简单的三人分类问题对MNIST进行了视觉实验。在MNIST上,每个班级变得更加“狭隘”,并且在面部实验中,每个班级的特征变得更加集中。这些实验已经证明,使用特征归一化可以使不同类学习的嵌入在角度方向上更加可区分。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

但是,如果您只是将功能标准化,则最有可能陷入网络难以融合的困境。在[L2-Softmax]和[NormFace]中提到了这种现象,并且[NormFace]也在数值上给出。这里没有解释这种现象的解释。但是,解决方案也很简单。您只需要对特征进行标准化并将比例因子乘以大于1.在大多数情况下,您可以获得良好的收敛。

在[L2-Softmax]中,如何选择该膨胀系数进行了分析和实验。好消息是[L2-Softmax]的实验结果确实表明网络对该系数的选择非常鲁棒。下图显示扩展因子α的选择,从大约10到大约50,在网络上具有良好的性能。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

不幸的是,[L2-Softmax]不会添加两个规范化,而只是添加了特征规范化。

在[L2-Softmax]的基础上,[NormFace]进一步进行了标准化并进行了更详细的分析,并对标准化中的三个问题给出了全面而系统的答案:

  • 为何 normalization 在 verification 中管用;
  • 为何在训练中简单做 normalization 不 work 以及如何才能 work;
  • 其他的 metric loss 如何做 normalization。

[NormFace]本身并未提出新的想法,而是对以往的规范化经验和技能进行全面而系统的总结,并给出了令人信服的分析。

除了这两种主流的标准化方法之外,还有一些变体。在2017年的[DeepVisage]中,提出了一种增强特征而不是纯规范化的方法。在[2018] [CCL]中更详细地分析和实验了这个想法。 白化功能的定义如下:

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

与简单特征归一化相比,白化特征的效果是使所有特征在空间中尽可能均匀分布,并且每个维度的功能尽可能相似,不浪费空间和尺寸。

作者做了一个简单的实验来证明这种归一化方法的效果。左侧显示在二维空间中进行原始Softmax训练后获得的样品的特征分布,右侧使用白化效果。很明显,白化功能可以更好地利用整个功能空间。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

然而,在实验部分,文章仍然承认,由于平均值大且方差小,实际使用中的白化归一化方法非常接近特征归一化。

2018年CVPR的另一个讨论是特征规范化[RingLoss]的工作。[RingLoss]的动机是传统硬模式的规范化,可能带来非凸优化问题。所提出的解决方案非常简单,可以直接添加到软标准化约束中。

然而,作者并没有严格地将传统的硬模式归一化归为非凸,而新的归一化软模式是凸的证明,仅从数值实验来看,Ring Loss具有极好的收敛性。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

Ring loss 的具体形式很简单:

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

其中R是需要学习的特征范数的参数(类似于[L2-Softmax]中的α和[NormFace]中的l),λ是控制环损失项的权重。

到目前为止,我们基本上已经理解,特征归一化或权重归一化可以在一定程度上控制网络对简单或困难样本的关注程度。具体点是,如果不进行约束,网络总是希望使单个样本的特征长度和重量更大,并使难度样本的模型和权重更小。这种现象在[SphereFace]中,[NormFace]和[RingLoss]都有分析。

现在,我们知道我们应该添加两个规范化,让网络了解角度方向的差异。但是,如果在没有额外处理的情况下完成两个标准化,则网络将很难训练。在[NormFace]中,对这种现象进行了数值分析。需要指出的是,在权重和特征归一化为1之后,即使类别数量很大,也会获得正确分类的样本并将其错误分类。样本的大小梯度大致相同,这自然会影响网络,专注于那些需要更多学习的样本。

[NormFace]给出的解决方案与[l2Softmax]几乎相同,后者是引入比例参数(对应于[L2Softmax]中的α)。scale规则参数如何特别影响网络优化的过程?对于这个问题,[HeatedUpSoftmax]进行了非常完整的分析。还提出,当完成两个标准化时,通过在训练的不同阶段人为地控制比例系数α,可以控制网络是否关注简单样本或困难样本。

[HeatedUpSoftmax]中的Softmax形式如下。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

文章得出结论,α从0增加到大。

  • hard 样本的梯度越来越大。
  • easy 样本的梯度先小,后大,再小。

选择不同的α会影响优化过程中这些样品的速度和分布。

以下是MNIST上一个很好的玩具示例,显示了选择不同alpha的效果。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

因此,文章中提出的一种名为“HeatedUp”的训练策略是使用大α让网络在初始阶段关注简单样本,以便它可以快速收敛,并在训练后期使用小α让网络专注于它。难以取样。

情况(a):α太小是不好的。此时所有样本都进展缓慢,分类不可分割;

情况(d):α太大是不好的。此时,远离分类的最难的样本会非常快速地进行配对。然而,位于分类表面附近的模糊边界样本(即,图1中的三角形样本)不会快速移动。最终的分类表面不够紧凑;

情况(b,c):适当的α允许每种类型的样本(主要是硬和边界)的适当梯度,以给出紧凑分类面的比较。

在此基础上,本文提出了一种动态调整α的策略:在优化开始时使用大α,硬样本快速成为边界样本。然后逐渐变小α,使边界样本也可以得到足够的梯度,进一步减少分类面。

逐渐变小α的过程,即逐渐将分类表面附近的样本挤压到类的中心的过程。相应地,温度逐渐升高,这是本文的“升温”。

最后,让我们总结一下,无论是早期权重规范化,特征规范化,还是这些形式的一些变体和一些技巧,它们归根结底都是以下三点:

  • 防止网络在长尾问题上“顾此失彼”。
  • 防止网络一旦把样本分对就“浅尝辄止”。
  • 防止网络在难样本问题上“掩耳盗铃”。

增加类间 angular margin

在实际任务中,例如面部验证,我们需要计算未知类别的样本的相似性。在这种情况下,仅仅保证“已知类别被正确分类”是不够的。为了获得更好的泛化性能,我们还需要良好的属性,例如“类中的小样本差异”和“类之间的大样本差异”,这些不是softmax损失的直接优化目标。(虽然softmax损失的优化可以间接实现这些目标。)

换句话说,除了良好的指标外,良好的指标空间更为重要。前者的建立并不意味着后者的确立。如上例所示,欧几里德距离的性质在该度量空间中非常差。

度量学习的方法将明确优化“类内小样本差异”和“类之间的大样本差异”的目标,并且还广泛用于面部识别。例如,[DeepID2]同时使用softmax损失和对比度损失(成对)。丢失),着名的[FaceNet]只能使用三重态丢失来获得一个表现良好的特征。但是,简单的度量学习是不够的。

给定N个样本,遍历所有样本的softmax损失的复杂度仅为O(N),并且对比度损失和三元组损失的复杂性是总和,并且不可能简单地遍历。有效地搜索好的训练样本是必要的,即“硬例”挖掘问题,训练过程复杂,特别是当类别数量很大时,如何找到好的样本本身就已经足够困难了。(当然,此时超大的softmax损失也是一个问题)。

“增加课程之间的差距”是一个经典的想法,但使用基于softmax的损失是一项非常有意义的创新。2016年ICML的一篇论文[L-Softmax]首次在softmax上引入了保证金的概念,这是非常重要的。为了解释增加边距的图像,本文给出了一个很好的图表。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

表示 feature x 和 class weight

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

的夹角。先简化问题,假设 class weight 被 normalize 了,此时夹角就决定了样本 x 被分到哪一类。左边是原始的 softmax loss,分界面的 vector 处于两类 weight 的中间,此时

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

。(训练)样本会紧贴着分界面。测试的时候,就容易混淆了。右边是L-Softmax,为了在两类中间留下空白(margin),要求分界面是

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

此时为了分类正确,样本 feature 会被压缩到一个更小的空间,两个类别的分类面也会被拉开。容易看出,此时两个 class 之间的 angular decision margin 是

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

,其中

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

是 class weight

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

的夹角。不过可惜的是,这篇 paper 发表的比较早,在同时期 [WeightNorm] 才被发表出来,因此,在 [L-Softmax] 中并没有引入 Weight Normalization。2017 年 CVPR 的 [SphereFace] 在 L-Softmax 的基础上引入了 Weight Normalization。

[SphereFace] 作者通过一个很形象的特征分布图,展示了引入 margin 的效果,可见,随着 margin 的增加,类内被压缩的更紧凑,类间的界限也变得更加清晰了。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

[SphereFace] 提出的 loss 的具体形式是

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

,这个与 L2-Softmax 的差别仅仅就是把当前 sample 与所属类别的夹角

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

变成了

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

但引入 margin 之后,有一个很大的问题,网络的训练变得非常非常困难。在 [SphereFace] 中提到需要组合退火策略等极其繁琐的训练技巧。这导致这种加 margin 的方式极其不实用。而事实上,这一切的困难,都是因为引入的 margin 是乘性 margin 造成的。我们来分析一下,乘性 margin 到底带来的麻烦是什么:

  1. 第一点,乘性 margin 把 cos 函数的单调区间压小了,导致优化困难。对 ,在 处在区间 [0,π] 时,是一个单调函数,也就是说 落在这个区间里面的任何一个位置,网络都会朝着把 减小的方向优化。但加上乘性 margin m 后 的单调区间被压缩到了 ,那如果恰巧有一个 sample 的 落在了这个单调区间外,那网络就很难优化了;
  2. 第二点,乘性 margin 所造成的 margin 实际上是不均匀的,依赖于 的夹角。前面我们已经分析了,两个 class 之间的 angular decision margin ,其中 是两个 class 的 weight 的夹角。这自然带来一个问题,如果这两个 class 本身挨得很近,那么他们的 margin 就小。特别是两个难以区分的 class,可能它们的 weight 挨得特别近,也就是 几乎接近 0,那么按照乘性 margin 的方式,计算出的两个类别的间隔也是接近 0 的。换言之,乘性 margin 对易于混淆的 class 不具有可分性。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》
《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

为了解决这些问题,在2018年,ICLR的[LR-Softmax]首次将乘法余量改为加性余量。虽然变化很小,但它们很重要。在切换到附加裕度之后,上述两个乘法余量的缺点自然消失了。

同期的另一篇论文[CosFace]完全相同。在2018年,实际上有一项名为[ArcFace]的工作(进行面部识别研究的学生应该是众所周知的,行业良心),但不幸的是,18年来,[ArcFace]并没有被列入任何顶级会议,但他它仍然包含在19年的CVPR 2019中。[ArcFace]也是[AM-Softmax]的附加余量。不同之处在于[ArcFace]的余量被添加到Cos运算符,[AM-Softmax]的余量在加法运算符之外。两者的优化性能对于网络几乎相同。

在[ArcFace]中,作者对添加边距的方式进行了非常直观的比较,如下图所示。可以看出,[ArcFace]提出的边距更符合“角度”边界的概念,而[CosFace]或[AM-Softmax]更符合余弦边际的概念。

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

最后,我们总结一下加 margin 的几种 Softmax 的几种形式:

《softmax层_「干货」人脸识别Softmax算法的Loss的演化史概述》

总结

本文梳理了近年来人脸识别领域与Softmax相关的两个关键主题,以规范和增加边际。通过归一化技术,传统的Softmax大大减轻了简单和困难样本之间的“懒惰学习”问题和长尾数据引起的类间不平衡问题。通过添加保证金,Softmax Loss可以学习更具差异化的度量空间。但这里的问题远未结束。存在的问题是:

在归一化技术下,噪声样本对网络的负干扰也被放大。如何削弱其影响值得进一步考虑;

即使重量正常化,长尾问题也只能缓解,不平衡问题依然存在;

增加边际虽然网络已经学会了更好的度量空间,但引入超级参数的最佳选择是什么?

这些问题仍未得到很好的解决。


推荐阅读
author-avatar
宋文哲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有