OMSCS-ML课程笔记06-SVM and Kernel Methods

这个系列是Gatech OMSCS 机器学习课程(CS 7641: Machine Learning)的同步课程笔记。课程内容涉及监督学习、无监督学习和强化学习三个部分,本节主要介绍监督学习中支持向量机的相关内容。

Linear SVM

支持向量机(support vector machine, SVM)是经典的二分类模型。从几何的角度上讲,二分类问题可以理解为在空间中寻找一个超平面(hyperplane)来将数据划分为两部分。在数据集是线性可分的情况下存在无数个可行的超平面将数据集正确划分,如下图中的H2H3所示。显然我们希望从这些超平面中选择一个「最好」的使得模型对于噪声和扰动都具有足够的鲁棒性。

Maximal Margin Hyperplanes

SVM通过最大化两个类别数据到超平面的距离来求解这个的超平面。假设超平面方程为wTx+b=0,对于正负样本有:

wTxi+b+1,yi=+1wTxi+b1,yi=1

换句话说

yi(wTxi+b)1

当且仅当xi到超平面的距离最小时取等号,此时的xi称为支持向量(support vector)

对于任意点xi,它到超平面的距离为:

γi=yi(wTxi+b)w

将支持向量带入上式可以得到正负两类样本到超平面的最小距离为:

γ=2w1w2

进而得到SVM对应的约束优化问题:

maxw,b  1w2s.t.  yi(wTxi+b)1

由于最大化1w2与最小化12w2是等价的,因此更常见的SVM优化形式是:

minw,b  12w2s.t.  yi(wTxi+b)1

求解得到分类超平面后对应的决策函数为:

f(x)=sign(wTx+b)

Dual Problem

对于SVM的约束优化问题我们可以使用拉格朗日乘子法(Lagrange multiplier)进行求解。为此构造拉格朗日函数如下:

L(w,b,α)=12w2i=1Nαiyi(wTxi+b)+i=1Nαi

其中α=(α1,α2,...,αN)为拉格朗日乘子向量。此时约束优化问题等价于拉格朗日函数的极小极大问题,称为原始问题(primal problem)

minw.bmaxα, αi0L(w,b,α)

我们定义拉格朗日函数的极大极小问题为极小极大问题的对偶问题(dual problem)

maxα, αi0minw.bL(w,b,α)

对于线性可分情况SVM的原始问题与对偶问题有相同的解,因此我们可以通过求解对偶问题来获得原始问题的最优解。分别对wb求偏导并令导数为0可以得到:

Lw=wi=1Nαiyixi=0w=i=1Nαiyixi Lb=i=1Nαiyi=0i=1Nαiyi=0

将上述条件带入L得到:

minw.bL(w,b,α)=12i=1Nj=1NαiαjyiyjxiTxji=1Nαiyi(xiTj=1Nαjyjxj+b)+i=1Nαi=12i=1Nj=1NαiαjyiyjxiTxj+i=1Nαi

然后对L求极大得到关于α的约束优化问题:

maxα  12i=1Nj=1NαiαjyiyjxiTxj+i=1Nαis.t.  i=1Nαiyi=0αi0

更常见的形式是带约束的最小化问题:

minα  12i=1Nj=1NαiαjyiyjxiTxji=1Nαis.t.  i=1Nαiyi=0αi0

此时的优化问题为关于α的凸二次规划问题,可以使用二次规划的相关算法求解。最后将拉格朗日乘子向量α带入约束条件即可计算出超平面参数:

w=i=1Nαiyixi b=yji=1NαiyixiTxj

其中xjyj需要满足对应的乘子αj>0

利用原始问题的KKT条件还可以进一步证明拉格朗日乘子向量α仅在支持向量处存在非0值,因此α实际上是非常稀疏的。换句话说我们只需要记录几个支持向量的乘子就可以计算分类超平面,而对应的决策函数则可以表示为支持向量内积的形式:

f(x)=sign(i=1NαiyixiTx+b)

Kernel Methods

对于线性不可分的情况使用SVM是不能得到分类超平面的。对于这样的问题常用的处理方式是构造一个到高维的映射ϕ(x)然后在更高维的空间中使用SVM。以下图为例,在二维平面上不存在分类超平面但在三维空间中则可以很容易地对样本进行划分。

同样地,利用映射ϕ(x)可以得到高维空间中的约束优化问题:

minα  12i=1Nj=1Nαiαjyiyjϕ(xi)Tϕ(xj)i=1Nαis.t.  i=1Nαiyi=0αi0

不难发现此时非线性的SVM与线性SVM没有任何本质区别,只需要将低维向量x映射到高维空间中即可。实际上我们并不需要去显式地定义映射ϕ(x),只需要内积项ϕ(xi),ϕ(xj)=ϕ(xi)Tϕ(xj)就可以求解SVM。我们定义核函数为低维向量在高维空间中的内积:

K(x,y)=ϕ(x),ϕ(y)

利用核函数我们可以避免计算高维向量ϕ(x)从而加速模型的训练,此时优化问题可以改写成核函数的形式:

minα  12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαis.t.  i=1Nαiyi=0αi0

求解拉格朗日乘子向量α后带入约束条件得到偏置项:

b=yji=1NαiyiK(xi,xj)

对应的决策函数为:

f(x)=sign(i=1NαiyiK(x,xi)+b)

显然并不是任意的二元函数都可以作为核函数来使用,实际上核函数是正定核函数(positive definite kernel function),它们满足对称正定的条件即对应的Gramm矩阵K为半正定矩阵。

在实践中一般很少从零开始构造核函数,往往是利用一些已有的核函数并在此基础上调整相关的参数。常用的核函数包括多项式核(polynomial kernel)、高斯核(Gaussian kernel)等。

Back to Boosting

本节最后我们从margin的角度来分析boosting方法。boosting的决策函数可以表示为:

f(x)=sign(iαihi(x)iαi)

注意到上式和Ensemble Learning一节中给出的形式有所区别,这里我们多了分母项iαi。由于任意αi>0,使用上式定义的决策函数并不会改变函数的结果,同时加入分母项之后可以保证决策函数的输出在[-1, +1]区间内。

显然对于比较容易的样本f(x)的输出应该靠近[-1, +1]区间的两侧;而比较困难的样本f(x)的输出则会靠近原点。因此可以认为正负样本到原点的距离描述了模型对分类结果的把握,距离越大表示模型对结果越有信心。在boosting算法的训练过程中基分类器会更关注那些位于原点附近的困难样本,这使得加权后这些样本的类别会不断向区间端点移动。从这个角度看boosing相当于最大化正负样本之间的间隔,与SVM算法有异曲同工之妙。

Reference