您的位置:首页 > 其它

SVM中的对偶问题、KKT条件以及对拉格朗日乘子求值得SMO算法

2014-08-22 18:11 351 查看
考虑以下优化问题



目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用

来表示算子,得到拉格朗日公式为



L是等式约束的个数。

然后分别对w和

求偏导,使得偏导数等于0,然后解出w和

。至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其他不等式的约束,dw的变化方向与f(w)的梯度垂直时才能获得极值,而且在极值处,f(w)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(参考《最优化与KKT条件》)

然后我们探讨有不等式约束的极值问题求法,问题如下:



我们定义一般化的拉格朗日公式





这里的



都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的

已经不是0了,我们可以将

调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:



这里的P代表primal。假设

或者

,那么我们总是可以调整



来使得

有最大值为正无穷。而只有g和h满足约束时,

为f(w)。这个函数的精妙之处在于

,而且求极大值。

因此我们可以写作



这样我们原来要求的min f(w)可以转换成求

了。



我们使用

来表示

。如果直接求解,首先面对的是两个参数,而

也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?

我们先考虑另外一个问题



D的意思是对偶,

将问题转化为先求拉格朗日关于w的最小值,将



看作是固定值。之后在

求最大值的话:





这个问题是原问题的对偶问题,相对于原问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) <= MinMax(X)。然而在这里两者相等。用

来表示对偶问题如下:



下面解释在什么条件下两者会等价。假设f和g都是凸函数,h是仿射的(affine,

)。并且存在w使得对于所有的i,

。在这种假设下,一定存在

使得

是原问题的解,

是对偶问题的解。还有

另外,

满足库恩-塔克条件(Karush-Kuhn-Tucker,
KKT condition),该条件如下:



所以如果

满足了库恩-塔克条件,那么他们就是原问题和对偶问题的解。让我们再次审视公式(5),这个条件称作是KKT
dual complementarity条件。这个条件隐含了如果

,那么

。也就是说,

时,w处于可行域的边界上,这时才是起作用的约束。而其他位于可行域内部(

的)点都是不起作用的约束,其

。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。

这部分内容思路比较凌乱,还需要先研究下《非线性规划》中的约束极值问题,再回头看看。KKT的总体思想是将极值会在可行域边界上取得,也就是不等式为0或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为0的约束,要么是等式约束。对于在可行域边界内的点,对最优解不起作用,因此前面的系数为0。

7 最优间隔分类器(optimal margin classifier)


重新回到SVM的优化问题:



我们将约束条件改写为:



从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数

,也就是说这些约束式

,对于其他的不在线上的点(

),极值不会在他们所在的范围内取得,因此前面的系数

.注意每一个约束式实际就是一个训练样本。

看下面的图:



实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,那么他们前面的系数

,其他点都是

。这三个点称作支持向量。构造拉格朗日函数如下:



注意到这里只有

没有

是因为原问题中没有等式约束,只有不等式约束。

下面我们按照对偶问题的求解步骤来一步步进行,



首先求解

的最小值,对于固定的



的最小值只与w和b有关。对w和b分别求偏导数。





并得到



将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数)

代入后,化简过程如下:





  最后得到



由于最后一项是0,因此简化为



这里我们将向量内积

表示为



此时的拉格朗日函数只包含了变量

。然而我们求出了

才能得到w和b。

接着是极大化的过程







前面提到过对偶问题和原问题满足的几个条件,首先由于目标函数和线性约束都是凸函数,而且这里不存在等式约束h。存在w使得对于所有的i,

。因此,一定存在

使得

是原问题的解,

是对偶问题的解。在这里,求

就是求

了。

如果求出了

,根据

即可求出w(也是

,原问题的解)。然后



即可求出b。即离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。

关于上面的对偶问题如何求解,将留给下一篇中的SMO算法来阐明。

这里考虑另外一个问题,由于前面求解中得到



