SVM 模型函数如下,如果f(x)>0, 类别为+1, f(x)<0,类别为-1. 这和逻辑回归类别为0和1不一样。
用y简单表示。当f(x)>0时,希望y是+1,f(x)<0时,希望y是-1.所以yf(x)是正数,当yf(x)越大,loss越小。
SVM的loss function是hinge loss。 定义为 L(f(x),y) = max(0, 1 - yf(x)). 当y=1时,为了让loss为0,则需要f(x)>1,当y=-1时,为了让loss为0,需要f(x)<-1. hinge loss 的曲线如下图紫色所示。其实当yf(x)>0时,就可以说模型的效果比较好,但是在x轴的0-1区间loss还是大于0,有一个penalty,会让yf(x)越大越好。
下图中黑色的线是理想的loss,当yf(x)>0时,loss为0, 当yf(x)<0时,loss为1. 但是理想的loss不好微分,所以需要选择其他的loss函数。
为什么hinge loss中是选择1来减去yf(x),因为这样,hinge loss才能更好的表现ideal loss(?)。
hinge loss 和sigmoid+cross entropy的区别是横轴1之后的区别,当yf(x)>1时,hinge loss就觉得已经很好了,不需要再调整,而sigmoid+cross entropy还希望能更好。hinge loss和cross entropy相比,对outlier没有那么敏感,会更鲁棒一些。
sigmoid + square loss 和sigmoid+cross entropy的区别是在横轴小于1的部分,sigmoid +cross entropy会下降得更快。
而square loss就不适合svm,因为当yf(x)很大时,square loss没有降到很小,而是一个很大的值。
线性SVM
线性SVM的model function是一个线性函数。它的loss function是hinge loss 加上一个正则化项。由于hinge loss 和正则化项都是convex函数,所以加起来loss function 也是一个convex函数。它是可以微分的。
线性SVM和逻辑回归相比,区别只是在于loss function不一样。逻辑回归是用cross entropy来做损失函数,而线性svm是用hinge loss函数。
另外,SVM 的模型函数也可以不是线性函数,只是是linear的时候有一些比较好的特征。当它不是linear的时候,也可以用gradient descent 来训练,所以SVM也有deep的版本,它的model function是非线性函数。所以当在做deep learning的时候,不是用cross entropy做为loss function,而是用hinge loss的话,其实就是一个deep 版本的SVM。所以不要说做的deep learning,做的是SVM,其实他们背后的精神都是可以相通的。
梯度下降
当用gradient descent来求解loss function时,使用链式法则,
由于f(x) =wx+b, 所以后面部分对w求偏微分后为x
前面部分是分段的,按分段条件求偏微分。所以将两个部分合起来后,损失函数对w的偏微分是,设x前面部分为c,w的更新公式为。
完整内容见下图。
另一种公式,可以推出yf(x) > 1-epsilon.其中epsilon表示松弛因子。表示yf(x)并不 一定要严格地大于1,可以有一个epsilon的松弛因子,其中epsilon必须要大于0.
参考:
1. 李宏毅-机器学习 https://www.bilibili.com/video/av68199226/?p=28