HongYiLee SVM Notes

HongYiLee SVM Notes

标签: SVM MachineLearning Notes


HongYiLee Support Vector Machine Notes

简单来说,我们可以将支持向量机看成是Hinge Loss一个特殊的Loss Function加上Kernel Method 核技巧.

Hinge Loss

回到机器学习三步走:

  1. Define a Function Set
  2. Define a Loss Function
  3. Pick the Best Function in Your Set

在Binary Classification二分类问题中,我们可以定义这样的函数集合:

g(x)={+1f(x)>01f(x)<0

这里定义为+1或者-1都是为了方便起见,1或者0都是一样的效果,并不会影响分类效果,但是为了方便推导,这里定为+1和-1.

在这样的情况下,理想情况下的Loss Function会是这样(用L(f)来表示):

L(f)=nδ(g(xn)y^n)

y^n表示的是训练集上的每一个实例的标签,g(xn)是我们的预测结果。δ函数源于信号与系统,当g(xn)y^n不相等时,为1.

这是一个理想的Loss Function,但是理想总是过于丰满(QAQ)。这个函数不可微分,那么意味着我们不能用Gradient Descent 来求解最优解。所以我们想要找到一个替代的Loss Functionl(f)来表示, 来取得近似的结果,这个函数需要可微。
也即:

L(f)=nl(f(xn),y^n)

那下面的问题就是如何来找到一个合适的l(f)了。

简单来说,我们希望在y^n为+1时,f(xn)要越大越好,y^n为-1时,f(xn)要越小越好。整体来说,我们希望这两者要是同号的,而且y^nf(xn)的值要是越大越好。因此如果我们以y^nf(xn)为横坐标,loss 的值为纵坐标,那么在x的右边值应该要下降,而在左边应该要上升。

那么下面做几个尝试:

  • 平方误差,也就是最常用的Square Loss

l(f(xn),y^n)=(y^nf(xn)1)2={(f(xn)1)2y^n=1(f(xn)+1)2y^n=1

这个函数显然是不合理的,因为在y^nf(xn)大于零且变得更正的时候,误差竟然变得很大,这显然是不合理的。

  • Square Loss + Sigmoid Function

l(f(xn),y^n)=(σ(y^nf(xn))1)2={(σ(f(xn))1)2y^n=1(σ(f(xn)))2y^n=1

然而我们知道这样的表现也不会是很好,从曲线中可以看到,但loss 的值和很大的时候,下降的速率却不是很快,这并不是我们想要的。在分类问题中,我们常用的还有交叉熵。

  • Cross Emtrypy + sigmoid
    在使用交叉熵的时候,损失函数可以写成如下:

l(f(xn),y^n)=ln(1+exp(y^nf(xn)))

这时,这个函数虽然不能够表示为原来理想情况下的损失函数,但是却可以成为它的一个上界。

  • Hinge Loss

l(f(xn),y^n)=max(0,1y^nf(x))

进一步做分析,可以看到,Hinge Loss中出现了0项,那么当什么情况下Loss 的值会是0或者被认为是“完美无缺”呢?

if y^n=1:

l(f(xn),y^n)=max(0,1f(x))={0,f(x)>11f(x),f(x)<1

if y^n=1:

l(f(xn),y^n)=max(0,1+f(x))={0,f(x)<11+f(x),f(x)>1

可以看出,Hinge Loss实际上是一种很懒惰的函数,若y^n为+1,当f(xn)大于1的时候,就认为是足够好而不再下降,y^n为-1,当$f(x^n)小于-1则认为是足够好而不再下降。但是正是因为这种懒惰特性,使其对于离群点outlier 的情况更加的稳定,而不容易受到影响。绘制其特图像,会发现很像ReLU 函数。这样的函数在某些点是不连续的,但是仍然是大部分可微的,可以用梯度下降来求解。

下面是上述各损失函数的对比图像:
HongYiLee SVM Notes

Linear SVM

总结一下,我们得到了线性情况下的支持向量机,

  • Function Set

    f(x)=iwixi+b=[wb]×[x1]=wTx

  • Loss Function

l(f(xn),y^n)=max(0,1y^nf(x))

  • Gradient Descent

l(f(xn),y^n)wi=l(f(xn),y^n)f(xn)f(xn)wixin

这里:

f(xn)=wTxn

max(0,1y^nf(xn))f(xn)={y^n,y^nf(xn)<10,y^nf(xn)>1

L(f)wi=iδ(y^nf(xn)<1)y^nxin

我们可以让cn(w)=δ(y^nf(xn)<1)y^n这一项是取决于当前的w的。

如果我们定义εn=max(0,1y^nf(x))那么损失函数可以写作:

L(f)=nεn+λ||w||2

在要求minimizing的情况下,义εn=max(0,1y^nf(x))与下面等价:

{εn0εn1y^nf(x)

所以我们可以推出:

y^nf(x)1εnεn0

这个就是常见的SVM,支持向量机。

那么对于线性的支持向量机,Linear Suppor Vector Machine 我们可以直接使用梯度下降的方式来求解,并且能够得到收敛的结果。而对于更高维的情况我们需要用到Kernel Method 。对于核技巧的方面,在下一篇记录和讲解。