论文:SphereFace: Deep Hypersphere Embedding for Face Recognition
    论文链接:https://arxiv.org/abs/1704.08063
    代码地址:https://github.com/wy1iu/sphereface

    这篇是 CVPR2017 的文章,用改进的 softmax 做人脸识别,改进点是提出了 angular softmax loss(A-softmax loss)用来改进原来的 softmax loss。如果你了解 large margin softmax loss(作者和 A-softmax loss 是同一批人),那么 A-softmax loss 简单讲就是在 large margin softmax loss 的基础上添加了两个限制条件 ||W||=1 和 b=0,使得预测仅取决于 W 和 x 之间的角度。

    Figure2 中展示的是用一个 CNN 网络提取特征,然后将提取到的特征在类别间的分布展示出来。(a)和(b)是 softmax loss 的结果;(c)和(d)是限制 W1 和 W2 向量的模等于 1,而且 b1 和 b2 偏置等于 0,称为 modified softmax loss;(e)和(f)是本文的 angular softmax loss,后面详细介绍。接下来介绍 Figure2 图的含义:图中特征是 2 维的,对应横坐标,毕竟二维的容易观察,这可以通过将最后一个提特征层(假设最后一个特征提取层是卷积层,那么就将卷积核数量设置为 2)就能得到,因此对于一张输入图像,就能得到 12 维度的特征向量,就可以在二维坐标空间中画出来这个点了,对应 Figure2(a)、(c)、(e)中的点。最后接一个全连接层,对于 Figure2 中的二分类而言(一个类别是黄色点,另一个类别是红色点),全连接层的维度就是 22,后面一个 2 就是类别的意思。再看看(b),W1 和 W2 分别是 I2 的向量,合在一起就是 22 的全连接层参数,因此 W1 和 W2 的箭头位置所在的坐标就是 1*2 向量的值,这样就可以画出图中的红色箭头了,至于中间的红色线,就是分类界限。同理(d)中 W1 和 W2 的模等于 1,特征点之所以类似圆形是将(c)中的特征点变换成模为 1 的特征点;(e)、(f)的含义和(c)、(d)的含义同理。

    SphereFace算法详解 - 图1

    接下来介绍 A-softmax loss 的内容。还是先从 softmax loss 开始讲起。假设一个二分类问题,那么下面的公式 1 和 2 分别表示样本 x 属于类别 1 和类别 2 的概率,这个计算的过程就是 softmax。这里的 W1 和 W2 都是向量,二者合在一起组成全连接层的参数矩阵 W,也就是 W=[W1,W2],全连接层的输出也就是 Wx。假设输出的尺寸是 m*n,那么 m 就表示 batch size,n 表示类别数,所以这里的 W1x 和 W2x 就分别是 Wx 的两列。偏置 b 比较简单就不详细说了。因此如果 p1 大于 p2,那么 x 属于类别 1。

    SphereFace算法详解 - 图2

    这个时候可以联想到文章前面提到的一个公式:

    SphereFace算法详解 - 图3

    文章说这是 softmax 的 decision boundary,怎么理解呢?其实就是 p1=p2 的情况,此时 W1x+b1=W2x+b2。如果 p1>p2,从 p1 和 p2 的公式可以看出二者的分母是一样的,分子都是以 e 为底的指数函数,是递增的,因此就相当于 W1x+b1>W2x+b2

    公式 1 和 2 只是 softmax,并不是 softmax loss,这两者是有差别的,一个是概率,一个是损失。softmax loss 的公式如下:

    SphereFace算法详解 - 图4

    公式 3 的 log 函数的输入就是前面公式 1 和 2 的 p1 和 p2,只不过不需要分开写成 W1 和 W2,而是用 W 就行。这里 yi 表示某个类别,j 表示所有类别。

    公式 4 是将 Li 展开来写,并且引入了角度参数:

    SphereFace算法详解 - 图5

    为什么公式 4 的上下两个等式是成立的?因为可以将矩阵相乘:

    SphereFace算法详解 - 图6

    写成:

    SphereFace算法详解 - 图7

    非常容易理解吧。

    那么如果引入下面这两个限制条件呢?

    SphereFace算法详解 - 图8

    SphereFace算法详解 - 图9

    那么公式 3(结合公式 4 和上面两个限制条件看)就会变成:

    SphereFace算法详解 - 图10

    那么为什么要引入这两个限制条件呢?原来的 decision boundary 是这样的:

    SphereFace算法详解 - 图11

    如果有上面的两个限制条件,那么 decision boundary 就变成了:

    SphereFace算法详解 - 图12

    也就是说边界的确定变成只取决于角度了,这样就能简化很多问题。而且从 Figure2 也可以看出这种操作对分类结果有促进作用。

    在这两个限制条件的基础上,作者又添加了和 large margin softmax loss 一样的角度参数,使得公式 5 变成如下的公式 6:

    SphereFace算法详解 - 图13

    这部分可以参考损失函数改进之 Large-Margin Softmax Loss,基本一样。显然 m 值越大,优化的难度也越大,但类别之间的 angular margin 也越大,也就是类间距离越大,同时类内距离越小,因此模型效果越好。本文中参数 m 默认取 4。

    因为在公式 6 中需要限定θy 的范围为[0,π/m],因此为了去掉这个限制,就有了公式 7 这种能够在 CNN 网络中优化的公式。
    SphereFace算法详解 - 图14

    公式 7 也就是作者文中最终使用的 loss 公式。因此 A-softmax loss 可以看成是 large margin softmax loss 的改进版,也就是在 large margin softmax loss 的基础上添加了两个限制条件。

    Table1 是关于本文提到的 3 个 loss 的分类界限(decision boundary)对比,可以看出 softmax loss 的优化是对 W 和 x 的内积进行的;modified softmax loss(也就是限制 Wi 的模为 1,bi 为 0)的优化是对角度θi 进行的;A-softmax loss 的优化也是对θi 进行,而且优化目标更加难(引入 m 参数,优化后在类别之间会得到 angular margin)。
    SphereFace算法详解 - 图15

    Figure3 表示从几何角度看 A-softmax loss。

    SphereFace算法详解 - 图16

    后面作者还通过数学公式证明了对于二分类,m 的最小值要满足下面这个不等式:

    SphereFace算法详解 - 图17

    对于多分类,m 的最小值要满足下面这个不等式:

    SphereFace算法详解 - 图18
    https://blog.csdn.net/u014380165/article/details/76946380