softmax函数_人脸识别损失函数(Center-Loss、A-Softmax、AM-Softmax、ArcFace)

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

1、概要

人脸识别:输入一张图片,进行人脸检测,再提取关键点进行人脸对齐矫正,最后提取人脸特征,进行判别这个人是谁。判别这个人是谁,本质上是分类问题。

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

2、Softmax Loss

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

公式:

上面公式中的

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

下面介绍

上式中的

表示
层输出的第
的概率值。
表示一个 [
x
] 的向量,里面的
列中只有一个为1,其余为0(真实标签的那个为1,其余不是正确的为0)。这个公式有一个更简单的形式是:

其中的

是指当前样本的真实标签。
函数是个递增的函数,你预测错的概率会比你预测对的概率要大,因为前面加了一个负号。

图像分类里面常用

3、Center Loss

来自
一篇论文:

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

632d449b249342822bd1e123cd6c8535.png

如果损失函数采用

,那么特征分布如下图,我们可以看出相比于
类间距离变大了,类内距离变小了:

be17d031b0738620e7550d3566d19851.png

所以我们可以看出

能够
最小化类内距离的同时保证特征可分,来提高特征之间的可判别性!简单地说,给每一类(
)定义一个类中心(
),同一类的数据向类中心靠近,离得远要惩罚!于是
就出现了。

其中

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

那么上述的

每一
怎么确定的呢?理想情况下,
需要随着学习到的
进行实时更新,也就是在每一次迭代的时候用整个数据集的
来计算每个类的中心。但是这样时间复杂度高,于是:用
来更新
,每一轮计算一下当前
数据与
的距离,然后这个距离以梯度的形式叠加到
上。 我们下面对
求导:

这里因为每个

的数量
太小,那么每次更新
可能会引起
抖动。那么梯度上面加个限制
,这个值在
之间:

为了最小化类内,最大化类间,即满足特征可分和特征可判别,论文中将

结合。

f82f3979f644cfdd2939e19a97ba861d.png

有大牛在

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

4、A-Softmax Loss

来自于
。论文题目:
拿图像分类来说。卷积神经网络提取特征,然后全连接层进行扁平化,再送入
层实现分类。传统的
很容易优化,因为它没有尽可能的扩大类间距离,缩小类内距离。

假设最后一层的输出特征向量为

,它对应的标签是
,那么
又可以写成:

那么上式

可以表示为:

其中

可以用欧式空间的向量积来表示:

上式中

表示类别总数,上述公式再进一步限制,
(这是一个很重的点哦)。 那么上式又变为:

上述公式更直白的解释为:二分类,

进行分类,决策界面是
,上面
归一化,且偏置
为 0,那么上述就为:

那么我们可以得出:一个输入特征

属于
类,那么该
的角度应该比所有的其他的类都要小(因为
是减函数)。

原始的

,其中的
是类别中学习的特征,
表示
角度。小结一下:原始
的目的使得
,即
,从而得到
正确的分类结果。如果我们使用
时,才判为类别1,这样我们可以看出决策函数更严格,因为这边的
才会判定类别1;同理,
判断为类别2,也就是
,判断为类别2。很抽象,我一开始看的时候也很抽象,所以我们来个直观的解释,超球体解释:

ef0da6a53b6b2411e10d82a7f2297180.png

上面的是二维平面,下面是三维超球体解释图。

使
,所以依靠的是样本
角度,这个角度越小就越有可能是这一类,而添加一个
的目的:使类间的距离足够大,使类内距离足够小。也就是放大了类间的距离,也因放大了不同类之间的间隔而使类内更聚拢。

但是,原来的

里面的
,如今
超出了向量之间的夹角函数
定义域范围
咋办?把
堆叠起来变成一个递减的连续的函数,详细见论文!

5、L-Softmax Loss

来自于
的一篇论文:
的区别在于
没有归一化,偏置不必归0。
的过程类似,我简单再介绍一下:

上述公式更直白的解释为:二分类,

属于类别1,我们就希望
。我们把它转成点积,得:

那么

将上面表达式修改为:

其中

值越大则学习的难度也越大。因此通过这种方式定义损失会逼得模型学到类间距离更大的,类内距离更小的特征。

b5bb7c50887e1542a5511062585fc544.png

6、CosFace Loss

来自于

论文:
从余弦的角度思考

其中

,其中
余弦代表特征向量与权重向量的角度余弦值

人脸识别是根据两个特征向量之间的余弦相似度计算的。这表明,特征向量

的范数是对评分功能没有贡献,于是,通过
归一化范式将
设定为1,将
设定为
,于是
公式变成了如下:

接下来,作者把余弦边缘项

加上去,与
不同的是:此时的
不是乘积项,而是减法。

同时满足:

所以,其特征会分布在一个超球面上。下图为二维和高维示意图:

5094db5a65fde8e368724d27a9d41f21.png

7、AM-Softmax

这一部分主要参考下面链接,大牛写的特棒!https://blog.csdn.net/fire_light_/article/details/79602310。 该损失函数来自于

论文:

个人感觉

撞车了,不管啦,那就解读一下上个没解释的一些问题。 首先再回顾一下
:

:

上式中的

可以替换成
。理由上面说明了哈! 然后
出场了,把上面的
变成
。所以式子就变成了:

同时满足:

好处:在于

的倍角计算是要通过倍角公式,反向传播时不方便求导,而只减m反向传播时导数不用变化。作者认为,
是用
乘以
,而
是用
减去
,这是两者的最大不同之处:一个是角度距离,一个是余弦距离。使用传统的Softmax的时候,角度距离和余弦距离是等价的,即:

但是当我们试图要推动决策边界的时候,角度距离和余弦距离就有所不同了。最终的决策边界是和余弦相关的,根据cos的性质,优化角度距离比优化余弦距离更有效果,因为余弦距离相对更密集。之所以选择

,
而不是
,这是因为我们从网络中得到的是权重
和特征
的内积,如果要优化
那么会涉及到
操作,计算量过大。论文里写的真棒!

8、ArcFace/Insight Face

来自于2018年论文:

也叫

。这个和
类似,前者是余弦角度,这边是变成角度问题。这么做的原因:
角度距离比余弦距离在对角度的影响更加直接。 在二分类情况下,对于类别1,
的边界决策函数为:

ce7463966238df3a4f33d1d79c96e8a0.png

9、小结一下

e33b16d09ffcc4eef7cd17602c459a59.png

决策界面:

79e2bd733e14a23871229fb14931795c.png

2c332ed36bf79934ebf1b53efe2e37e8.png

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值