连载|详细推算SVM

支持向量机(SVM)

基础的SVM

了解SVM之前,先让我们来思考一个问题,有下图所示的两类样本点,我们需要找到一条直线(一个平面)来把这两类样本点区分开,在图中可以看到有很多条直线都满足条件,但是哪条直线的分类效果更好呢?

连载|详细推算SVM

直观上看,图中加粗的那条直线分类效果更好,该分类方法对于新样本的泛化能力也是最强的,下面让我们来看一下具体应该如何确定这条直线。

假定给一个特征空间上的训练数据集:D={(x1,y1),(x2,y2)......(xn,yn)}D=\{(x_1,y_1),(x_2,y_2)......(x_n,y_n)\}

其中:xiX=Rnx_i\in X=R^nyiY={+1,1}y_i \in Y=\{+1,-1\}i=1,2,3,...,ni=1,2,3,...,n(X、Y表示输入输出空间)。

此时当yi=+1y_i=+1xix_i是正例,此时当yi=1y_i=-1xix_i是负例,特征空间中的(xi,yi)(x_i,y_i)就是样本点。

对于线性可分的问题我们可以得到一条直线:wTx+b=0w^Tx+b=0,该直线将特征空间划分为了两个部分,一部分是正类,一部分是负类,SVM中我们可以称这条直线为分离超平面。

此时设有一个通过间隔最大化得到的分离超平面:

wTx+b=0w^Tx+b=0

注:其中w=(w1;w2;...;wd)w=(w_1;w_2;...;w_d)为法向量,决定了超平面的方向;b为偏置项,决定了超平面与原点之间的距离,很显然我们的划分超平面是可以被法向量和偏置决定的。

得到了分离超平面我们又要如何去进行分类呢?此时我们对分离超平面添加一个决策函数,得到如下的形式:

f(x)=sign(wTx+b)f(x)=sign(w^Tx+b)

此时该函数我们就可以称之为线性可分支持向量机。sign函数的图像表示如下:

连载|详细推算SVM

这就是我们简单的线性SVM的思想,那么我们又如何通过间隔最大化来确定分离超平面呢?让我们再来看一下下面的间隔问题。

间隔问题

函数间隔

连载|详细推算SVM

上图中是一个简单的圆与三角的分类问题,我们来讨论一下圆这个类,图中有框出的红、绿、蓝三种颜色的圆,他们都落在圆类的一侧,但是红球距离超平面的距离较远,如果我们把红圆预测为圆类,就比较确信我们的预测是正确的;同理,相对于蓝色的圆,我们就不是很确信;而对于绿色的圆,我们可以认为确信度在二者之间。

通常情况下,我们可以把一个点距离分类超平面的远近表示为预测的确信程度,在分类超平面wTx+b=0w^Tx+b=0确定的情况下我们可以用wTx+b|w^Tx+b|来相对的表示点x距离超平面的远近(确信度),而上文中提到了yiY={+1,1}y_i \in Y=\{+1,-1\},此时我们可以对比wTx+bw^Tx+b和y的符号是否相同来表示分类是否是正确的(准确性),所以我们结合二者就可以用y(wTx+b)y(w^Tx+b)来表示分类的确信度和准确性,这就叫做函数间隔。

我们可以用如下的形式来表示函数间隔:

γ^=y(wTx+b)\widehat{\gamma }=y(w^Tx+b)

几何间隔

了解了函数间隔,我们还会遇到一个问题,对于分类超平面wTx+b=0w^Tx+b=0当我们成比例的改变它的系数w和b的时候,由于等式的性质我们发现这个分类超平面本身并没有发生变化,但是对于它的函数间隔γ^=y(wTx+b)\widehat{\gamma }=y(w^Tx+b)会随着改变比例的变化而变化,这样当然会对我们的计算造成很大的麻烦,也可能会对分类产生一定的影响,所以我们需要通过某些方法使得间隔是确定的值,来看一下下面的规范化方法:

我们对超平面中的法向量w进行一定的约束得到:

γi=wTxi+bw\gamma _i=\frac{w^Tx_i+b}{\left \| w \right \|}

不难发现当w=1||w||=1时,γi=wTxi+b\gamma_i=w^Tx_i+b也就是我们之前提到的函数间隔(只不过此时还没有确定正负类),所以对于γi\gamma_i放大任意倍的w||w||,间隔γi\gamma_i不再发生变化,此时我们便可以称这个不会变化的间隔为几何间隔。

对于几何间隔上面是用函数间隔来推出的过程,如果不是很理解,可以把它认定是点到直线的距离(二维空间内)或者点到平面的距离(三维空间内)。

