支持向量机是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。
拉格朗日对偶性
支持向量机的求解过程用到了拉格朗日对偶性。考虑原始的带约束的最优化问题,具有如下形式:
为了解决上述问题,定义广义的拉格朗日函数:
其中的$\alpha_i$和$\beta_i$称作拉格朗日乘子,然后考虑$w$的函数:
其中的下标$\mathcal{P}$代表英文中的“primal”,意为原始问题。如果$w$满足限制条件的话,可以发现$\theta_{\mathcal{P}}(w) = f(w)$,因此最初的带约束的最优化问题等价于下面的式子:
下面定义对偶优化问题:
对偶问题和原始问题仅仅交换了$\min$和$\max$的顺序。由于一个函数的最小值的最大值(max min)一定小于等于其最大值的最小值(min max),所以有:
然而在满足约束条件时,它们两者是相等的,所以可以通过求解对偶问题来求解原始问题。
原始问题和对偶问题的解$\alpha^\star, \beta^\star, w^\star$满足KKT条件,同时满足KKT条件的$\alpha^\star, \beta^\star, w^\star$也是原始问题和对偶问题的解,KKT条件如下:
线性可分支持向量机
给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为$w^\star \cdot x + b^\star = 0$,以及相应的分类决策函数$f(x) = sign(w^\star \cdot x + b^\star)$称为线性可分支持向量机。
函数间隔:函数间隔可以表示分类预测的正确性及确信度。对于给定的训练数据集$T$和超平面$(w,b)$,定义超平面$(w,b)$关于样本点$(x_i, y_i)$的函数间隔为
定义超平面$(w, b)$关于训练数据集T的函数间隔为超平面$(w, b)$关于T中所有样本点$(x_i, y_i)$的函数间隔之最小值,即
几何间隔:函数间隔的问题在于,如果同时将$w$和$b$扩大两倍,函数间隔会变成原来的两倍,但是超平面却没有改变。此时可以对超平面的法向量$w$加一些约束,如规范化,$|w| = 1$,此时间隔就是确定的,这时函数间隔就变成了几何间隔。对于给定的训练数据集$T$和超平面$(w,b)$,定义超平面$(w,b)$关于样本点$(x_i, y_i)$的几何间隔为
定义超平面$(w, b)$关于训练数据集T的几何间隔为超平面$(w, b)$关于T中所有样本点$(x_i, y_i)$的几何间隔之最小值,即
函数间隔与几何间隔的关系:
线性可分支持向量机的求解就是要求几何间隔最大,可以表示成如下的最优化问题:
考虑到几何间隔和函数间隔的关系,可以改写成如下形式:
注意到函数间隔$\hat{\gamma}$的取值并不影响最优化问题的解,所以可以取1,并且最大化$\frac{1}{|w|}$等价于最小化$\frac{1}{2}|w|^2$,所以得到如下形式的凸二次规划问题:
该凸二次规划问题的拉格朗日函数为:
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题,因此需要先求$\mathcal{L}(w,b,\alpha)$对$w$和$b$的极小,再求对$\alpha$的极大。求$w$和$b$的极小通过偏导为0来求得:
将求导结果代入其拉格朗日函数,可以得到:
然后对其求极大,转化为下面的对偶问题:
然后将对偶问题转化为凸优化问题,便于求解:
软间隔最大化
某些样本点无法满足函数间隔大于等于1的约束条件,此时可以引入松弛变量$\xi$,这样约束条件就变为$y_i(w \cdot x_i + b) \geq 1 - \xi_i$,同时对每个松弛变量$\xi_i$需要支付一定的代价,求解软间隔最大化就变成下述凸二次规划问题:
可以采取相同的方式,转化为对偶问题来求解(先列出其拉格朗日方程,使其极小化,分别对$w$、$b$、$\xi_i$求偏导,使它们的偏导为0,然后代入拉格朗日方程,再使其极大化,然后转换成凸二次规划问题,就得到了下面的形式):
合页损失函数
线性支持向量机的原始最优化问题,等价于以下最优化问题(具体证明可看《统计学习方法》):
带核函数非线性支持向量机
所谓核函数,具有如下的形式:
其中$\phi(x)$为映射函数,$\phi(x) \cdot \phi(z)$是$\phi(x)$和$\phi(z)$的内积。核技巧的想法是,在学习与预测中只定义核函数$K(x,z)$,而不显示地定义映射函数$\phi$。核函数需要满足一定的条件。
在求解支持向量机的对偶问题中,只用到了实例与实例之间的内积,因此可以将核技巧应用在支持向量机中,此时求解的对偶问题变成:
总结
本文梳理了支持向量机的数学原理,最后都是转化为一个凸二次规划问题来求解。解决凸二次规划问题有现成的优化工具,但针对于支持向量机的求解还专门有一个名叫SMO的算法,会在下篇用python实现支持向量机的博客中详解。