1、拉格朗日对偶(Lagrange duality)

     先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题:

    

支持向量机对偶例题_最优化

    

    目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用支持向量机对偶例题_支持向量机对偶例题_02来表示算子,得到拉格朗日公式为

    

支持向量机对偶例题_最小值_03

    

    L是等式约束的个数。

    然后分别对w和支持向量机对偶例题_支持向量机对偶例题_04求偏导,使得偏导数等于0,然后解出w和支持向量机对偶例题_支持向量机对偶例题_05。至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其他不等式的约束,dw的变化方向与f(w)的梯度垂直时才能获得极值,而且在极值处,f(w)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(参考《最优化与KKT条件》)

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

    

支持向量机对偶例题_极值_06

    

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

支持向量机对偶例题_最小值_07

    这里的支持向量机对偶例题_极值_08支持向量机对偶例题_支持向量机对偶例题_09都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的

支持向量机对偶例题_支持向量机对偶例题_10

已经不是0了,我们可以将支持向量机对偶例题_极值_11调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:

    

支持向量机对偶例题_最小值_12

    这里的P代表primal。假设

支持向量机对偶例题_最优化_13

或者

支持向量机对偶例题_最小值_14

,那么我们总是可以调整支持向量机对偶例题_支持向量机对偶例题_15支持向量机对偶例题_最小值_16来使得

支持向量机对偶例题_支持向量机对偶例题_17

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

支持向量机对偶例题_支持向量机对偶例题_18

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

支持向量机对偶例题_最优化_19

,而且求极大值。

    因此我们可以写作

    

支持向量机对偶例题_极值_20

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

支持向量机对偶例题_支持向量机对偶例题_21

了。    

    

支持向量机对偶例题_最优化_22

    我们使用支持向量机对偶例题_最优化_23来表示

支持向量机对偶例题_最小值_24

。如果直接求解,首先面对的是两个参数,而支持向量机对偶例题_最小值_25也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?

    我们先考虑另外一个问题

支持向量机对偶例题_极值_26

    D的意思是对偶,

支持向量机对偶例题_最小值_27

将问题转化为先求拉格朗日关于w的最小值,将支持向量机对偶例题_极值_28支持向量机对偶例题_最小值_29看作是固定值。之后在

支持向量机对偶例题_最优化_30

求最大值的话:

支持向量机对偶例题_最优化_31

    这个问题是原问题的对偶问题,相对于原问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) <= MinMax(X)。然而在这里两者相等。用支持向量机对偶例题_极值_32来表示对偶问题如下:

    

支持向量机对偶例题_最小值_33

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

支持向量机对偶例题_最小值_34

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

支持向量机对偶例题_极值_35

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

支持向量机对偶例题_支持向量机对偶例题_36

使得支持向量机对偶例题_支持向量机对偶例题_37是原问题的解,

支持向量机对偶例题_最优化_38

是对偶问题的解。还有

支持向量机对偶例题_最优化_39

另外,

支持向量机对偶例题_极值_40

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

    

支持向量机对偶例题_极值_41

    所以如果

支持向量机对偶例题_最优化_42

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

支持向量机对偶例题_极值_43

,那么

支持向量机对偶例题_最小值_44

。也就是说,

支持向量机对偶例题_极值_45

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

支持向量机对偶例题_支持向量机对偶例题_46

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

支持向量机对偶例题_极值_47

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

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

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

    重新回到SVM的优化问题:

    

支持向量机对偶例题_极值_48

    我们将约束条件改写为:

    

支持向量机对偶例题_最小值_49

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

支持向量机对偶例题_支持向量机对偶例题_50

,也就是说这些约束式

支持向量机对偶例题_支持向量机对偶例题_51

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

支持向量机对偶例题_支持向量机对偶例题_52

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

支持向量机对偶例题_极值_53

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

    看下面的图:

    

支持向量机对偶例题_极值_54

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

支持向量机对偶例题_最优化_55

,其他点都是

支持向量机对偶例题_极值_56

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

    

支持向量机对偶例题_最优化_57

    注意到这里只有支持向量机对偶例题_最小值_58没有支持向量机对偶例题_最小值_59是因为原问题中没有等式约束,只有不等式约束。

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

    

支持向量机对偶例题_支持向量机对偶例题_60

    首先求解

支持向量机对偶例题_最优化_61

的最小值,对于固定的支持向量机对偶例题_极值_62

支持向量机对偶例题_最小值_63

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

    

支持向量机对偶例题_最小值_64

    

支持向量机对偶例题_支持向量机对偶例题_65

    并得到

    

支持向量机对偶例题_极值_66

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

    代入后,化简过程如下:


支持向量机对偶例题_最优化_67

     

支持向量机对偶例题_支持向量机对偶例题_68

  最后得到


支持向量机对偶例题_最小值_69

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

    

支持向量机对偶例题_支持向量机对偶例题_70

    这里我们将向量内积

支持向量机对偶例题_最小值_71

表示为

支持向量机对偶例题_极值_72

    此时的拉格朗日函数只包含了变量支持向量机对偶例题_最小值_73。然而我们求出了支持向量机对偶例题_支持向量机对偶例题_74才能得到w和b。

    接着是极大化的过程

支持向量机对偶例题_极值_75

支持向量机对偶例题_最小值_76

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

支持向量机对偶例题_最小值_77

。因此,一定存在

支持向量机对偶例题_最小值_78

使得支持向量机对偶例题_支持向量机对偶例题_79是原问题的解,支持向量机对偶例题_最小值_80是对偶问题的解。在这里,求支持向量机对偶例题_最小值_81就是求支持向量机对偶例题_极值_82了。

    如果求出了支持向量机对偶例题_最小值_83,根据

支持向量机对偶例题_最小值_84

即可求出w(也是支持向量机对偶例题_最小值_85,原问题的解)。然后

    

支持向量机对偶例题_最优化_86

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

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

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

    

支持向量机对偶例题_最优化_87

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

支持向量机对偶例题_最小值_88

,根据求解得到的支持向量机对偶例题_支持向量机对偶例题_89,我们代入前式得到

    

支持向量机对偶例题_极值_90

    也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了支持向量机对偶例题_最小值_91,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的

支持向量机对偶例题_极值_92

,其他情况

支持向量机对偶例题_极值_93

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