我们通篇考虑问题的出发点是

,根据求解得到的

,我们代入前式得到



也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了

,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的

,其他情况

。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。这是上篇,先写这么多了。

SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规划优化算法,特别针对线性SVM和数据稀疏时性能更优。关于SMO最好的资料就是他本人写的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。

我拜读了一下,下面先说讲义上对此方法的总结。

首先回到我们前面一直悬而未解的问题,对偶函数最后的优化问题:





要解决的是在参数

上求最大值W的问题,至于



都是已知数。C由我们预先设定,也是已知数。

按照坐标上升的思路,我们首先固定除

以外的所有参数,然后在

上求极值。等一下,这个思路有问题,因为如果固定

以外的所有参数,那么

将不再是变量(可以由其他值推出),因为问题中规定了





因此,我们需要一次选取两个参数做优化,比如



,此时

可以由

和其他参数表示出来。这样回带到W中,W就只是关于

的函数了,可解。

这样,SMO的主要步骤如下:





意思是,第一步选取一对



,选取方法使用启发式方法(后面讲)。第二步,固定除



之外的其他参数,确定W极值条件下的





表示。

SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效。

下面讨论具体方法:

假设我们选取了初始值

满足了问题中的约束条件。接下来,我们固定

,这样W就是



的函数。并且



满足条件:





由于

都是已知固定值,因此为了方面,可将等式右边标记成实数值











异号时,也就是一个为1,一个为-1时,他们可以表示成一条直线,斜率为1。如下图:





横轴是

,纵轴是





既要在矩形方框内,也要在直线上,因此







同理,当



同号时,







然后我们打算将



表示:





然后反代入W中,得





展开后W可以表示成

。其中a,b,c是固定值。这样,通过对W进行求导可以得到

,然而要保证

满足

,我们使用

表示求导求出来的

,然而最后的

,要根据下面情况得到:





这样得到

后,我们可以得到

的新值



下面进入Platt的文章,来找到启发式搜索的方法和求b值的公式。

这边文章使用的符号表示有点不太一样,不过实质是一样的,先来熟悉一下文章中符号的表示。

文章中定义特征到结果的输出函数为





与我们之前的

实质是一致的。

原始的优化问题为:





求导得到:





经过对偶后为:





s.t.







这里与W函数是一样的,只是符号求反后,变成求最小值了。



是一样的,都表示第i个样本的输出结果(1或-1)。

经过加入松弛变量

后,模型修改为:









由公式(7)代入(1)中可知,





这个过程和之前对偶过程一样。

重新整理我们要求的问题为:





与之对应的KKT条件为:





这个KKT条件说明,在两条间隔线外面的点,对应前面的系数

为0,在两条间隔线里面的对应

为C,在两条间隔线上的对应的系数

在0和C之间。

将我们之前得到L和H重新拿过来:









之前我们将问题进行到这里,然后说将



表示后代入W中,这里将代入

中,得





其中





这里的



代表某次迭代前的原始值,因此是常数,而



是变量,待求。公式(24)中的最后一项是常数。

由于



满足以下公式





因为

的值是固定值,在迭代前后不会变。

那么用s表示

,上式两边乘以

时,变为:





其中





代入(24)中,得





这时候只有

是变量了,求导





如果

的二阶导数大于0(凹函数),那么一阶导数为0时,就是极小值了。

假设其二阶导数为0(一般成立),那么上式化简为:





将w和v代入后,继续化简推导,得(推导了六七行推出来了)





我们使用

来表示:





通常情况下目标函数是正定的,也就是说,能够在直线约束方向上求得最小值,并且



那么我们在(30)两边都除以

可以得到





这里我们使用

表示优化后的值,

是迭代前的值,



与之前提到的一样

不是最终迭代后的值,需要进行约束:





那么





在特殊情况下,

可能不为正,如果核函数K不满足Mercer定理,那么目标函数可能变得非正定,

