人脸识别的损失函数解读

https://blog.csdn.net/qq_33948796/article/details/89309893#commentBox

最近在研究自编码器提取特征做分类和生成、重建。所以细致了解人脸识别的各种损失函数!

文章目录
1、概要
2、Softmax Loss
3、Center Loss
4、A-Softmax Loss
5、L-Softmax Loss
6、CosFace Loss
7、AM-Softmax
8、ArcFace/Insight Face
9、小结一下
10、参考链接
1、概要
人脸识别:输入一张图片,进行人脸检测,再提取关键点进行人脸对齐矫正,最后提取人脸特征,进行判别这个人是谁。判别这个人是谁,本质上是分类问题。

既然牵涉到分类,分类的目的就是不同类的类间间距够大,同一类的类内距离足够小。那么我们一步一步介绍人脸识别中常用的损失函数。

2、Softmax Loss
SoftmaxSoftmaxSoftmax :将特征图扁平化后的输出映射到(0,1)之间,给出每个类的概率。假设最后一层特征图尺度是:5∗5∗10005*5*10005∗5∗1000 。再将这些特征输入给扁平化 为 [NNN X 111] 个向量(这里的 NNN 是 5∗5∗1000=250005*5*1000=250005∗5∗1000=25000)。下面扁平化的 [ NNN X 111] 的向量进入全连接层,全连接层的参数权重是 WWW[TTT X NNN](这里的 TTT 表示分类的类别数),经过全连接层处理就会得到一个 [TTT x 111] 的向量,但是这个向量里面都每个数值的大小都没有限制,或许是无穷大,也有可能是无穷小,均有可能。因此多分类时候,往往在全连接层后面接个 SoftmaxSoftmaxSoftmax 层。这个层的输入是 [TTT x 111] 的向量,输出也是 [TTT x 111] 的向量。但是输出的每个向量都归一化到 [0,1][0,1][0,1] 之间。这里的 SoftmaxSoftmaxSoftmax 输出的向量是该样本属于每一类的概率。

SoftmaxSoftmaxSoftmax公式:
Pj=eaj∑Tk=1eakP_j=\frac{e^{a_j}}{\sum_{k=1}^{T}{e}^{a_k}}

j
​    
 = 
∑ 
k=1
T
​    
 e 

k
​    
 
 


j
​    
 
 
​    
 

上面公式中的 aja_ja 
j
​    
  表示这 [TTT x 111] 个向量中的第 jjj 个值,而下面分母表示所有值的求和。上式成功的把 PjP_jP 
j
​    
  归一化到 (0,1)(0,1)(0,1) 之间。优化目标:属于正确标签的预测概率最高。

下面介绍 Softmax LossSoftmax \ LossSoftmax Loss:
L=−∑Tj=1yi logpjL=-\sum_{j=1}^{T}{y_i} \ {\log{p_j}}
L=− 
j=1

T
​    
 y 
i
​    
  logp 
j
​    
 
上式中的 pjp_jp 
j
​    
  表示 SoftmaxSoftmaxSoftmax 层输出的第 jjj 的概率值。yyy 表示一个 [111 x TTT] 的向量,里面的 TTT 列中只有一个为1,其余为0(真实标签的那个为1,其余不是正确的为0)。这个公式有一个更简单的形式是:
L=−logpjL=-\log p_j
L=−logp 
j
​    
 
其中的 jjj 是指当前样本的真实标签。logloglog函数是个递增的函数,你预测错的概率会比你预测对的概率要大,因为前面加了一个负号。

图像分类里面常用 Softmax LossSoftmax \ LossSoftmax Loss。

3、Center Loss
Center LossCenter \ LossCenter Loss来自ECCV2016ECCV2016ECCV2016一篇论文:A Discriminative Feature Learning Approach for Deep Face RecognitionA \ Discriminative \ Feature \ Learning \ Approach \ for \ Deep \ Face \ RecognitionA Discriminative Feature Learning Approach for Deep Face Recognition

