【7】SVM

1.前言

在神经网络火之前,SVM是一种很强大很火的算法,只是神经网络火了以后,SVM就逐渐“没落”了,但这并不妨碍它在传统算法里的强大。在很多时候,他也是十分有用的。
fisher感知器一样,SVM在分类任务中也是要找一个最优的超平面,让这个超平面能够分开不同类别的样本,使总的错误率最小。只是三种算法求最优超平面的方法不一样。最优的超平面也就意味着模型的泛化能力强。

对于SVM来说,求最优超平面的方法就是最大化分类间隔。因为在空间中,能分开样本的超平面不止一个,很可能是无数个,要找到最好(或者可以认为最好)的那一个,SVM的做法就是,让不同类别的样本之间支持向量间隔最大。
加入我们分类这样一个一维的数据:
在这里插入图片描述
我们的分界面为橙色的竖线,显然,虽然能够把样本分开,但是离其中一个类别太近了,这很可能导致模型泛化能力不强。

在这里插入图片描述
再比如,在上图之中,几条黑色直线都能将两类样本分开,但是,直观来说,较粗的那一条显然好一点,而另外几条离某一类样本太近了,泛化能力很可能不强。

2.间隔和支持向量(基本原理)

在空间中,任何一个超平面都可以使用下面的式子表示。
在这里插入图片描述
其中ω = (ω1,ω2,···,ωd)为法向量,垂直于超平面,决定了超平面的方向;b为偏移项,决定了超平面与原点之间的距离。
划分超平面可以被法向量ω和位移b确定,将其记为(ω,b)。样本空间中任意点到超平面(ω,b)的距离可写为:
在这里插入图片描述
为了更好的理解上面的公式,我们看三维空间中点(x1,y1,z1)到平面Ax+By+Cz+ D = 0的距离计算公式为:
在这里插入图片描述
假设超平面(ω,b)能将训练样本正确分类,即对于(xi,yi)∈D,若yi = +1,则有ωTxi + b > 0;若yi = -1,则有 ωTxi + b < 0。

在这里插入图片描述
注意:上面的公式,我们让ωTxi + b大于1而不是大于0才算正样本,小于-1而不是小于0才算负样本。这样做对于之后的计算有好处。

如图6.2所示,距离超平面最近的几个训练样本点使式(6.3)成立,他们被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为:
在这里插入图片描述
这就是“间隔”(margin)
在这里插入图片描述
预找到具有“最大间隔”的划分超平面,也就是找到满足式(6.3)中约束的参数ω和b,使得γ最大,即:
在这里插入图片描述
上面的间隔公式分子是常数,所以最大化间隔,只需要最小分母||ω||就行了。而为了更简便,我们再将最小化分母转化为最小化||ω||2。显然,这是等价的。而且,这样做(加一个平方)的好处是将原来的问题变为一个凸函数来解决。
在这里插入图片描述
以上便是SVM的基本原理,是不是很简单。

3.对偶问题

我们希望利用式(6.6)来得到最大间隔划分超平面对应的模型:
在这里插入图片描述
虽然,我们使用平方把上面的问题变为一个凸优化的问题了,便于我们使用已有的工具包求解,但是,我们还有更简单高效的方法。
对式(6.6)使用拉格朗日乘子法(先不用考虑拉格朗日乘子法具体怎么做的,只需要了解通过它,我们把原来的问题转化为另一个问题,这两个问题是等价的)可得到其**“对偶问题”(dual problem)**。具体来说,就是对式(6.6)的每条约束添加拉格朗日乘子 αi ≥ 0,则该问题的拉格朗日函数可写为:
在这里插入图片描述
在这里插入图片描述
上面的推导过程如下:
在这里插入图片描述
将式(6.9)代入(6.8),即可将L(ω,b,α)中的ω和b消去,再考虑式(6.10)的约束,就得到式(6.6)的对偶问题:
在这里插入图片描述
在这里插入图片描述
上面带入之后的推导过程如下:
在这里插入图片描述
其中要注意αi,yi均为标量。

