SVM算法(深入理解拉格朗日乘子法与KKT条件的证明)
SVM应该是一个应用到数学知识很多的AI算法,关于KKT的证明花了很长时间,里面涉及到大量线性代数的知识。
对偶关系、方向导数与梯度的关系、梯度方向与构造的可取区域的关系、拉格朗日乘子引入的真实含义等等。
(一)间隔与支持向量
SVM(support vector machine)支持向量机,最重要的就是在训练样本集中找到支持向量。
如图所示为最简单的二维平面上的分类,要想将圆圈一类和长方形一类分开需要找到一条直线,很显然这种直线不止一条,但是仿佛又存在一条直线能够让两类点到这条直线的距离取到一个最大值,那么我们是不是可以通过数学方法来求出这个值和这条分割线呢,答案是可以的。H1和H2这两条直线上的点就构成了支持向量(只需要这些点就可以求出分类直线),所以在最后的分类中,其余的点可有可无,当然也就不support啦!
(二)最大化间隔
推广到n维度,我们需要找到上图让margin=2/||w||最大的划分超平面。
也就是求解带约束的极值问题,将分割超平面设为为了方便求导,转换成下面等价问题:
(三)拉格朗日乘子法与对偶问题
很显然上述问题是一个凸二次规划问题,可以先对其使用拉格朗日乘子法得到其对偶问题,对每条约束添加拉格朗日乘子,由于这里的不是等式约束,所以每条约束 不同于等式的取值范围,后续会证明,如下式为该问题的拉格朗日函数:
分别对和b求偏导数,得到:
(四)KKT约束条件的详解
如图为带约束的极值情况,数学证明不详诉,直观上的集合意义很明确,等高线与约束线相切的时候取得极值。
如图为不等式约束
阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方可能有两种情况:
- 还是在 h(x)h(x) 和 等值线相切的地方
- f(x)f(x) 的极值点本身就在可行域里面。
可行域是在 g(x)≤0 一侧,而 g(x)的梯度指向大于 0 的一侧。
我们求解的目标函数最小值正好与g(x)梯度方向相反
此时反观构造的拉格朗日函数,为什么构造的是:
而不是还有满足的就很显然了。
最后整理一下得到三个约束条件:
这个就是 KKT 条件。它的含义是这个优化问题的极值点一定满足这组方程组。
(五)拉格朗日乘子的含义
最后补充一点,为什么拉格朗日乘子可以那么引入呢?
含义就是在相切的那一点,梯度的方向是一条线上的,由此必然存在:
下一节将介绍SMO算法,以及在SVM导入核函数的精彩之处。