对MNISTMNISTMNIST数据集进行分类,若损失函数采用上述介绍的Softmax LossSoftmax \ LossSoftmax Loss(因为Softmax LossSoftmax \ LossSoftmax Loss能够使特征可分),那么最后每个类别数字学出来的特征分布下图,我们可以看出类间距离还是比较小,类内距离比较大的,虽然效果很好:

如果损失函数采用Center LossCenter \ LossCenter Loss,那么特征分布如下图,我们可以看出相比于Softmax LossSoftmax \ LossSoftmax Loss类间距离变大了,类内距离变小了:

所以我们可以看出Center LossCenter \ LossCenter Loss能够最小化类内距离的同时保证特征可分,来提高特征之间的可判别性!简单地说,给每一类(labellabellabel)定义一个类中心(CenterCenterCenter),同一类的数据向类中心靠近,离得远要惩罚!于是Center LossCenter \ LossCenter Loss就出现了。
Center Loss=12m∑mi=1∣xi−cyi∣22Center \ Loss = \frac{1}{2m}\sum_{i=1}^{m}{|x_i-c_{y_i}|_2^{2}}
Center Loss= 
2m
1
​    
  
i=1

m
​    
 ∣x 
i
​    
 −c 

i
​    
 
​    
 ∣ 
2
2
​    
 
其中 cyic_{y_i}c 

i
​    
 
​    
  表示这个样本所对应的第 yiy_iy 
i
​    
  类别的特征中心,mmm 表示每一个 batchbatchbatch 大小。上述公式的意义是:希望 batchbatchbatch 中的每个样本特征距离特征中心的距离的平方和越小越好,也就是负责类内差距。

那么上述的 cyic_{y_i}c 

i
​    
 
​    
  每一 batchbatchbatch 怎么确定的呢?理想情况下,cyic_{y_i}c 

i
​    
 
​    
  需要随着学习到的 featurefeaturefeature 进行实时更新,也就是在每一次迭代的时候用整个数据集的 featurefeaturefeature 来计算每个类的中心。但是这样时间复杂度高,于是:用 batchbatchbatch 来更新 centercentercenter,每一轮计算一下当前 batchbatchbatch 数据与 centercentercenter 的距离,然后这个距离以梯度的形式叠加到 centercentercenter 上。
我们下面对 xix_ix 
i
​    
  求导:
∂Lc∂xi=1m∑mi=1(xi−cyi)\frac{\partial L_{c}}{\partial x_i}=\frac{1}{m}\sum_{i=1}^{m}{(x_i - c_{y_i})}
∂x 
i
​    
 
∂L 
c
​    
 
​    
 = 
m
1
​    
  
i=1

m
​    
 (x 
i
​    
 −c 

i
​    
 
​    
 )
这里因为每个 batchbatchbatch 的数量 mmm 太小,那么每次更新 centercentercenter 可能会引起 centercentercenter 抖动。那么梯度上面加个限制 α\alphaα,这个值在 0−10-10−1 之间:
Δc=αm∑mi=0(xi−yi)\Delta c=\frac{\alpha}{m}{\sum_{i=0}^m{}(x_i-y_{i})}
Δc= 
m
α
​    
  
i=0

m
​    
 (x 
i
​    
 −y 
i
​    
 )
为了最小化类内,最大化类间,即满足特征可分和特征可判别,论文中将 Softmax LossSoftmax \ LossSoftmax Loss 和 Center LossCenter \ LossCenter Loss 结合。