可能出现负值。即使K是有效的核函数,如果训练样本中出现相同的特征x,那么

仍有可能为0。SMO算法在

不为正值的情况下仍有效。为保证有效性,我们可以推导出

就是

的二阶导数,



没有极小值,最小值在边缘处取到(类比

),

时更是单调函数了,最小值也在边缘处取得,而

的边缘就是L和H。这样将



分别代入

中即可求得

的最小值,相应的

还是

也可以知道了。具体计算公式如下:





至此,迭代关系式出了b的推导式以外,都已经推出。

b每一步都要更新,因为前面的KKT条件指出了



的关系,而

和b有关,在每一步计算出

后,根据KKT条件来调整b。

b的更新有几种情况:





来自罗林开的ppt

这里的界内指

,界上就是等于0或者C了。

前面两个的公式推导可以根据



和对于



的KKT条件推出。

这样全部参数的更新公式都已经介绍完毕,附加一点,如果使用的是线性核函数,我们就可以继续使用w了,这样不用扫描整个样本库来作内积了。

w值的更新方法为:





根据前面的





公式推导出。

12 SMO中拉格朗日乘子的启发式选择方法

终于到了最后一个问题了,所谓的启发式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数



作优化(论文中称为无界样例),因为在界上(

为0或C)的样例对应的系数

一般不会更改。

这条启发式搜索方法是选择第一个拉格朗日乘子用的,比如前面的

。那么这样选择的话,是否最后会收敛。可幸的是Osuna定理告诉我们只要选择出来的两个

中有一个违背了KKT条件,那么目标函数在一步迭代后值会减小。违背KKT条件不代表

,在界上也有可能会违背。是的,因此在给定初始值

=0后,先对所有样例进行循环,循环中碰到违背KKT条件的(不管界上还是界内)都进行迭代更新。等这轮过后,如果没有收敛,第二轮就只针对

的样例进行迭代更新。

在第一个乘子选择后,第二个乘子也使用启发式方法选择,第二个乘子的迭代步长大致正比于

,选择第二个乘子能够最大化

。即当

为正时选择负的绝对值最大的

,反之,选择正值最大的



最后的收敛条件是在界内(

)的样例都能够遵循KKT条件,且其对应的

只在极小的范围内变动。

至于如何写具体的程序,请参考John C. Platt在论文中给出的伪代码。

13 总结

这份SVM的讲义重点概括了SVM的基本概念和基本推导,中规中矩却又让人醍醐灌顶。起初让我最头疼的是拉格朗日对偶和SMO,后来逐渐明白拉格朗日对偶的重要作用是将w的计算提前并消除w,使得优化函数变为拉格朗日乘子的单一参数优化问题。而SMO里面迭代公式的推导也着实让我花费了不少时间。

对比这么复杂的推导过程,SVM的思想确实那么简单。它不再像logistic回归一样企图去拟合样本点(中间加了一层sigmoid函数变换),而是就在样本中去找分隔线,为了评判哪条分界线更好,引入了几何间隔最大化的目标。

之后所有的推导都是去解决目标函数的最优化上了。在解决最优化的过程中,发现了w可以由特征向量内积来表示,进而发现了核函数,仅需要调整核函数就可以将特征进行低维到高维的变换,在低维上进行计算,实质结果表现在高维上。由于并不是所有的样本都可分,为了保证SVM的通用性,进行了软间隔的处理,导致的结果就是将优化问题变得更加复杂,然而惊奇的是松弛变量没有出现在最后的目标函数中。最后的优化求解问题,也被拉格朗日对偶和SMO算法化解,使SVM趋向于完美。

另外,其他很多议题如SVM背后的学习理论、参数选择问题、二值分类到多值分类等等还没有涉及到,以后有时间再学吧。其实朴素贝叶斯在分类二值分类问题时,如果使用对数比,那么也算作线性分类器。



目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用