再重复一下我们的目的:
我们想要使间隔最大,即找一个w和b在满足条件下使得||w||2最小,即找一组w,b,使得关于α的拉格朗日函数L的上界最小,即找一组α使得关于w和b的函数L的下届最大。(至于原因,之后我会尝试使用拉格朗日乘子法介绍一下)

解出α之后,求出w和b即可得到模型:
在这里插入图片描述
从对偶问题(6.11)接触的αi是式(6.8)中的拉格朗日乘子,它恰对应着训练样本(xi,yi),注意到式(6.6)中有不等式约束,因此上述过程需满足KKT(karush-Kuhn-Tucker)条件,即要求:
在这里插入图片描述
于是,对任意样本(xi,yi)总有αi = 0或yif(xi)=1,若alphai=0,则该样本不会在式(6.12)的求和中出现,也就不会对f(x)有任何影响;若αi>0,则必有yif(xi)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关

学过数学建模的都知道,对于式(6.11)的这样的问题,就是一个规划问题,而且是一个二次规划的问题,既然如此,就可以通过常用的二次规划算法求解。然而,该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销(比如最近做的一个比赛有几百万个样本)。为了避开这个障碍,人们通过利用问题本身的特性,提出了很多高效的算法,SMO(Sequential Minimal Optimization)是其中一个著名的代表[Platt, 1998]。

SMO的基本思路是:先固定αI之外的所有参数,然后求αI上的极值。由于存在约束Σi=1mαIyi = 0,若固定αi之外的其他变量。则αi可由其他变量导出。于是SMO每次选择两个变量αI和αj,并固定其他参数。这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:

  • 选取一对需更新的变量αi和αj
  • 固定αi和·αj之外的参数,求解式(6.11)获得更新后的alphai和·αj

4.核函数(非线性SVM)

上面的讨论,都是基于数据是线性可分的情况,如果线性不可分呢?SVM就不能用了吗?当然可以的
在这里插入图片描述
虽然,像上面这样的数据是线性不可分的,无法用简单的来解决,但是,还有其他基于SVM的方法可以解决这种问题。
比如,上面图中的右图,将原始数据从二维映射到三维,这要找到一个合适的映射函数,就可以在三维空间中将样本分开。已经有人证明:如果原始空间是有限维,即维数有限,那么一定存在一个高维特征空间使样本可分。

令φ(x)表示将x映射后的特征向量,于是,在特征空间中划分超平面对应的模型可表示为:
在这里插入图片描述
在这里插入图片描述
可以看出,非线性的SVM无非就是把x映射到Φ(x)。之后,x的一切运算都变为φ(x)的运算。

