多分类svm的hinge loss公式推导_盘点在人脸识别领域现今主流的loss

5046dcc7980944953b9e72a18386a7df.png

大家好,今天写这篇文章主要是为大家介绍一下在人脸识别领域(Face recogonition)中现今大家最常用的几种loss function.

同样,我会step by step推导每一种loss function,让大家一目了然的看出他们之间的区别和联系。同样,这里我先抛出两个问题:为什么这些同样是做分类的loss,在人脸领域如此大火,但在其他领域,比如Imagenet上面被大家用的基本没有呢?一些最普通最基本的问题上面,这些loss的表现如何?

好了,闲话不多说,咱们直接进入正题:

首先,故事的开始,要从模型如何要做分类讲起:

original softmax:

首先咱们给出一个相当普通的网络图片,仅当事例:

72f3a7a1b38a0cccc39ce5a1a8a84d3f.png

在上图中,分类的最后一层叫做softmax层,其输出是每一类的概率。数学表达为:

d78b505715ef00b02b9d645a4b085d8a.png

这里的X是倒数第二层神经元输出的值,我们叫embedding feature. W为倒数第二层和倒数第一层之间的权重值。换言之最后一层神经元利用倒数第二层提取到的特征来做分类(classification)。

我们在做分类时,有几类最后一层便有几个神经元,比如MNIST,手写数字,有0~9十个数字,共有十类,所以最后一层便有十个神经元,在过激活函数(也就是softmax)前的输出为:

过完softmax,输出便成了每一类的概率。也就是最后一层所有神经元的输出总和为1,每一个单个神经元输出为0~1。

那么得到了概率,我们如何去优化网络呢?这里面我们最常用的就是最普通的cross-entropy loss(交叉熵损失),交叉熵损失函数大家也很熟悉了,这里再啰嗦两句,因为这对之后我们的推导相当重要:

17e5169294cd60432049de5ac4b33674.png

这式子咱们定性理解一下,假如说我们图片数字是0,最后一层第一个神经元代表了该图片是0的概率,假如输出为0.8,我们希望它输出是1,所有这其中的损失可以用交叉熵来衡量:

就是损失带入上式就是

,概率越接近1,损失越小,越接近0,损失越大。从式子上看,这种损失,会将特征以指数程度分开,从而使分类正确。

好了,开胃菜结束,正餐正式开始:

ArcFace Loss

下面,咱们首先介绍的是目前效果最好的一种loss改进,arcFace loss:

首先我们在将最后一层神经元的输出用softmax转换成概率之前,得到是:

第一步,我们使b = 0,那么最后一层softmax前的输出仅变为:

第二步,根据线性代数

可以写为:
,这里的
是将W和X进行
归一化以后的结果,而
代表了W和X之间的夹角。

第三步:我们将

除到左边,然后等式两边同时乘s,我们能够得到:

这个式子很有意思,假如我们将倒数第二层的X归一化,然后再将最后一层的weight归一化,然后乘上因子s(此为常数),我们可以看到,我们的分类此时仅取决于W和X之间的夹角

然后,我们将上式带入我们原始的交叉熵损失函数之中,我们可以得到:

从:

2f9d8dcc462945d16ecdb23aa918eb89.png

由于b = 0, W和X被归一化并且乘上系数s,上式 变为:

892178f2bacc20a69c557f228375343b.png

上面两式在b=0,并完成归一化后完全等价。

好了现在还差最后一步,就推导出我们的arcface啦:

最后一步:我们在

上加上一个常数m,于是此时式子变为:

1e0557b9bf78982d78f35e78aee74d85.png

这就是我们的arcface loss。

那么此时有同学问,加了一个m到底意味着什么呢?

一幅图可以清晰解惑:

e8cccefb8a857c1405aceeb93bcf85fe.png


可以看到,m就意味着类别之间的那个距离。添加了参数m,会有两个好处,扩大了类间距,缩小了类内距。从而使分类的效果更好。

下面,我们看下原论文上面的使用arcface loss的flow chart:

9fc5094b1adf2ae41d5ea4f2d3e064ab.png

从这张图上我们可以清晰看到作者将x和w归一化后相乘得到

,之后求arccos得到角度
,再加上m得到扩大的角度边界,之后再求cos,然后走交叉熵损失,就得到了arcface loss啦。

好了,理解了上述公式和流程,应该就算是打通了任督二脉,看其他的loss也会莫名简单了。

下面进入第三个loss:

Cosine Face loss:

08cb98ecc1cf84bf8feb0ef350cef362.png

对比一下arcface loss:

1e0557b9bf78982d78f35e78aee74d85.png

我觉得多余的解释都是徒劳的,,,其实m就是从cos里面换到了cos外面对吧

为啥这样呢?Cosine Face文中说,这样做能够更容易计算,操作更简单,因为不用算arccos,梯度计算快,反向优化速度快,但是性能可能会比arcface略差。好的,这是可以理解的。

好下面进入第四个loss,

SphereFace loss:

废话不多说,咱们直接看loss的形式:

1a2ccc06e9c885656bb89aeb6423c06c.png

相信大家已经看出来了,这个相比于上面,其实就是多保留了

这一项,没有什么特别新鲜的。其实就是scalar s变成了变动的,从而使效果更好。

那么现在咱们吧上述四个loss放在一块,看一下分类边界的区别:

5963b98199eb234278ab404f0fa82bfb.png

我们发现,除了原始的softmax以外,这三个loss都是为了缩小类内距,扩大类间距从而实现的效果提升。

好了,还有一个loss改善的鼻祖,center loss没有介绍,下面咱们说一下,它的思想虽然和上面三个loss不太一样,但是也非常好理解:

Center loss

在交叉熵损失以外,该论文作者引入了center 的含义,和借由center所产生的损失:

531e5e2c2225a5759399b54d2fa1def7.png

这就是center-loss的一部分,我们观察这个公式,

实际上就是
类的所有数据的center,换言之就是所有属于这类数据特征的平均值。让这个损失最小实际上就是减少类内距。

所以center loss的总体公式就是 交叉熵损失+中心损失:

ac66f1c02a1317fe60a10003cb964457.png

这里用

来控制两种损失的比例,同样我们来看效果图:

fa077fd1a3b913ecb27b49b297f0cd65.png

随着比例越高,center聚合的效果越明显对吧~

事实上,为什么说这个loss比较原始呢?

因为其只考虑了缩小类内距而没有考虑扩大类间距,所以这种loss的表现不如上面三种好,如今已经不被人关注。

好啦,今天大概就先说到这里,这里还有一个triplet loss我没有讲,当成彩蛋下次讲啦~

希望爱好深度学习的同学们一起学习,在deep learning上多多交流讨论~

咱们下次见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值