【这边文章主要讨论的问题】:
这里先介绍一下对SVM的部分基础知识,以及本文使用的算法符号。
基本就这么多了,咱们开始看损失函数吧。
在学这个之前,如果你已经学过了逻辑回归,那就更好了。一文搞懂:线性回归与逻辑回归(似然参数估计)
谈到损失函数,我们必须要明确一点:分类任务的目标是什么?
对于SVM来说:
【为什么用“也许”呢?如果?】的时候,和哪个更好,其实我们并不能得到正确答案。因为两种情况都是分类正确的。
一般的平方损失就是:
但是因为这里的两类是用+1和-1来表示的,所以可以写成这个样子:
这样的写法的话,就是希望:
这里放一个loss function的函数图:
然后上面的平方损失,就是途中的红色的曲线。我们先品一品是什么?
回到平方损失,可以看到,平方损失在大于1的时候,损失越来越大。这个不合理呀。你考试,肯定是越高越好,不可能只要求你考70分。你考80分怎么还比70分得到更大的损失。
【这也是分类问题为什么不使用平方损失的原因。因为回归的时候,要预测的是一个数值,高了低了都不好。但是回归的时候,是一个阈值,距离这个阈值越远,越好,没有上限。】
来看一下交叉熵损失。交叉熵需要把模型的结果归一化到0~1中间,所以先对的结果,加上一个sigmoid函数。
看一下交叉熵的SVM损失函数:
这个绿色的损失看起来不错,比平方损失强多了。
目前:交叉熵完爆平方损失。
有人提出,假设使用sigmoid将限制在0~1内,那么,就可以避免平方损失在大于1的区间内出现的问题。
损失函数变成:
图像是下图中的蓝色的线。
但是sigmoid+平方损失还是不如交叉熵。举个例子:假如一个样本的非常小,那么交叉熵的梯度就会非常大而sigmoid+平方损失的梯度却非常小。非常小的梯度意味着小的变化,如果使用sigmoid+平方损失作为损失函数,会让模型收敛的非常慢。
总之,分类问题,用交叉熵非常的好。
那么SVM的hinge loss是什么呢?
其实这个的函数图像与交叉熵非常的像:
图中紫色的就是hinge loss的图像了,为了让其更加明显,用红色的箭头来凸显了。
【PS:有一点点像ReLu的翻转】
【Hinge Loss vs CrossEntropy】
Hinge loss感觉就会把更多的注意力放在没有分类分的很好的那些样本上,不会再注意的样本了。像是focal loss的感觉。
最后,可以感觉到。如果线性SVM使用交叉熵损失函数的那,那就是Logistic Regression逻辑回归了。所以SVM与其他模型区分的关键就是Hinge Loss损失函数。
所以有的时候,对于一个多层感知机,使用了Hinge Loss的话,也会被成为深度SVM模型。