求解式(6.21)涉及到计算φ(xiTφ(xj),这是样本xi与xj映射到特征空间之后的内积。由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算φ(xiTφ(xj)通常来说比较困难。为了避开这个障碍,可以设想这样一个函数:
在这里插入图片描述
即xi与xj在特征空间的内积等于他们在原始样本空间中通过函数κ(·,·)计算的结果。有了这样的函数,我们就不必直接去计算高维甚至是无穷维特征空间中的内积,于是式(6.21)可重写为:
在这里插入图片描述
这里的函数κ(·,·)就是“核函数(kernel function)。式(6.24)显示出模型最优解可通过训练样本的核函数展开,这一展式亦称为”支持向量展式“(dupport vector expansion)
显然,若已知合适映射φ(·)的具体形式,则可写出核函数κ(·,·)。但是,在现实中我们通常不知道合适的φ(·)到底是啥样的。针对不同的问题,φ(·)也是不一样的,需要就事论事。这就麻烦了。我们不知道核函数是否存在,也不知道什么样的函数才是合适的核函数。为了解决这个问题,提出了下面的定理。

**定理6.1 (核函数)**:令
定理6.1表明,只要一个对称函数所对应的核矩阵半正定,它就能作为核函数使用(可能不是最好的核函数,但是,确实是一个可以用的核函数)。事实上,对于一个半正定核矩阵总能找到一个与之对应的映射φ。换言之,任何一个核函数都隐式地定义了一个”再生核希尔伯特空间“的特征空间。

通过上面的讨论,我们希望样本在特征空间内线性可分,因此特征空间的好坏对SVM的性能至关重要。需要注意的是,在不知道特征映射的形式时,我们不知道什么样的核函数才是合适的,而核函数也仅是隐式地定义了这个特征空间。于是,”核函数选择“成为支持SVM的最大变数,若核函数选择不合适,意味着样本被映射到一个不合适的特征空间,很可能导致性能不佳。

遗憾的是,我们却是无法直接得出一个函数是不是合适的核函数,所以通常来说,我们会从几个常用的核函数里选择来尝试。下面是几个常用的核函数:
在这里插入图片描述
其中,高斯核是使用最多的一个。
除了上面的几个核函数,由于和函数的运算性质,我们还可以得到其他的核函数:
在这里插入图片描述
在这里插入图片描述

5.软间隔与正则化

上面我们所讨论的全部都是线性可分的情况(即便在样本空间里线性不可分,我们也是通过转化到高维空间变为线性可分),如果我们不转到高维空间或者即便换到高维空间也没有用呢?有时候,由于有错误的训练样本或者异常的样本,适当的错分反而会提高模型的泛化性能。更何况,线性可分这种情况在现实世界里很少见。
所以,我们就需要另外一种方法来解决线性不可分的情况。

为此,我们引入了”软间隔“(soft margin)的概念,如图所示:
在这里插入图片描述
具体来说,前面介绍的支持向量机形式是要求所有样本均满足式(6.3),即所有样本都必须划分正确,这被称为”硬间隔“(hard margin),而软间隔则是允许某些样本不满足约束:
在这里插入图片描述
当然,在最大化间隔的同时,不满足约束的样本应该尽可能少,于是,优化目标可写为:
在这里插入图片描述
显然,C为无穷大时,式(6.29)迫使所有样本均满足约束(6.28),于是,式(6.29)等价于(6.6);当C取有限值时,式(6.29)允许有一些样本不满足约束。
然而,l0/1非凸,非连续,数学性质不太好。使得式(6.29)不易直接求解。于是,人们通常用一些函数来代替l0/1,称为”替代损失“(surrogate loss)。替代损失函数一般具有较好的数学性质,如他们通常是凸的连续函数且是l0/1的上界。下面是三种常用的替代损失函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是常用的”软间隔支持向量机“

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于软间隔的理解,限制我基本的思想即可。

6.支持向量机回归

我们知道,机器学习的两大基本任务就是分类和回归,而一般来说,我们讲一个模型,都会先介绍分类,但是模型不止可以做分类,都可以去做回归。SVM也一样,这时,就是支持向量机回归(SVR)。
回归就是要拟合一条线来逼近已有的样本点,使得样本点到这个线的距离和最近。但是,SVR和普通的回归还有点区别,普通的回归是要预测值和真实值完全相同,这个样本的损失才为0.而SVR是只要预测值和真实值之间的距离不大于一个值,就当作损失为0.我们把这个值叫做:ε。所以,我们可以以拟合的线为中心,在距离其2ε的范围构建一个间隔带,若样本落入间隔带,即被认为预测正确。
在这里插入图片描述
于是,SVR问题可形式化为:
在这里插入图片描述

这里面,如果是普通的回归,只有后一项就行了,因为后一项是不在误差带内的样本点贡献的。加了第一项,就还是SVM的主要思想,通过画图可知,两个误差带边缘分别为:f(x)=ε和f(x)=-ε,他们之间的距离是2ε/||w||,最小化1/2||w||2,就是最大化两个误差带边缘的距离(ε只是表示WTX+b=0,这条线上下平移ε)。可以说是在固定上下平移量的同时,尽可能让误差带宽,当然,同时还要考虑后面一项。(我是暂时这样理解的,正确与否日后再求证)

其中,C为正则化常数,le是图6.7所示的ε-不敏感损失函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述过程需满足KKT条件。即要求:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Appendix

一篇好文:学习SVM,这篇文章就够了!

1.拉格朗日乘子法

(1)无约束求极值
如果要求一个函数的级值,我们直接求导或偏导就行了。但是如果是带约束的优化问题呢?直接求导的话就忽略了约束,所以,如果有约束,不能直接对原函数进行求导。
(2)等式约束求极值
如果是等式约束,一般还比较好说。使用消元法把约束里的某一个或几个变量用其他变量表示,再代入需要求极值的函数里,再按照普通的函数求极值就行了。

但是,有时候约束条件太复杂,很难进行消元甚至压根不能消元。所以,还有另外一种方法:拉格朗日乘子法。

一片推荐的blog:马同学

来源:知乎
在这里插入图片描述
在上图中,函数f和约束g在某一点出相切,在这一点,两个函数的梯度必然成比例。如下图:
在这里插入图片描述
当然,λ可正可负。
如果从代数角度来看的话:
在这里插入图片描述
其中g(x,y(x))是y可以用x表示。利用链式法则分别把f和g对x求导之后,发现二者均有dy/dx。而两个函数的dy/dx成比例λ。所以,可得出存在λ,满足大括号里的三个条件。

通过这三个条件,我们就可以解出函数的极值了。

例题

在这里插入图片描述
在这里插入图片描述

拉格朗日函数

更一般的,我们可以把上面的关系式写成下面的形式:
在这里插入图片描述
这就是拉格朗日函数
上式中λk是约束的比例系数。一个约束就有一个λ。hk是第k个约束。

例题

例题及部分解题来源于:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在这里插入图片描述
从上题可以看出,两种形式拉格朗日乘子法是一样的。只不过使用拉格朗日函数更具有一般性。

但是,我们也看到了上面的方法只是针对等式约束的,如果是不等式约束怎么办?这就需要用到KKT条件了。

2.KKT条件(Kuhn-Tucker condition)

(3)不等式约束
首先,我们知道,虽然不等式约束有大于(等于)和小于(等于),但是,都可以转化为小于(等于)。所以,一个标准的约束优化问题可以写为:
在这里插入图片描述
这就是标准的优化问题,其对应的拉格朗日函数为:
在这里插入图片描述
其中f(x)是原目标函数,hi(x)是第i个等式约束条件,λi是对应的约束系数,gi是不等式约束,ui是对应的约束系数。

所谓的KKT条件是说下面这些条件:
(1)拉格朗日函数L(X, λ, μ)对X求导为零;

(2)h(x) =0; (等式约束)

(3)μ*g(x) = 0; (不等式约束)
(4)μ ≥0
(5)g≤0
    
 最主要的就是上面第三条,因为第一和第二条就是普通的等式约束下的拉格朗日乘子法。
 本来g(x)<=0,如果满足a*g(x)=0,那么只能a=0或者g=0.
 
而后面的(3)到(5)即为 KKT 条件。它的含义是这个优化问题的极值点一定满足这组方程组。(不是极值点也可能会满足,但是不会存在某个极值点不满足的情况)它也是原来的优化问题取得极值的必要条件,解出来了极值点之后还是要代入验证的。但是因为约束比较多,情况比较复杂,KKT 条件并不是对于任何情况都是满足的。
在这里插入图片描述

SVM这一章公式非常多,没必要一下子就全部搞明白。可以先理解基本思想和方法。

3.对偶问题的再解释

来源:知乎
上面我们已经介绍过对偶问题了,但是没有详细的解释,这里再说一下。

附录1和2已经介绍了拉格朗日乘子法,看起来还是比较简单的,但是,那些都是简单的问题,可以直接求解出参数的值,如果函数关系非常复杂,根本求不出连x和y用λ表示都不可能,这时候,就需要使用对偶问题了。

还记得我们上面的问题吗:
在这里插入图片描述
对于更一般化的优化问题:
在这里插入图片描述
对应的拉格朗日函数为:
在这里插入图片描述
上式中,ci是一个不等式(小于等于)约束,对任意的x,ci都小于等于0.对于h,本来就是等式约束,所以对所有x,h都为0。(假设所有的x都满足约束,不存在不满足约束的)
这样一来,对于上式,其最大值是f(x)。
即定义这样一个函数:
在这里插入图片描述

所以原始问题可以转化为:
在这里插入图片描述
有一个定理:

若原始问题和对偶问题都有最优值,则对偶问题最优值d∗ 原始问题最优值p∗
在这里插入图片描述
所以,我们就可以解决对偶问题,来间接求出原始问题。这也是为什么式(6.11)是max的原因了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章