有大牛在 Cifar10Cifar10Cifar10 和 Cifar100Cifar100Cifar100 上测试过 Center LossCenter \ LossCenter Loss,发现效果并不是很好,准确率明显低于单独的 SoftmaxSoftmaxSoftmax;在 MNISTMNISTMNIST上测试加上 Center LossCenter \ LossCenter Loss 的 SoftmaxSoftmaxSoftmax 好于单独的 SoftmaxSoftmaxSoftmax;所以理解之所以 Center LossCenter \ LossCenter Loss 是针对人脸识别的 LossLossLoss是有原因的,因为人脸的中心性更强一些,即一个人的所有脸取平均值之后的人脸我们还是可以辨识是不是这个人,所以 Center LossCenter \ LossCenter Loss才能发挥作用。

4、A-Softmax Loss
A−SoftmaxA-SoftmaxA−Softmax 来自于 CVPR2017CVPR2017CVPR2017。论文题目:
《SphereFace:Deep Hypersphere Embedding for Face Recognition》《SphereFace: Deep \ Hypersphere \ Embedding \ for \ Face \ Recognition》《SphereFace:Deep Hypersphere Embedding for Face Recognition》
拿图像分类来说。卷积神经网络提取特征,然后全连接层进行扁平化,再送入 SoftmaxSoftmaxSoftmax 层实现分类。传统的 SoftmaxSoftmaxSoftmax 很容易优化,因为它没有尽可能的扩大类间距离,缩小类内距离。

假设最后一层的输出特征向量为 xix_ix 
i
​    
 ,它对应的标签是 yiy_iy 
i
​    
  ,那么 SoftmaxSoftmaxSoftmax 又可以写成:
L总=1N∑iLiL_{总}=\frac{1}{N}\sum_{i}L_{i}


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 
其中Li=−logpjL_{i}=-\log p_jL 
i
​    
 =−logp 
j
​    
 , pj=eaj∑Tk=1eak=efyi∑jefjp_{j}=\frac{e^{a_j}}{\sum_{k=1}^{T}{e}^{a_k}}=\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}}p 
j
​    
 = 
∑ 
k=1
T
​    
 e 

k
​    
 
 


j
​    
 
 
​    
 = 
∑ 
j
​    
 e 

j
​    
 
 



i
​    
 
​    
 
 
​    
 
那么上式L总L_{总}L 

​    
 可以表示为:
L总=1N∑iLi=1N∑i−log(efyi∑jefj)L_{总}=\frac{1}{N}\sum_{i}L_{i}=\frac{1}{N}\sum_{i}-\log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 = 
N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 

j
​    
 
 



i
​    
 
​    
 
 
​    
 )
其中fyif_{y_i}f 

i
​    
 
​    
 可以用欧式空间的向量积来表示:
fyi=Wyi∗xi(卷积)=∣∣Wyi∣∣∗∣∣xi∣∣∗cos(θyi)(乘积)f_{y_i}=W_{y_i}*x_i(卷积)=||W_{y_i}||*||x_i||*cos(\theta_{y_i})(乘积)


i
​    
 
​    
 =W 

i
​    
 
​    
 ∗x 
i
​    
 (卷积)=∣∣W 

i
​    
 
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
上式中jjj表示类别总数,上述公式再进一步限制,∣∣Wyi∣∣=1||W_{y_{i}}||=1∣∣W 

i
​    
 
​    
 ∣∣=1,偏置 byi=0b_{y_i}=0b 

i
​    
 
​    
 =0(这是一个很重的点哦)。
