浅谈人脸识别中的loss 损失函数
在人脸识别中,算法的提高主要体现在损失函数的设计上,损失函数会对整个网络的优化有着导向性的作用。我们看到许多常用的损失函数,从传统的softmax loss到cosface, arcface 都有这一定的提高,这篇文章自己就来整理下这几个算法。
无论是SphereFace、CosineFace还是ArcFace的损失函数,都是基于Softmax loss来进行修改的。
Base line | Softmax loss |
各种延伸的算法 | Triplet loss, center loss |
最新算法 | A-Softmax Loss(SphereFace), Cosine Margin Loss, Angular Margin Loss, Arcface |
Softmax loss
这就是softmax loss函数,表示全连接层的输出。在计算Loss下降的过程中,我们让
的比重变大,从而使得log() 括号内的数更变大来更接近1,就会 log(1) = 0,整个loss就会下降。
这种方式只考虑了能否正确分类,却没有考虑类间距离。所以提出了center loss 损失函数。(paper)
Center loss
center loss 考虑到不仅仅是分类要对,而且要求类间有一定的距离。上面的公式中表示某一类的中心,
表示每个人脸的特征值。作者在softmax loss的基础上加入了
,同时使用参数
来控制类内距离,整体的损失函数如下:
Triplet Loss
三元组损失函数,三元组由Anchor, Negative, Positive这三个组成。从上图可以看到,一开始Anchor离Positive比较远,我们想让Anchor和Positive尽量的靠近(同类距离),Anchor和Negative尽量的远离(类间距离)。
表达式左边为同类距离 ,右边为不同的类之间的距离。使用梯度下降法优化的过程就是让类内距离不断下降,类间距离不断提升,这样损失函数才能不断地缩小。
上面的几个算法都是比较传统老旧的,下面说一下比较新的算法。
L-softmax
前面Softmax loss函数没有考虑类间距离,Center loss函数可以使类内变得紧凑,但没有类间可分,而Triplet loss函数比较耗时,所以提出了L-softmax函数。L-softmax函数不仅希望类间距离拉的更大,还能够把类内距离压缩的更紧凑。
把其中的cosθ改成了cos(mθ),起到了增加 margin 的效果,让类内距离更加紧凑,类间距离更加清晰可分,如下图所示。
A-Softmax Loss
TODO
AMSoftmax/CosFace
TODO
ArcFace
TODO