CVPR 2017的文章《SphereFace: Deep Hypersphere Embedding for Face Recognition》中提出了一个softmax的改进版,A-Softmax。

针对二分类问题,原始softmax loss获取的后验概率表示为:

\[p_1 = \frac{exp(w_1^Tx+b_1)}{exp(w_1^Tx+b_1)+exp(w_2^Tx+b_2)}\] \[p_2 = \frac{exp(w_2^Tx+b_2)}{exp(w_1^Tx+b_1)+exp(w_2^Tx+b_2)}\]

其中,x是学习到的特征向量,wi的和bi是针对不同类i,最后的全连接层对应的权值和偏差。

如果将

\[w_i^Tx+b_i\]

重写为

\[||w_i^T||||x||cos(\theta_i)+b_i\]
进一步为了简化表达,正则化权重,也就是使得   wi   =1,偏差置0,也就是bi=0,可以得到
\[p_1 = ||x||cos(\theta_1)\] \[p_2 = ||x||cos(\theta_2)\]

其中p1和p2共享相同的x,也就是最后的分类结果取决于余弦角度,决策平面为

\[cos(\theta_1) - cos(\theta_2) = 0\]

至此,余弦空间下的人脸Loss的最为关键的motivation已经说清楚了。接下来,我们形式化这个改进版的softmax

\[L_{modified} = \frac{1}{N}\sum_i-log(\frac{e^{||x_i||cos(\theta_{y_i,i})}}{\sum_je^{||x_i||cos(\theta_{j,i})}})\]

改进版的softmax限定了一个角度边界,学习出的特征仍不具有很强的判别性。为了增强学习出的特征的判别性,作者们认为将angular margin引入是一个很自然的方式,也就是A-softmax,形式化表达为

\[L_{ang}=\frac{1}{N}\sum_i-log(\frac{e^{||x_i||cos(m\theta_{y_i,i})}}{e^{||x_i||cos(m\theta_{y_i,i})}+\sum_{j\neq y_i}e^{||x_i||cos(\theta_{j,i})}})\]

直观上来看,在余弦角度前加了一个系数m,因此对系数m的讨论成了A-softmax的关键。因为没有深入使用这个Loss的需求,所以本文并不打算详细分析这个m的值,但是会在文末给出一些自己的实验现象。总结一下上述三个softmax的变种。

原始softmax的决策边界为

\[(w_i-w_2)x+b_1-b_2=0\]

改进版的softmax的决策边界为

\[||x||(cos\theta_1-cos\theta_2)=0\]

A-Softmax(又名SphereFace)的决策边界为

\[||x||(cosm\theta_1-cos\theta_2)=0\quad for\quad class 1\] \[||x||(cos\theta_1-cosm\theta_2)=0\quad for\quad class 2\]

假设全连接层的维度为2,三个Loss的学习出的特征的分布如下:

A-Softmax

在上文中看到改进版的softmax的决策边界为

\[||x||(cos\theta_1-cos\theta_2)=0\]

如果将x的大小调节为一个固定值s,例如s=64,也就是对应一个特征映射空间的超球半径。可以直接得到一些新的Loss,如下。

F-Norm SphereFace的决策边界为

\[s(cosm\theta_1-cos\theta_2)=0\quad for\quad class 1\] \[s(cos\theta_1-cosm\theta_2)=0\quad for\quad class 2\]

CosineFace的决策边界为

\[s(cos\theta_1-m-cos\theta_2)=0\]

ArcFace的决策边界为

\[s(cos(\theta_1+m)-cos\theta_2)=0\quad for\quad class 1\] \[s(cos\theta_1-cos(\theta_2+m))=0\quad for\quad class 2\]

直观感受下上述不同Loss的决策边界,如下图。

decision margin

一种可能的更加general的想法如下

\[s(cos(m_0\theta_1+m_1)-cos\theta_2-m_2)=0\quad for\quad class 1\] \[s(cos\theta_1-cos(m_0\theta_2+m_1)-m_2)=0\quad for\quad class 2\]

在实习期间,基于PyTorch,复现了ArcFace的工作,同时对比了SphereFace的工作,训练数据分别为MNIST,CIFAR10和CIFAR100,两个Loss对m值敏感且ArcFace中m的取值范围要小于SphereFace,训练过程中,不一小心训练就会挂掉。同时将ArcFace尝试应用到流量漏斗项目中用于年龄识别,可能受限于调参能力,没有明显的效果。

总结:很多人脸问题最终会回到度量学习的范畴,两个问题的进展在一定程度上可以相互借鉴。除了本文中谈到的余弦Loss,人脸领域还有一些其他比较经典的Loss,尚且可以在度量学习的范畴内讨论。

参考:

1.《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》

2.CosineFace的文献《Additive margin softmax for face verification》

3.SphereFace+,《Learning towards Minimum Hyperspherical Energy》