那么上式又变为:
L总=1N∑iLiL_{总}=\frac{1}{N}\sum_{i}L_{i}


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 
=1N∑i−log(eWyi∗Xi(卷积)∑jeWj∗Xi(卷积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{W_{y_i}*{X_i}(卷积)}}{\sum_je^{W_{j}*X_i(卷积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 

j
​    
 ∗X 
i
​    
 (卷积)
 



i
​    
 
​    
 ∗X 
i
​    
 (卷积)
 
​    
 )
=1N∑i−log(e∣∣Wyi∣∣∗∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣Wj∣∣∗∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||W_{y_i}||*||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||W_{j}||*||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣W 
j
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣W 

i
​    
 
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )
=1N∑i−log(e∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )
上述公式更直白的解释为:二分类,p1p_1p 
1
​    
 、p2p_2p 
2
​    
 进行分类,决策界面是 p1=p2p_1=p_2p 
1
​    
 =p 
2
​    
 ,上面 ∣∣W∣∣||W||∣∣W∣∣ 归一化,且偏置 bbb 为 0,那么上述就为:
(W1−W2)∗x+b1−b2=cos(θ1)−cos(θ2)=0(W_1-W_2)*x+b_1-b_2=cos(\theta_1)-cos(\theta_2)=0
(W 
1
​    
 −W 
2
​    
 )∗x+b 
1
​    
 −b 
2
​    
 =cos(θ 
1
​    
 )−cos(θ 
2
​    
 )=0
那么我们可以得出:一个输入特征 xix_ix 
i
​    
  属于yiy_iy 
i
​    
  类,那么该θyi\theta y_iθy 
i
​    
 的角度应该比所有的其他的类都要小(因为 cos(θ)cos(\theta)cos(θ) 是减函数)。

原始的SoftmaxSoftmaxSoftmax,其中的xxx是类别中学习的特征,θ\thetaθ表示xxx到WiW_iW 
i
​    
 的角度。小结一下:原始SoftmaxSoftmaxSoftmax的目的使得 W1∗x>W2∗xW_1*x>W_2*xW 
1
​    
 ∗x>W 
2
​    
 ∗x,即 ∥W1∥∗∥x∥∗cos(θ1)>∥W2∥∗∥x∥∗cos(θ2)∥W1∥*∥x∥*cos(θ1)>∥W2∥*∥x∥*cos(θ2)∥W1∥∗∥x∥∗cos(θ1)>∥W2∥∗∥x∥∗cos(θ2),从而得到 xxx 正确的分类结果。如果我们使用 cos(mθ1)>cos(θ2)cos(m\theta_1)>cos(\theta_2)cos(mθ 
1
​    
 )>cos(θ 
2
​    
 ) 时,才判为类别1,这样我们可以看出决策函数更严格,因为这边的 θ1<θ2m\theta_1<\frac{\theta_2}{m}θ 
1
​    
 < 
m
θ 
2
​    
 
​    
 才会判定类别1;同理,cos(θ1)&lt;cos(mθ2)cos(\theta_1)&lt;cos(m\theta_2)cos(θ 
1
​    
 )<cos(mθ 
2
​    
 ) 判断为类别2,也就是 θ2&lt;θ1m\theta_2&lt;\frac{\theta_1}{m}θ 
2
​    
 < 
m
θ 
1
​    
 
​    
 ,判断为类别2。很抽象,我一开始看的时候也很抽象,所以我们来个直观的解释,超球体解释:
上面的是二维平面,下面是三维超球体解释图。

A−SoftmaxA-SoftmaxA−Softmax使∣∣Wi∣∣=0,biasi=0||W_i||=0,{bias}_i=0∣∣W 
i
​    
 ∣∣=0,bias 
i
​    
 =0,所以依靠的是样本xxx到WWW的角度,这个角度越小就越有可能是这一类,而添加一个mmm的目的:使类间的距离足够大,使类内距离足够小。也就是放大了类间的距离,也因放大了不同类之间的间隔而使类内更聚拢。

但是,原来的SoftmaxSoftmaxSoftmax里面的θi,j∈(0,π)\theta_{i,j}\in (0,\pi)θ 
i,j
​    
 ∈(0,π) ,如今 mθi,j∈(0,mπ)m\theta_{i,j}\in (0,m\pi)mθ 
i,j
​    
 ∈(0,mπ) 超出了向量之间的夹角函数 coscoscos 定义域范围 (0,π)(0,\pi)(0,π) 咋办?把nnn个coscoscos堆叠起来变成一个递减的连续的函数,详细见论文!

5、L-Softmax Loss
L−SoftmaxL-SoftmaxL−Softmax 来自于 ICML2016ICML2016ICML2016 的一篇论文:
&lt;Large−Margin Softmax Loss for Convolutional Neural Networks>&lt;Large-Margin \ Softmax \ Loss \ for \ Convolutional \ Neural \ Networks &gt;<Large−Margin Softmax Loss for Convolutional Neural Networks>
L−SoftmaxL-SoftmaxL−Softmax与A−SoftmaxA-SoftmaxA−Softmax的区别在于∣∣Wi∣∣||W_i||∣∣W 
i
​    
 ∣∣ 没有归一化,偏置不必归0。L−SoftmaxL-SoftmaxL−Softmax与A−SoftmaxA-SoftmaxA−Softmax的过程类似,我简单再介绍一下:
L总=1N∑iLiL_{总}=\frac{1}{N}\sum_{i}L_{i}


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 
=1N∑i−log(eWyi∗Xi(卷积)∑jeWj∗Xi(卷积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{W_{y_i}*{X_i}(卷积)}}{\sum_je^{W_{j}*X_i(卷积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 

j
​    
 ∗X 
i
​    
 (卷积)
 



i
​    
 
​    
 ∗X 
i
​    
 (卷积)
 
​    
 )
=1N∑i−log(e∣∣Wyi∣∣∗∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣Wj∣∣∗∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||W_{y_i}||*||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||W_{j}||*||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣W 
j
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣W 

i
​    
 
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )
=1N∑i−log(e∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )
上述公式更直白的解释为:二分类,xxx属于类别1,我们就希望 W1∗x>W2∗xW_1*x&gt;W_2*xW 
1
​    
 ∗x>W 
2
​    
 ∗x。我们把它转成点积,得:
∣∣W1∣∣∗∣∣x∣∣∗cos(θ1)>∣∣W2∣∣∗∣∣x∣∣∗cos(θ2)||W_1||*||x||*cos(\theta_1)&gt;||W_2||*||x||*cos(\theta_2)
∣∣W 
1
​    
 ∣∣∗∣∣x∣∣∗cos(θ 
1
​    
 )>∣∣W 
2
​    
 ∣∣∗∣∣x∣∣∗cos(θ 
2
​    
 )
那么 L−SoftmaxL-SoftmaxL−Softmax 将上面表达式修改为:
∣∣W1∣∣∗∣∣x∣∣∗cos(mθ1)>∣∣W2∣∣∗∣∣x∣∣∗cos(θ2)||W_1||*||x||*cos(m\theta_1)&gt;||W_2||*||x||*cos(\theta_2)
∣∣W 
1
​    
 ∣∣∗∣∣x∣∣∗cos(mθ 
1
​    
 )>∣∣W 
2
​    
 ∣∣∗∣∣x∣∣∗cos(θ 
2
​    
 )
其中0&lt;θ1&lt;πm0&lt;\theta_1&lt;\frac{\pi}{m}0<θ 
1
​    
 < 
m
π
​    
 。mmm值越大则学习的难度也越大。因此通过这种方式定义损失会逼得模型学到类间距离更大的,类内距离更小的特征。


6、CosFace Loss
来自于201820182018论文:
&lt;CosFace:Large Margin Cosine Loss for Deep Face Recognition>&lt;CosFace: Large \ Margin \ Cosine \ Loss \ for \ Deep \ Face \ Recognition&gt;<CosFace:Large Margin Cosine Loss for Deep Face Recognition>
LMCLLMCLLMCL从余弦的角度思考 Softmax LossSoftmax \ LossSoftmax Loss:
L总=1N∑iLi=1N∑i−log(pi)=1N∑i−log(efyi∑jefj)L_{总}=\frac{1}{N}\sum_{i}L_{i}=\frac{1}{N}\sum_{i}-\log(p_i)=\frac{1}{N}\sum_{i}-\log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 = 
N
1
​    
  
i

​    
 −log(p 
i
​    
 )= 
N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 

j
​    
 
 



i
​    
 
​    
 
 
​    
 )
其中fj=Wj∗x=∣∣Wj∣∣∗∣∣x∣∣∗cos(θj)f_j=W_j*x=||W_j||*||x||*cos(\theta_j)f 
j
​    
 =W 
j
​    
 ∗x=∣∣W 
j
​    
 ∣∣∗∣∣x∣∣∗cos(θ 
j
​    
 ),其中余弦代表特征向量与权重向量的角度余弦值。

人脸识别是根据两个特征向量之间的余弦相似度计算的。这表明,特征向量xxx的范数是对评分功能没有贡献,于是,通过L2L2L2归一化范式将∣∣Wj∣∣||W_j||∣∣W 
j
​    
 ∣∣设定为1,将∣∣xj∣∣||x_j||∣∣x 
j
​    
 ∣∣设定为sss,于是LossLossLoss公式变成了如下:
L总=1N∑iLi=1N∑i−log(es∗cos(θyi,i)∑jes∗cos(θj,i))L_{总}=\frac{1}{N}\sum_{i}L_{i}=\frac{1}{N}\sum_{i}-\log(\frac{e^{{s*cos(\theta_{y_i},i)}}}{\sum_je^{s*cos(\theta_{j},i)}})


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 = 
N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
s∗cos(θ 
j
​    
 ,i)
 

s∗cos(θ 

i
​    
 
​    
 ,i)
 
​    
 )

接下来,作者把余弦边缘项mmm加上去,与A−SoftmaxA-SoftmaxA−Softmax不同的是:此时的mmm不是乘积项,而是减法。
L总=1N∑iLi=1N∑i−log(es∗(cos(θyi,i)−m)es∗(cos(θj,i)−m)+∑j≠yies∗(cos(θj,i)−m))L_{总}=\frac{1}{N}\sum_{i}L_{i}=\frac{1}{N}\sum_{i}-\log(\frac{e^{{s*(cos(\theta_{y_i},i)-m)}}}{{e^{s*(cos(\theta_{j},i)-m)}}+{\sum_{j\neq y_i}e^{s*(cos(\theta_{j},i)-m)}}})


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 = 
N
1
​    
  
i

​    
 −log( 

s∗(cos(θ 
j
​    
 ,i)−m)
 +∑ 

̸
​    
 =y 
i
​    
 
​    
 e 
s∗(cos(θ 
j
​    
 ,i)−m)
 

s∗(cos(θ 

i
​    
 
​    
 ,i)−m)
 
​    
 )
同时满足:
W=W∣∣W∣∣W=\frac{W}{||W||}
W= 
∣∣W∣∣
W
​    
 
s=x=x∣∣x∣∣s=x=\frac{x}{||x||}
s=x= 
∣∣x∣∣
x
​    
 
Wj∗xi=1∗1∗cos(θj,i)=cos(θj,i)W_j*x_i=1*1*cos(\theta_j,i)=cos(\theta_j,i)

j
​    
 ∗x 
i
​    
 =1∗1∗cos(θ 
j
​    
 ,i)=cos(θ 
j
​    
 ,i)
所以,其特征会分布在一个超球面上。下图为二维和高维示意图:


7、AM-Softmax
这一部分主要参考下面链接,大牛写的特棒!https://blog.csdn.net/fire_light_/article/details/79602310。
该损失函数来自于201820182018论文:
&lt;Additive Margin Softmax for Face Verification>&lt;Additive \ Margin \ Softmax \ for \ Face \ Verification&gt;<Additive Margin Softmax for Face Verification>。个人感觉 AM−SoftmaxAM-SoftmaxAM−Softmax 与 Cos−FaceCos-FaceCos−Face 撞车了,不管啦,那就解读一下上个没解释的一些问题。
首先再回顾一下 SoftmaxSoftmaxSoftmax 和 A−SoftmaxA-SoftmaxA−Softmax:
L总=1N∑iLiL_{总}=\frac{1}{N}\sum_{i}L_{i}


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 
=1N∑i−log(eWyi∗Xi(卷积)∑jeWj∗Xi(卷积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{W_{y_i}*{X_i}(卷积)}}{\sum_je^{W_{j}*X_i(卷积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 

j
​    
 ∗X 
i
​    
 (卷积)
 



i
​    
 
​    
 ∗X 
i
​    
 (卷积)
 
​    
 )
=1N∑i−log(e∣∣Wyi∣∣∗∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣Wj∣∣∗∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||W_{y_i}||*||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||W_{j}||*||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣W 
j
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣W 

i
​    
 
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )

A−SoftmaxA-SoftmaxA−Softmax:
L总=1N∑iLiL_{总}=\frac{1}{N}\sum_{i}L_{i}


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 
=1N∑i−log(eWyi∗Xi(卷积)∑jeWj∗Xi(卷积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{W_{y_i}*{X_i}(卷积)}}{\sum_je^{W_{j}*X_i(卷积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 

j
​    
 ∗X 
i
​    
 (卷积)
 



i
​    
 
​    
 ∗X 
i
​    
 (卷积)
 
​    
 )
=1N∑i−log(e∣∣Wyi∣∣∗∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣Wj∣∣∗∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||W_{y_i}||*||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||W_{j}||*||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣W 
j
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣W 

i
​    
 
​    
 ∣∣∗∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )
=1N∑i−log(e∣∣xi∣∣∗cos(θyi)(乘积)∑je∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||x_i||*cos(\theta_{y_i})(乘积)}}{\sum_je^{||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 
∑ 
j
​    
 e 
∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )
=1N∑i−log(e∣∣xi∣∣∗cos(θyi)(乘积)e∣∣xi∣∣∗cos(θyi)(乘积)+∑j≠yie∣∣xi∣∣∗cos(θj)(乘积))=\frac{1}{N}\sum_{i}-\log(\frac{e^{||x_i||*cos(\theta_{y_i})(乘积)}}{e^{||x_i||*cos(\theta_{y_i})(乘积)}+\sum_{j\neq y_i}e^{||x_i||*cos(\theta_{j})(乘积)}})

N
1
​    
  
i

​    
 −log( 

∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 +∑ 

̸
​    
 =y 
i
​    
 
​    
 e 
∣∣x 
i
​    
 ∣∣∗cos(θ 
j
​    
 )(乘积)
 

∣∣x 
i
​    
 ∣∣∗cos(θ 

i
​    
 
​    
 )(乘积)
 
​    
 )

上式中的cos(θyi)cos(\theta_{y_i})cos(θ 

i
​    
 
​    
 )可以替换成 (−1)Ncos(mθyi)−2N(-1)^Ncos(m\theta_{y_i})-2N(−1) 
N
 cos(mθ 

i
​    
 
​    
 )−2N。理由上面说明了哈!
然后AM−SoftmaxAM-SoftmaxAM−Softmax和cos−Facecos-Facecos−Face出场了,把上面的cos(θ)cos(\theta)cos(θ)变成 cos(θ)−mcos(\theta)-mcos(θ)−m。所以式子就变成了:
L总=1N∑iLi=1N∑i−log(es∗(cos(θyi,i)−m)es∗(cos(θj,i)−m)+∑j≠yies∗(cos(θj,i)−m))L_{总}=\frac{1}{N}\sum_{i}L_{i}=\frac{1}{N}\sum_{i}-\log(\frac{e^{{s*(cos(\theta_{y_i},i)-m)}}}{{e^{s*(cos(\theta_{j},i)-m)}}+{\sum_{j\neq y_i}e^{s*(cos(\theta_{j},i)-m)}}})


​    
 = 
N
1
​    
  
i

​    
 L 
i
​    
 = 
N
1
​    
  
i

​    
 −log( 

s∗(cos(θ 
j
​    
 ,i)−m)
 +∑ 

̸
​    
 =y 
i
​    
 
​    
 e 
s∗(cos(θ 
j
​    
 ,i)−m)
 

s∗(cos(θ 

i
​    
 
​    
 ,i)−m)
 
​    
 )
同时满足:
W=W∣∣W∣∣W=\frac{W}{||W||}
W= 
∣∣W∣∣
W
​    
 
s=x=x∣∣x∣∣s=x=\frac{x}{||x||}
s=x= 
∣∣x∣∣
x
​    
 
Wj∗xi=1∗1∗cos(θj,i)=cos(θj,i)W_j*x_i=1*1*cos(\theta_j,i)=cos(\theta_j,i)

j
​    
 ∗x 
i
​    
 =1∗1∗cos(θ 
j
​    
 ,i)=cos(θ 
j
​    
 ,i)

好处:在于A−SoftmaxA-SoftmaxA−Softmax的倍角计算是要通过倍角公式,反向传播时不方便求导,而只减m反向传播时导数不用变化。作者认为,A−softmaxA-softmaxA−softmax是用mmm乘以θθθ,而AM−SoftmaxAM-SoftmaxAM−Softmax是用cosθcosθcosθ减去mmm,这是两者的最大不同之处:一个是角度距离,一个是余弦距离。使用传统的Softmax的时候,角度距离和余弦距离是等价的,即:
cos(θ1)=cos(θ2)−−>θ1=θ2cos(\theta_1)=cos(\theta_2)--&gt;\theta_1=\theta_2
cos(θ 
1
​    
 )=cos(θ 
2
​    
 )−−>θ 
1
​    
 =θ 
2
​    
 
但是当我们试图要推动决策边界的时候,角度距离和余弦距离就有所不同了。最终的决策边界是和余弦相关的,根据cos的性质,优化角度距离比优化余弦距离更有效果,因为余弦距离相对更密集。之所以选择cosθ−mcosθ-mcosθ−m而不是cos(θ−m)cos(θ-m)cos(θ−m),这是因为我们从网络中得到的是权重WWW和特征xxx的内积,如果要优化cos(θ−m)cos(θ-m)cos(θ−m)那么会涉及到arccosarccosarccos操作,计算量过大。论文里写的真棒!

8、ArcFace/Insight Face
来自于2018年论文:
ArcFace: Additive Angular Margin Loss for Deep Face RecognitionArcFace: \ Additive \ Angular \ Margin \ Loss \ for \ Deep \ Face \ RecognitionArcFace: Additive Angular Margin Loss for Deep Face Recognition,也叫Insight FaceInsight \ FaceInsight Face。这个和AM−SoftmaxAM-SoftmaxAM−Softmax类似,前者是余弦角度,这边是变成角度问题。这么做的原因:角度距离比余弦距离在对角度的影响更加直接。
在二分类情况下,对于类别1,ArcFaceArcFaceArcFace的边界决策函数为:


9、小结一下
决策界面:

10、参考链接
https://blog.csdn.net/u014380165/article/details/76946339
https://blog.csdn.net/lucifer_zzq/article/details/81236174
https://zhuanlan.zhihu.com/p/23444100
https://zhuanlan.zhihu.com/p/41479655
https://www.cnblogs.com/heguanyou/p/7503025.html
https://blog.csdn.net/wfei101/article/details/79518017
https://www.jianshu.com/p/c2653bf83584
https://blog.csdn.net/fire_light_/article/details/79602310
https://blog.csdn.net/Fire_Light_/article/details/79602705
https://blog.csdn.net/wfei101/article/details/80700325
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI周红伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值