本篇文章讲述支持向量机的原型与他的拉格朗日对偶问题。
主要参考资料:
支持向量机(support vector machine)处理的是分类问题。首先,我们考虑这样一个问题,二维平面上有两个点集,要画一条一维直线把他们分开。
如图,A是给定的点集,B,C,D分别尝试用一条直线分开。直观来看,D中的直线比B,C中的要更合理一些。支持向量机算法就是要求得这一最为合理的直线。点集中距离这条直线最近的那些点被称作支持向量
这里,我们的输入属性值共有两种(二维点集),我们可以将分割的概念推广到高维空间中去。已知二维的点集可以用一维的直线分开(假定点集是线性可分的),那么在同样的假定下,三维空间中的点集可以用二维的平面分开,n维空间中的点集可以用n-1维的“平面”分开。由于人类无法直观感受到三维以上的空间,我么这些情形,统一把这“平面”称作超平面。
在n维空间中,要描述这样一个超平面,我们可以写:
有了这些符号的定义,我们可以写出支持向量机的原型/基本型:
即在对于每一个样本点满足条件y(wTx+b)≥1y(wTx+b)≥1的情况下,通过最小化1/2||w||21/2||w||2来求得参数w,bw,b。
下面我们将从零开始推导这两行的问题原型。
首先,我们考虑什么样的超平面分割效果最好?
我们看到,D中直线和两个类别的点集的轮廓接近平行,换句话说,它离各个属性点集的最小距离最大。推广到高维空间就是最佳超平面与各个属性点集的最小距离最大。这样的超平面产生的分类结果是最为鲁棒的,对未见样本的泛化性能更强。那么现在,事情就转化成了,先求处最小距离表达式,再求这式取最大值时w,b的值。
我们先求任意点到超平面距离的表达式。
我们有这张示意图,即在二维空间中的情形(我么可以毫不费力地将下面的结果推广到高维空间)。注意两坐标轴都标为x,这是因为竖轴也是用来表示样本点坐标,而在这个问题中我们用y来表示样本点的属性(上图中就有y=红色或y=绿色)。
同样在上图中,我们用A来标记某一个(任意一个)样本点xixi,而B点是通过A点向超平面作垂线与超平面的交点。我们还有超平面的法向量w,因此,w/||w||w/||w||就是法向量方向上的单位向量。
我们令,|AB|=γi|AB|=γi,可以得到B点坐标为xi−γiw/||w||xi−γiw/||w||,同时,点B在超平面上,满足超平面方程wTx+b=0wTx+b=0,将点B坐标带入超平面方程,移项,解得|AB|=γi=|wTxi+b|/||w|||AB|=γi=|wTxi+b|/||w||。
但存在一个问题,对于上图中的A我们得到的距离是正值,然而对于绿色的点,距离就变成了负值。回想我们的目的是要对这些距离的值进行计算,这符号相异的情形令人十分烦躁。于是我们将两个属性的点的y值分别标记为1和-1,然后在进行距离计算之后,所得距离乘以这个y值,即γi=yi|wTxi+b|/||w||γi=yi|wTxi+b|/||w||。这时,我们就有了任意样本点与超平面几何距离的一般表达式。
回想我们是想要最小距离最大化,那么现在我们可以直接写:
但是直接求解我们得到的问题相当困难(非凸优化),我们需要对这个问题进行最后的等价转换,使他称为相对更容易求解的原型。
回想,对于一个样本点x,当wTx+b>0wTx+b>0时,就预测他为+1,wTx+b<0wTx+b<0时,就预测他为-1(跃迁函数)。那么当w和b同时乘以一个大于零的乘数因子时,预测结果不会改变。所以说我们有自由缩放w,b的权利,因此我们不妨限制整个样本集中与超平面距离最小的距离为γγ=1。我们由此得到:
第二行已经于原型完全相同,我们再来关注第一行。回想我们对γγ的定义γ=y|wTxi+b|/||w||γ=y|wTxi+b|/||w||,最大化γγ等价于最小化||w||||w||等价于最小化||w||2||w||2。为了求导方便,我们增加1/2的乘积因子。所以我们最终得到了支持向量机的原型:
第二行求出所有距离中的最小值,第一行求他的最大值,我们想获得取最大值时参数w和b的值。
我们发现,我们刚刚得到的支持向量机的原型问题是一个凸二次规划问题,能直接用现成的优化计算包来求解,但我们可以导出更加高效的方法。即将原型转化为拉格朗日对偶问题求解。
我们看到,我们的原型属于一个条件极值问题,即在yi(wTxi+b)≥1yi(wTxi+b)≥1的条件下,求1/2||w||21/2||w||2的极值,现在我们来研究这种问题的解决方法。
我们考虑这样一个问题:寻求函数
首先,假设函数(1.1)在(x01,x02)(x10,x20)取得极值,那么显然这点需要满足条件(1.2),即有
接下来,为了使用隐函数存在定理,我们做如下假定:
则由隐函数存在定理:
设函数ϕ(x1,x2)ϕ(x1,x2)在点(x01,x02)(x10,x20)的某一邻域内具有连续的偏导数,且ϕ(x01,x02)=0ϕ(x10,x20)=0,ϕx2(x01,x02)≠0ϕx2(x10,x20)≠0,
则方程ϕ(x1,x2)=0ϕ(x1,x2)=0在点(x01,x02)(x10,x20)的某一邻域内恒能唯一确定一个连续且具有连续导数的函数x2=g(x1)x2=g(x1),它满足条件x02=g(x01)x20=g(x10),并有dx2/dx1=−ϕx1/ϕx2dx2/dx1=−ϕx1/ϕx2。
可知,方程(1.2)确定了一个连续且具有连续导数的函数x2=g(x1)x2=g(x1)(注意,我们只利用了隐函数的存在性,而并不强求他能被显化),把它带入(1.1)式,结果得到了一个只关于x1x1的函数
于是所求极值转化为了(1.4)在x1=x01x1=x10时的值(因为我们之前曾假定函数(1)在(x01,x02)(x10,x20)取得极值)。这一元函数取得极值的条件便是关于自变量的导数为零,即当x1=x01x1=x10时,有:
由之前隐函数存在性定理中提到的求导公式,可以知道当x1=x01x1=x10时,dx2/dx1=−ϕx1/ϕx2dx2/dx1=−ϕx1/ϕx2,代入上式,得到
于是,这式与之前的(1.3)式ϕ(x01,x02)=0ϕ(x10,x20)=0就是所求极值的条件。
其实到此为止我们已经完成目的了,但为了方便记忆,我们设fx2(x01,x02)/ϕx2(x01,x02)=−λfx2(x10,x20)/ϕx2(x10,x20)=−λ,则上述条件可以等价地改写为
引进辅助函数L(x1,x2)=f(x1,x2)+λϕ(x1,x2)L(x1,x2)=f(x1,x2)+λϕ(x1,x2),则对这函数分别关于x1,x2x1,x2求偏导数,就得到了上面第一、二个式子。
在这个辅助函数里面,L(x1,x2)L(x1,x2)被称作拉格朗日函数,λλ被称作拉格朗日乘子,这一方法也被称作拉格朗日乘数法。
我们只讨论了二元函数的条件极值,但回想我们要转化的原型:
为了推广拉格朗日乘数法,我们考虑这样一个问题:求n+m个变元的函数
首先,假设函数(2.1)在(x01,x02,.....,x0n+m)(x10,x20,.....,xn+m0)取得极值,那么显然这点需要满足条件(2.2),即有
接下来,类似于为了使用隐函数存在定理,我们做如下假定:
从偏导数组成的雅可比矩阵内取出的m阶行列式中至少有一个在点(x01,x02,.....,x0n+m)(x10,x20,.....,xn+m0)处不为零
则由定理:
假定:
1)一切函数F1,F2,...FmF1,F2,...Fm在以点(x01,x02...x0n,y01,y02,...y0m)(x10,x20...xn0,y10,y20,...ym0)为中心的某邻域内有定义且连续
2)在定义域中这些函数关于一切变元的偏导数存在且连续
3)点(x01,x02...x0n,y01,y02,...y0m)(x10,x20...xn0,y10,y20,...ym0)满足方程组Fi(x01,x02...x0n,y01,y02,...y0m)=0 i=1,2...,mFi(x10,x20...xn0,y10,y20,...ym0)=0 i=1,2...,m
4)雅可比式在此处异于零
则:
1)在点(x01,x02...x0n,y01,y02,...y0m)(x10,x20...xn0,y10,y20,...ym0)的某邻域内确定y1,y2,...ymy1,y2,...ym为x1,x2...,xnx1,x2...,xn的单值函数
2)当x1=x01,...xn=x0nx1=x10,...xn=xn0时,这些函数的函数值为y1=y01,....ym=y0my1=y10,....ym=ym0
这些函数连续且有关于一切变元的偏导数
可知,(2.2)中xn+1,xn+2,.....,xn+mxn+1,xn+2,.....,xn+m就可以写成关于x1,x2,....xnx1,x2,....xn的函数了,即
注意到我们得到的函数(2.4)中后面的变量与前面的变量有关,并不是所有变量都能自由地变动的,所以并不能用一般的方法来求他的极值。于是我们还要进行如下一波骚操作:
不要忘记,我们之前已经有过假设:函数(2.1)在(x01,x02,.....,x0n+m)(x10,x20,.....,xn+m0)取得极值。
那么,在该点的全微分:df(x01,x02,.....,x0n+m)=f′x1dx1+f′x2dx2+...+f′xn+mdxn+m=0df(x10,x20,.....,xn+m0)=fx1′dx1+fx2′dx2+...+fxn+m′dxn+m=0。
先了解一下下面这个定理:
如果其中各个微分dx1,dx2,...,dxn+mdx1,dx2,...,dxn+m是任意的,则各个偏导数f′x1,f′x2,.....,f′xn+mfx1′,fx2′,.....,fxn+m′都等于零。
又由一阶微分形式的不变性,这条件可以写成
但是我们不能断定各个偏导数f′x1,f′x2,.....,f′xn+mfx1′,fx2′,.....,fxn+m′都等于零。因为各个微分dx1,dx2,...,dxn+mdx1,dx2,...,dxn+m不是任意的(回想刚才了解的定理和之前说过的:并不是所有变量都能自由地变动的)。
这样的情形同样令人十分烦躁。所以我们要试图使问题只涉及可以任意选取的微分,即前n个微分。
回想我们有m个条件方程(2.2):
回想很久之前我们做过这样一个假定:
从偏导数组成的雅可比矩阵内取出的m阶行列式中至少有一个在点(x01,x02,.....,x0n+m)(x10,x20,.....,xn+m0)处不为零。因此,从(2.7)中我们可以将dxn+1,...dxn+mdxn+1,...dxn+m用dx1,dx2,...,dxndx1,dx2,...,dxn表达。把这些表达式代入(2.6):
但非常容易能够知道,上述方法会导致非常非常复杂的计算。伟大的拉格朗日提出了解决方法:把(2.7)
中的各个等式
回想我们之前使用过的那个假定:
从偏导数组成的雅可比矩阵内取出的m阶行列式中至少有一个在点(x01,x02,.....,x0n+m)(x10,x20,.....,xn+m0)处不为零。
这假定使得下面的操作成为可能 :
这样选取乘数λi (i=1,2,...m)λi (i=1,2,...m)的值,使得(2.8)中微分dxn+1,...dxn+mdxn+1,...dxn+m前得系数刚好等于零:
这样确定了乘数λi(i=1,2,...m)λi(i=1,2,...m)的值之后,之前的等式(2.8)就成为了
如果其中各个微分dx1,dx2,...,dxn+mdx1,dx2,...,dxn+m是任意的,则各个偏导数f′x1,f′x2,.....,f′xn+mfx1′,fx2′,.....,fxn+m′都等于零。
于是我们有了:
其实到此为止我们已经完成目的了,但为了方便记忆,与二元函数的情形类似地,我们引入辅助函数F=f+λ1ϕ1+...+λmϕmF=f+λ1ϕ1+...+λmϕm,这样,上面的方程就可以写成
重述一遍多元函数的拉格朗日乘数法:
求n+m个变元的函数
z=f(x1,x2,x3...,xn+m)z=f(x1,x2,x3...,xn+m)
假定这些变元满足m个条件:ϕi(x1,x2,x3...,xn+m)=0 >(i=1,2,...,m)ϕi(x1,x2,x3...,xn+m)=0 >(i=1,2,...,m)时的极值点。
我们的做法是:
引入拉格朗日函数
F=f+λ1ϕ1+...+λmϕmF=f+λ1ϕ1+...+λmϕm并令∂F/∂xj=0 (j=1,2,...,n+m)∂F/∂xj=0 (j=1,2,...,n+m)从而解出所有的自变量 x1,x2,...xn+mx1,x2,...xn+m
再来回想我们的支持向量机原型:
我们把要讨论的主问题记为:
我们定义广义拉格朗日函数:
我们来思考为什么这个取最大值的操作有意义呢?我们的限制条件是gi(w)≤0gi(w)≤0,假如有某一个gi(w)≥0gi(w)≥0,我们又是要将整个函数最大化,这就迫使乘数ai≥0ai≥0越大越好,于是整个函数就趋向于无穷。反而如果所有条件都满足gi(w)≤0gi(w)≤0,那么无论乘数多大,这一项aigi(w)aigi(w)都不会出现在拉格朗日函数之中(对于hi(w)≠0hi(w)≠0也是同样的道理)。也就是说,θpθp有这样的性质:
如果违背了任一条件,则它趋向于正无穷;如果所有条件都满足,则它的值等于L(w,a,b)。
我们不希望违背条件,
所以我们不希望θpθp趋向于正无穷,
所以我们希望θpθp趋向于零,
所以我们希望最小化θpθp。
设p*为主问题的解,即
高潮来了,定义对偶问题:θd=minwL(w,a,b)θd=minwL(w,a,b),其中 d 代表着“对偶”(dual)
我们设d*为对偶问题的解,下面这个式子:
我们一会再来说这莫名其妙的KKT条件。先观察上面的式子,即一个函数最小值中的最大值≤≤最大值中的最小值。
我们再列出KKT(Karush-Kuhn-Tucker)条件:
好的,再次回忆我们的原型(简单地移项):
将1−yi(wTxi+b)1−yi(wTxi+b)看作gi(w)gi(w),我们就有拉格朗日函数
我们令L(w,a,b)对w和b的偏导数为零得到w=∑aiyixiw=∑aiyixi和0=∑aiyi0=∑aiyi
综合上面几个式子,我们终于得到关于支持向量机原型的对偶问题:
在满足KKT条件
的情形下,我们从上式中解出a,然后就能求出w和b,这样就得到了所求的超平面wTx+bwTx+b。
但是,同样地,这是一个二次规划问题,问题的规模正比于训练样本数。于是,人们提出了很多高效算法,包括著名的SMO算法。
本文花费了大量的篇幅讲述支持向量机的原型与其拉格朗日对偶问题的推导过程。虽然说,明白了算法的推导过程并不意味着能够使用好,但是,如果只知道结论而对于结论的来历完全不懂的话,不仅会在接下来的拓展学习中遭遇天花板,更会减少创新的能力。希望有科研志向的读者能够对于每一个算法都不拘泥于仅仅学会使用。
本文关于拉格朗日对偶问题的推导,二元部分来自高等数学,多元推广来自俄罗斯数学分析的教材。为了便于理解,我尽力将这些部分写得尽可能的友善。但是由于这狗血问题本身的复杂性,我也是在反复阅读之后才明白作者的确切意思(当然现在我才大一,数学功底有限),如果读者没能在读完第一遍的时候完全明白,也千万不要灰心:)
至此本文更是超过一万一千字,但也仅仅介绍了支持向量机算法最基础部分的一部分。在下一篇文章里,我们将继续讨论基于拉格朗日对偶问题的SMO算法,核函数与核技巧等内容。