来表示算子,得到拉格朗日公式为



L是等式约束的个数。

然后分别对w和

求偏导,使得偏导数等于0,然后解出w和

。至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其他不等式的约束,dw的变化方向与f(w)的梯度垂直时才能获得极值,而且在极值处,f(w)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(参考《最优化与KKT条件》)

然后我们探讨有不等式约束的极值问题求法,问题如下:



我们定义一般化的拉格朗日公式





这里的



都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的

已经不是0了,我们可以将

调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:



这里的P代表primal。假设

或者

,那么我们总是可以调整



来使得

有最大值为正无穷。而只有g和h满足约束时,

为f(w)。这个函数的精妙之处在于

,而且求极大值。

因此我们可以写作



这样我们原来要求的min f(w)可以转换成求

了。



我们使用

来表示

。如果直接求解,首先面对的是两个参数,而

也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?

我们先考虑另外一个问题



D的意思是对偶,

将问题转化为先求拉格朗日关于w的最小值,将



看作是固定值。之后在

求最大值的话:





这个问题是原问题的对偶问题,相对于原问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) <= MinMax(X)。然而在这里两者相等。用

来表示对偶问题如下:



下面解释在什么条件下两者会等价。假设f和g都是凸函数,h是仿射的(affine,

)。并且存在w使得对于所有的i,

。在这种假设下,一定存在

使得

是原问题的解,

是对偶问题的解。还有

另外,

满足库恩-塔克条件(Karush-Kuhn-Tucker,
KKT condition),该条件如下:



所以如果

满足了库恩-塔克条件,那么他们就是原问题和对偶问题的解。让我们再次审视公式(5),这个条件称作是KKT
dual complementarity条件。这个条件隐含了如果

,那么

。也就是说,

时,w处于可行域的边界上,这时才是起作用的约束。而其他位于可行域内部(

的)点都是不起作用的约束,其

。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。

这部分内容思路比较凌乱,还需要先研究下《非线性规划》中的约束极值问题,再回头看看。KKT的总体思想是将极值会在可行域边界上取得,也就是不等式为0或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为0的约束,要么是等式约束。对于在可行域边界内的点,对最优解不起作用,因此前面的系数为0。

7 最优间隔分类器(optimal margin classifier)


重新回到SVM的优化问题:



我们将约束条件改写为:



从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数

,也就是说这些约束式

,对于其他的不在线上的点(

),极值不会在他们所在的范围内取得,因此前面的系数

.注意每一个约束式实际就是一个训练样本。

看下面的图:



实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,那么他们前面的系数

,其他点都是

。这三个点称作支持向量。构造拉格朗日函数如下:



注意到这里只有

没有

是因为原问题中没有等式约束,只有不等式约束。

下面我们按照对偶问题的求解步骤来一步步进行,



首先求解

的最小值,对于固定的



的最小值只与w和b有关。对w和b分别求偏导数。





并得到



将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数)

代入后,化简过程如下:





  最后得到



由于最后一项是0,因此简化为



这里我们将向量内积

表示为



此时的拉格朗日函数只包含了变量

。然而我们求出了

才能得到w和b。

接着是极大化的过程







前面提到过对偶问题和原问题满足的几个条件,首先由于目标函数和线性约束都是凸函数,而且这里不存在等式约束h。存在w使得对于所有的i,

。因此,一定存在

使得

是原问题的解,

是对偶问题的解。在这里,求

就是求

了。

如果求出了

,根据

即可求出w(也是

,原问题的解)。然后



即可求出b。即离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。

关于上面的对偶问题如何求解,将留给下一篇中的SMO算法来阐明。

这里考虑另外一个问题,由于前面求解中得到



我们通篇考虑问题的出发点是

,根据求解得到的

,我们代入前式得到



也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了

,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的

,其他情况

。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。这种写法为下面要提到的核函数(kernel)做了很好的铺垫。这是上篇,先写这么多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: