二、SVM的求解过程
1、对问题的简单求解
其实上一章中的结果,已经是一个可求解的问题了,因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题,只要通过现成的QP包就能解决这个二次规划问题。
2、求解方式转换
由于这个结构具有特殊性,所以可以通过拉格朗日的对偶性( Lagrange Duality),将原问题转到对偶问题进行优化(两者等价)。
这样是有两个优点:一是对偶问题更容易求解,二是也可以引入核函数,解决非线性分类问题。
那么怎么才能变到对偶问题呢?
首先就要讲一下拉格朗日问题,我们大学高数都学过拉格朗日乘子法(Lagrange Multiplier) 求解。具体的原理我就不说了,请参考 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件 。
主要举例说一下:
我们利用拉格朗日乘子将约束条件限制到一个拉格朗日函数里
然后令
这个
就是我们要求解的原问题(primal problem),只要通过最小化
就可以解决 。为什么最小化
就可以了呢?我们以一个更一般的例子来解释一下这个求解原理。————————————————-原理 1(start)————————————————–
这个例子更为广泛,只不过多了一个等式限制
假设存在这样一个最优化的情况
我们通过拉格朗日乘子变为这种形式
我们想要最小化的是min f(w),怎么用在拉格朗日公式中表达出这个呢?首先我们知道
和
是拉格朗日乘子,我们首先想到是不是要求解min L()啊,但是却恰恰相反,我们要最大化L。因为在g小于0的情况下如果我们无限的增大
,min L()其实是根本无解的,因为可以无限的小。为了排除这种情况,我们定义了如下函数:
尝试一下我们会发现,这个表达式在违反最优化的条件时结果都是无穷,当
和
的时候只要调节一下
和
就可以得到无穷的值,但是只有满足我们上面的g和h满足约束的时候才能够得到
等于f(w)。但是切记有个条件,就是
。
总结来说就是:
所以当我们想要求min f(w)的时候,就只要求最小的
就可以了。
即:
——————————————-原理 1(end)———————————————————-
我们上面讲的是为什么可以通过最小化
代替min f(w),但是我们也发现了,解决
的最小化也不是一个简单的问题,因为其中还是有一个不等式约束
,那么怎么解决这个问题呢???
为了防止忘记,我们再回顾一下我们的问题:
而
求解min
其实也就是求解
的最小值因为在满足约束条件的情况下
。
我们还是继续通过上面原理1中的例子继续推倒,来解释上面求解最小化的问题。
————————————————-原理 2(start)————————————————–
下面主要讲的是如何求解
我们定义
叫做
(原始问题),解决这个问题的办法就是将之变为对偶问题,什么是对偶问题呢?
就是所谓的对偶问题我们称之为
,我们可以看出对偶问题就是原始问题的min和max进行了调换,但是注意下标哦,两个问题的变量也跟着变化了。
原问题
和对偶问题
有什么关联呢?
因为一般更换顺序的结果是Max Min(X) <= MinMax(X)
为什么要转换呢?
交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用来表示。而且有在满足某些条件的情况下,这两者相等,这个时候就可以通过求解对偶问题来间接地求解原始问题。换言之,之所以从minmax的原始问题,转化为maxmin的对偶问题,一者因为是的近似解,二者,转化为对偶问题后,更容易求解。
什么时候可以转换呢?
这个转换条件只有在满足KKT条件时才能够成立,前面我引用了一个连接介绍了一下大概的KKT原理,我这里先简单的介绍一下后面会专门集中精力讲一下这个。
首先要明白两点:
· 什么是凸优化:
为一个凸集,f:
为一个凸函数。凸优化就是找出一个点
,使得每一个
满足
· KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件。
而KKT条件就是指上面最优化数学模型的标准形式中的最小点 x* 必须满足下面的条件(由于是借图范围标号不太一样):
即对上面的问题对应于:
这部分后面专门讲吧。。。。有点复杂,牵扯到了非线性规划的知识。
————————————————-原理 2(end)————————————————–
我们回到SVM里来,将问题由原始问题转为对偶问题求解:
(1)首先固定
,此时
的最小值只与w和b有关,按照正常的求解最小值方式,对w和b分别求导并令导数为0:
(对w求导为二范数求导)
将结果带入到L中,得到:
推倒这个是个非常复杂的过程,具体过程如下:
由此可见,现在剩下的唯一一个变量就是
了
(2)求极大值的过程,经过上面的推倒我们已经得出:
注意约束条件。至于怎么求
要用到SMO算法,我会在后面结合Python一起讲
(3)求w 和 b,其中由
得到w,在根据
得到b,这是由于考虑到超平面的支持向量点到超平面的距离(也就是那个最小距离)相同,回到原始问题的约束条件上可以看出当y为-1时(wx+b)取最大值得到最小距离,y为+1时wx+b取最小值时为最小距离,也就得到上面等式。正规的说法是 : 离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。
这里来说说这样做的好处:
将w带入
(这其实就是整个问题的出发点,超平面)得到
现在有了
我们就根本不用求出w就可以了,直接就用新数据和原始数据中的所有样本做内积就可以了。为什么这样比计算w再用新数据和w、b线性运算更快呢?
因为由KKT条件中
(其中
就是约束条件)
得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数
是大于零的,其余点的
都等于零。这些函数间隔最小的点就叫做支持向量参考下面图中虚线上的点
正因为非支持向量的系数
都等于零,而且支持向量是少数的,所以运算比较快,而且还可以用核函数来解决问题。
3、总结一下:
我们这篇主要讲了在如何解决带有不等式限制的极值最优化问题,那就是通过将原始问题转为对偶问题进行处理。但是这中间却遇到了一个问题就是原始问题和对偶问题的转化问题,这也就引出了KKT条件。在满足了KKT条件之后可以解决对偶问题了。而且KKT条件还引出了关于支持向量的概念,非支持向量的系数
都为0。求解w、b的偏导数,再利用SMO求
。反推得到b,就可以利用核函数解决了。(1)到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,下面我们将引入核函数,进而推广到非线性分类问题。
(2)还有KKT的推倒过程没有说明
(3)用来求
的SMO还没有介绍。