再对几何间隔添加上我们之前提到的表示分类正确性的y一项得到几何间隔的具体表达式:

γi=yi(wTxi+bw)\gamma _i=y_i(\frac{w^Tx_i+b}{\left \| w \right \|})

其中w||w||称为w的L2范数。

综上我们可以得到函数间隔和几何间隔之间的关系:γ=γ^w\gamma =\frac{\widehat{\gamma }}{\left \| w \right \|}

间隔最大化

在一种我们提到过间隔最大化得到的分类超平面经过sign函数后可以得到线性可分支持向量机,下面我们来说一下间隔最大化具体是怎么回事。

第二节中我们提到了确信度的问题,为了保证更高的确信度我们是不是应该尽量让每一个点到分类超平面的几何间隔都达到最大化,这样做的目的是对于新的数据点,我们不仅能将它分到正负类别中,同时离分类超平面很近的点我们也可以将它很好的分类,并且能够保证有很大的确信度,我们就可以说这个超平面对新数据有很好的预测能力。

我们将间隔最大化的问题转换为约束最优化问题:我们希望最大化几何间隔γ\gamma的同时又希望超平面对于每个测试样本点的几何间隔至少是γ\gamma

则有如下的形式(s.t.表示约束条件):

maxw,b:γ\underset{w,b}{max}:\gamma

s.t.:yi(wTxi+bw)γs.t.:y_i(\frac{w^Tx_i+b}{\left \| w \right \|})\geqslant \gammai=1,2,...,Ni=1,2,...,N

根据上节末尾提到的几何间隔和函数间隔之间的关系我们可以把上述问题进一步转化:

maxw,b:γ^w\underset{w,b}{max}:\frac{\widehat{\gamma}}{\left \| w \right \|}

s.t.:yi(wTxi+b)γ^s.t.:y_i(w^Tx_i+b)\geqslant \widehat{\gamma}i=1,2,...,Ni=1,2,...,N

我们要求的解释w,b的值,所以可以认为式中的γ^\hat \gamma的值对不等式的值以及最优化问题并没有影响,所以为了便于求解我们令γ^=1\widehat{\gamma }=1,并且最大化1w\frac{1}{\left \| w \right \|}的问题,同样可以等价于最小化12w2\frac{1}{2}\left \| w \right \|^2,我们可以继续转化上述的问题,得到如下的线性可分支持向量机学习的最优化问题:

minw,b:12w2\underset{w,b}{min}:\frac{1}{2}\left \| w \right \|^2

s.t.:yi(wTxi+b)10s.t.:y_i(w^Tx_i+b)-1\geqslant 0i=1,2,...,Ni=1,2,...,N

此时我们便转化成了一个凸二次规划问题:

凸优化我们可以看做是一个凸函数去找最低点的问题(例如梯度下降法的过程)。

而二次规划是指目标函数为变量的二次函数和约束条件为变量的线性函数。

为了便于求解此类问题我们可以通过求解对偶问题得到原始问题的最优解,这样既可以简单的求解又可以引入后续对非线性分类问题的讨论(后面我们将会讨论对偶问题的求解)。

支持向量

假设我们得到的超平面wTx+b=0w^Tx+b=0能够将训练样本正确分类,即对于(xi,yi)D(x_i,y_i)\in D,若yi=+1y_i=+1,则有wTx+b>0w^Tx+b>0;若yi=1y_i=-1,则有wTx+b<0w^Tx+b<0

现在令我们的几何间隔为γ=2w\gamma=\frac{2}{||w||},则对于正负类的范围有如下的表示形式:

{wTx+b+1,yi=+1;wTx+b1,yi=1.\left\{\begin{matrix} w^Tx+b\geqslant +1,y_i=+1; \\ w^Tx+b\leqslant -1,y_i=-1. \end{matrix}\right.

如下图所示,距离超平面最近的几个点使得上述的等号成立,这几个点我们就称之为支持向量。

连载|详细推算SVM

对偶问题求解

上面我们提到了间隔最大化的求解问题,本节让我们继续来讨论间隔最大化章节中转化为对偶问题的求解。

首先需要明确一下对偶问题的由来,对偶问题是一种应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。

原始问题:

minw,b:12w2\underset{w,b}{min}:\frac{1}{2}\left \| w \right \|^2

s.t.:yi(wTxi+b)10s.t.:y_i(w^Tx_i+b)-1\geqslant 0i=1,2,...,Ni=1,2,...,N

首先构建拉格朗日函数:

L(w,b,α)=12w2i=1Nαiyi(wTx+b)+i=1NαiL(w,b,\alpha )=\frac{1}{2}\left \| w \right \|^2-\sum_{i=1}^{N}\alpha _iy_i(w^Tx+b)+\sum_{i=1}^{N}\alpha _i

αi0\alpha_i\geqslant 0

i=1,2,...,Ni=1,2,...,N

α=(α1,α2,...,αN)T\alpha=(\alpha_1,\alpha_2,...,\alpha_N)^T,该项表示拉格朗日乘子向量。

根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:

maxαminw,bL(w,b,α)\underset{\alpha}{max}\underset{w,b}{min}L(w,b,\alpha)

为了求解我们先求L(w,b,α)L(w,b,\alpha )中w,b的极小再求α\alpha的极大。

求极小

我们对w,b求偏导并置零,再带入L(w,b,α)L(w,b,\alpha )即可求得minw,bL(w,b,α)\underset{w,b}{min}L(w,b,\alpha ),具体过程不做演示,这里给出结果:

对w求偏导可以得到:w=i=1Nαiyixiw=\sum_{i=1}^{N}\alpha_iy_ix_i

对b求偏导可以得到:i=1Nαiyi=0\sum_{i=1}^{N}\alpha_iy_i=0

带入我们构建的拉格朗日函数得到:

minw,bL(w,b,α)=12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi\underset{w,b}{min}L(w,b,\alpha )=-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _i\alpha_jy_iy_j(x_i\cdot x_j)+\sum_{i=1}^{N}\alpha_i

求极大

已知极小值的情况下,其导数即为极大值,此时可以认为:

maxα=minα\underset{\alpha}{max}=-\underset{\alpha}{min}

由此我们便得到了原始问题的对偶问题:

minα=12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi\underset{\alpha}{min}=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^{N}\alpha_i

s.t.:i=1Nαiyi=0s.t.:\sum_{i=1}^{N}\alpha_iy_i=0αi0\alpha_i\geqslant 0,i=1,2,…,N

到这里我们就得到了原始最优化问题和对偶最优化问题(上文中红标处)

根据slater条件,因为原始问题的目标函数和约束条件都是凸函数,并且该约束条件是严格可行的,所以我们认为存在w^,b^,α^\widehat{w},\widehat{b},\widehat{\alpha},使得w^,b^\widehat{w},\widehat{b}是原始问题的解,α^\hat \alpha是对偶问题的解。

slater的条件规则如下:

连载|详细推算SVM

现在我们来求一下α^\hat \alpha的最优解:

设有α^=(α1^,α2^,...,αN^)T\widehat{\alpha}=(\widehat{\alpha_1},\widehat{\alpha_2},...,\widehat{\alpha_N})^T是对偶最优化问题的解,则至少存在一个α^j\hat \alpha_j使得α^j>0\hat \alpha_j>0(若不存在则会造成α^=0,w^=0\widehat{\alpha}=0,\widehat{w}=0

则有w^\hat w的最优解:w^=i=1Nαi^yixi\widehat{w}=\sum_{i=1}^{N}\widehat{\alpha_i}y_ix_i

再根据KKT条件(拉格朗日对偶性的一个定理):

乘子非负:αi0\alpha_i\geqslant 0i=1,2,...,Ni=1,2,...,N

约束条件:yi(wxi+b)10y_i(w\cdot x_i+b)-1\geqslant 0i=1,2,...,Ni=1,2,...,N

互补条件:αi(yi(wxi+b)1)=0\alpha_i(y_i(w\cdot x_i+b)-1)=0i=1,2,...,Ni=1,2,...,N

根据互补条件,并且上文中推得αj^>0\widehat{\alpha_j}> 0,那么至少存在一个j使得yj(w^xj+b)1=0y_j(\widehat{w}\cdot x_j+b)-1=0,根据此式以及我们上面求得的w^\hat w我们即可得到最优的b^\hat b

b^=yji=1Nαi^yi(xixj)\widehat{b}=y_j-\sum_{i=1}^{N}\widehat{\alpha_i}y_i(x_i\cdot x_j)

到此我们就求得了整个问题的最优解,求得的分离超平面即为:

i=1Nαi^yi(xxi)+b^=0\sum_{i=1}^{N}\widehat{\alpha_i}y_i(x\cdot x_i)+\widehat{b}=0

分类决策函数为:

f(x)=sign(i=1Nαi^yi(xxi)+b^)f(x)=sign(\sum_{i=1}^{N}\widehat{\alpha_i}y_i(x\cdot x_i)+\widehat{b})

也就是说,分类决策函数只依赖于输入x和训练样本输入的内积,上式就是线性可分支持向量机的对偶形式。

注:对于对偶问题同样的,我们将αi>0\alpha_i> 0时的实例点称作为支持向量。

引入松弛变量的SVM

上文中我们讲述的内容全都是在样本分类很均匀的情况下,而实际问题中这种状况经常是不存在的,那么有噪声点存在的时候应该怎么办呢?

连载|详细推算SVM
如图:有少数的样本点使得我们不能够用一条直线将两个类别分开,也就意味着我们上文最大间隔中讲到的约束条件s.t.:yi(wxi+b)10s.t.:y_i(w\cdot x_i+b)-1\geqslant 0是不满足的,此时我们可以引进一个松弛变量ξ0\xi \geqslant0,使得我们的函数价格加上松弛变量后可以大于等于1,也就是:yi(wxi+b)+ξ1y_i(w\cdot x_i+b)+\xi \geqslant 1

此时的间隔最大化我们称之为软间隔最大化

此时对于每一个松弛变量,我们目标函数同时也要添加一个ξi\xi_i,则目标函数变为:

12w2+Ci=1Nξi\frac{1}{2}\left \| w \right \|^2+C\sum _{i=1}^{N}\xi_i

这里的C我们称之为乘法系数(C>0),C越小时对误分类的惩罚越小,越大时惩罚也就越大,当C取到无穷时,可以认为给了误分类项足够大的惩罚(导致ξi\xi_i变得极小),此时的最大间隔也自然又回到了硬间隔最大化上。

此时我们可以根据上两式得到原始问题,求解依然可以使用上文中的对偶问题,结果不发生变化,这里不再赘述。

损失函数

SVM中常用的损失函数是(hinge)合页损失函数。

Lhinge(z)=max(0,1z)L_{hinge}(z)=max(0,1-z)

而完整的SVM的损失函数其实就是在合页函数的后面多加了一个L2正则项:

Lsvm=i=1N(1yi(wxi+b))+λw2L_{svm}=\sum_{i=1}^{N}(1-y_i(w\cdot x_i+b))+\lambda \left \| w \right \|^2

加入L2正则项的目的:使求解稳定快速,防止过拟合。

非线性SVM

上文中我们首先提到了线性可分支持向量机,后来又引入了松弛变量说了一下线性支持向量机,下面我们再来说一下非线性支持向量机。

核技巧

对于非线性支持向量机,我们需要用核技巧将线性支持向量机推广到非线性支持向量机,不仅是SVM其他的一些类似问题也可以用该方式来解答。

所谓核技巧其实就是使得在原空间内不可分的数据映射到更高维度的空间上,然后再使用线性的方法将他们分开的一种思想,用下图来表示一下:

连载|详细推算SVM

可以看到图左的数据在二维空间内不能用一条直线将他们分开,我们将它映射到一个三维的空间内,此时就会存在一个平面(黄色的部分)将两类分离开来,对于这种思想我们就可以称之为核技巧。

核函数

说了核技巧我们就不得不说它的重要部分——核函数。

核函数的定义:

我们设X是输入空间,H是特征空间,如果存在一个X到H映射关系:ϕ(x):XH\phi (x):X\rightarrow H,使得对所有的x,zXx,z\in X,函数K(x,z)K(x,z)满足条件K(x,z)=ϕ(x)ϕ(z)K(x,z)=\phi(x)\cdot \phi(z),则称K(x,z)K(x,z)为核函数,ϕ(x)\phi(x)为映射函数,其中ϕ(x)ϕ(z)\phi(x)\cdot \phi(z)称为ϕ(x)\phi(x)ϕ(z)\phi(z)的内积。

通常,直接计算K(x,z)K(x,z)比较容易,而通过ϕ(x)\phi(x)ϕ(z)\phi(z)计算K(x,z)K(x,z)并不容易。但是在我们第五节中推得的对偶问题中,无论是目标函数还是决策函数(分离超平面)都只涉及到输入示例与实例之间的内积,所以对于对偶问题目标函数的内积我们可以用核函数来代替,此时的目标函数就变成了:

W(α)=12i=1Nj=1NαiαjyiyjK(xixj)i=1NαiW(\alpha )=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _i\alpha_jy_iy_jK(x_i\cdot x_j)-\sum_{i=1}^{N}\alpha_i

分类决策函数就变成了:

f(x)=sign(i=1Nαi^yiK(xixj)+b^)f(x)=sign(\sum_{i=1}^{N}\widehat{\alpha_i}y_iK(x_i\cdot x_j)+\widehat{b})

常用的核函数

多项式核函数:

K(x,z)=(xz+1)pK(x,z)=(x\cdot z+1)^p

高斯核函数:

K(x,z)=exp(xz22σ2)K(x,z)=exp\left(-\frac{\left \| x-z \right \|^2}{2\sigma ^2}\right)

连载|详细推算SVM