DennyQi's Log

03 支持向量机

支持向量机(Support Vector Machine, SVM)

在二分类问题的逻辑回归中,我们训练出向量β\beta,使得我们能够用11+eXiβ\dfrac{1}{1+e^{-X_i^\top \beta}}来作为样本XiX_i被分类为yi=1y_i=1的概率。我们知道sigmoid函数是单调函数,因此实际上我们是在关注XiβX_i^\top \beta这一线性项的大小。如果XiβX_i^\top\beta远大于0或远小于0,我们对分类结果是很有信心的,因为这代表着极大或极小的概率。从几何上,我们知道逻辑回归就是在寻找一个平面把样本点分开,因此有信心的分类结果在几何上对应着这些样本点离平面较远。

现在我们关注离平面较近的那些样本点,我们对这些点的分类不那么有信心。因为对于靠近平面的点,扰动对结果的影响就比较大了。对平面做出一点调整,有可能这些样本的分类结果就会改变。对于同样的分类结果,平面的选取是可以有很多种的。如果我们要求选出一个最好的平面,那么一个很自然的想法就是让离平面最近的点距离平面尽量远。下面我们把这一想法转化为数学,定义“距离”以及对应的优化问题。

为了分析方便,我们把二分类的分类结果记为{1,1}\{1,-1\},系数β\beta分别记为向量ww和截距bb。这样,模型的预测结果就可以写为y^i=sgn(wxi+b)\hat y_i=\text{sgn}(w^\top x_i+b)。定义样本(xi,yi)(x_i,y_i)在模型参数选取为(w,b)(w,b)时的margin为γi=yi(wxi+b)\gamma_i=y_i(w^\top x_i+b)。可以看出,假如我们预设正样本被分到wx+b>0w^\top x+b>0的一侧,那么当模型分类正确时margin始终为正,分类错误时始终为负。一般,我们要求ww是单位向量,因此我们把margin的表达式修改为γi=yi(wxi+b)w\gamma_i=\dfrac{y_i(w^\top x_i+b)}{\|w\|}。我们定义γi\gamma_i在几何上恰好刻画样本xix_i到平面(w,b)(w,b)的垂直距离:我们验证xiγiyiwwx_i-\gamma_i\cdot y_i \dfrac{w}{\|w\|}一定落在平面上,这就说明xix_i到平面的投影垂线长度恰好为γi|\gamma_i|。只需证w(Xiγiyiww)+b=0w^\top (X_i-\gamma_iy_i\dfrac{w}{\|w\|})+b=0,代入γi\gamma_i化简得wxiyiwyi(wxi+b)w+b=wxi(wxi+b)+b=0w^\top x_i-y_i\|w\|\cdot \dfrac{y_i(w^\top x_i+b)}{\|w\|}+b=w^\top x_i-(w^\top x_i+b)+b=0

因此我们要解决的优化问题就是寻找这样的(w,b)(w,b),使得margin最小的样本点的margin尽量大。如果这个最小的最大值为正,说明我们不仅能正确分类所有样本,而且还得到了能使得最没有信心的样本尽可能有信心的平面。这个问题可以写作带约束的最优化问题:maxτ,w,bτ\max\limits_{\tau,w,b}\tau,subject to yi(wxi+b)wτ\dfrac{y_i(w^\top x_i+b)}{\|w\|}\geq \tau。这等价于maxτ,w,bτw\max\limits_{\tau,w,b}\dfrac \tau {\|w\|},subject to yi(wxi+b)τy_i(w^\top x_i+b)\geq \tau。假设这个问题的最优解为(τ0,w0,b0)(\tau_0,w_0,b_0),那么对于任意的α\alpha一定有(ατ0,αw0,αb0)(\alpha\tau_0,\alpha w_0,\alpha b_0)也是最优解。那么我们总可以取这样的α\alpha使得ατ0=1\alpha \tau_0=1,这说明原问题等价于maxw,b1w\max\limits_{w,b}\dfrac 1 {\|w\|},subject to yi(wxi+b)1y_i(w^\top x_i+b)\geq 1。其中maxw,b1w\max\limits_{w,b}\dfrac 1 {\|w\|}等价于minw,bw\min\limits_{w,b} \|w\|,为了更方便可以写minw,b12w2\min\limits_{w,b}\dfrac 1 2 {\|w\|}^2。这样最终我们得到了一个经过修改的等价的最优化问题:minw,b12w2\min\limits_{w,b}\dfrac 1 2 {\|w\|}^2,subject to yi(wxi+b)1y_i(w^\top x_i+b)\geq 1。其中使得约束取紧的样本点称为支持向量(support vectors),它们是距离平面最近的点,正是它们“支持”着平面周围的空间。

这是一个凸优化问题,它的对偶问题与它的解相同。Lagrange函数L(w,b,α)=12w2+iαi[yi(wxi+b)+1]L(w,b,\alpha)=\dfrac{1}{2}\|w\|^2+\sum\limits_{i}\alpha_i\left[ -y_i(w^\top x_i+b)+1\right],求解对偶问题就是在αi>0\alpha_i>0的约束下求minw,bL(w,b,α)\min\limits_{w,b}L(w,b,\alpha)的最大值。令w,bL(w,b,α)=0\nabla_{w,b} L(w,b,\alpha)=0,那么\partL\partw=0\dfrac{\part L}{\part w}=0可以推出wiαixiyi=0w-\sum\limits_{i}\alpha_i x_iy_i=0\partL\partb=0\dfrac{\part L}{\part b}=0可以推出iαiyi=0\sum\limits_{i}\alpha_i y_i=0。代入消去ww可得minw,bL(w,b,α)=12(iαixiyi)2iαi[yi(jαjyjxj)xi+byi1]\min\limits_{w,b}L(w,b,\alpha)=\dfrac{1}{2}\left( \sum\limits_{i}\alpha_i x_iy_i\right)^2-\sum\limits_{i}\alpha_i\left[y_i\left(\sum\limits_{j}\alpha_j y_j x_j\right)^\top x_i+by_i-1 \right] =12ijαiαjyiyjxixjijαiαjyiyjxjxibiαiyi+iαi=\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}\alpha_i\alpha_jy_iy_jx_i^\top x_j-\sum\limits_{i}\sum\limits_{j}\alpha_i\alpha_jy_iy_jx^\top_jx_i-b\sum\limits_{i}\alpha_iy_i+\sum\limits_{i}\alpha _i =iαi12ijαiαjyiyjxixj=\sum\limits_{i}\alpha_i-\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}\alpha_i\alpha_jy_iy_jx_i^\top x_j。所以对偶问题写作maxαiαi12ijyiyjαiαjxixj\max\limits_{\alpha}\sum\limits_{i}\alpha_i-\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}y_iy_j\alpha_i\alpha_jx_i^\top x_j,subject to αi0,iαiyi=0\alpha_i\geq 0,\sum\limits_{i}\alpha_i y_i=0。(这个优化问题的求解要用到SMO(sequential minimal optimization)算法,此处从略。)

我们求解出了对偶问题对应的α\alpha,现在我们可以直接求出原问题中取到最优值的(w,b)(w,b)。对于ww,代入w=iαiyixiw=\sum\limits_{i}\alpha_i y_ix_i即可。对于bb,我们知道取到最优解时正样本的支持向量与负样本的支持向量到平面的距离相同,因此maxi:yi=1{wxi+b}+mini:yi=1{wxi+b}=0\max\limits_{i:y_i=-1}\{w^\top x_i+b\}+\min\limits_{i:y_i=1}\{w^\top x_i+b\}=0,由此解得b=maxi:yi=1{wxi}+mini:yi=1{wxi}2b=-\dfrac{\max\limits_{i:y_i=-1}\{w^\top x_i\}+\min\limits_{i:y_i=1}\{w^\top x_i\}}{2}。这样我们就最终求得了所要的w,bw,b了。

更有趣的是,由于我们的平面(w,b)(w,b)是通过对偶问题求解出α\alpha得到的,我们在用模型做预测时效率会有很大的提升。对于一个新的样本点(Xi,Yi)(X_i,Y_i),做预测的核心就是计算wXi+bw^\top X_i+b。现在我们知道w=iαiyixiw=\sum\limits_{i}\alpha_iy_i x_i,代入可得wXi+b=iαiyixiXi+bw^\top X_i+b=\sum\limits_{i}\alpha_i y_i x_i^\top X_i+b。而根据KKT的互补松弛条件,αi\alpha_i对于非支持向量都是等于0的。换言之,为了计算iαiyixiXi+b\sum\limits_{i}\alpha_i y_i x_i^\top X_i+b,我们只需考虑所有支持向量xix_i就好了!而支持向量的数量总是非常少的,这使得我们只需做一点点计算就可以完成预测。综上,这个算法被称为支持向量机(Support Vector Machine, SVM)。

处理outliers

在以上SVM的算法中,一两个完全偏离主体的样本(称为outliers,“局外人”)可以对分类面的选取产生很大的影响,我们希望能消除这种影响。为此,我们在优化问题中允许若干样本点在margin上存在误差,但误差的总和不能太大。具体地,我们要做正则化,把优化的问题修改为:minξ,w,b12w2+Ciξi\min\limits_{\xi,w,b}\dfrac 1 2 {\|w\|}^2+C\sum\limits_{i}\xi_i,subject to yi(wxi+b)1ξiy_i(w^\top x_i+b)\geq 1-\xi_iξi0\xi_i\geq 0。这样我们用ξi\xi_i保证每个样本点都有相应的容错空间,但总的误差因为要使得CiξiC\sum\limits_{i}\xi_i这一项尽量小所以不会太大,其中常数CC可以控制这种约束的力度。(我们可以等价地把带有ξi\xi_i的“硬约束”转化为软约束,以上优化问题就等价于minw,b{12w2+Cimax{0,1yi(wxi+b)}}\min\limits_{w,b}\{\dfrac{1}{2}\|w\|^2+C\sum\limits_{i}\max\{0,1-y_i(w^\top x_i+b)\}\}。其中,max{0,1yi(wxi+b)}\max\{0,1-y_i(w^\top x_i+b)\}这一项通常称为Hinge Loss。但下面的分析我们依旧采取硬约束的问题形式。)

同样的,我们写出Lagrange函数L(w,b,ξ,α,β)=12w2+Ciξiiαi[yi(xw+b)1+ξi]iβiξiL(w,b,\xi,\alpha,\beta)=\dfrac{1}{2}\|w\|^2+C\sum\limits_{i}\xi_i-\sum\limits_{i}\alpha_i[y_i(x^\top w+b)-1+\xi_i]-\sum\limits_{i}\beta_i\xi_i,代入使得L(w,b,ξ,α,β)L(w,b,\xi,\alpha,\beta)w,b,ξw,b,\xi下取到最小值的偏导数为0的条件,写出对偶问题为maxαiαi12ijyiyjαiαjxixj\max\limits_{\alpha} \sum\limits_{i}\alpha_i-\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}y_iy_j\alpha_i\alpha_jx_i^\top x_j,subject to 0αiC,iαiyi=00\leq \alpha_i\leq C,\sum\limits_{i}\alpha_i y_i=0。我们发现,和没有正则化的版本相比,唯一的不同之处在于我们对αi\alpha_i有了上界的约束C\leq C

Kernel methods

在线性模型中,我们的预测是基于样本(x,y)(x,y)的,其中xx是一个nn维向量(x1,,xn)(x_1,\cdots,x_n)。我们的模型就是给出关于这nn个实数的一个函数。假如我们对这nn个决定模型的因素拓展为更多个,比如我们基于xix_i给出一个可以包含所有三次以内的项的向量(这里简单起见设n=2n=2(x1,x2,x12,x1x2,x22,x13,x12x2,x1x22,x23)(x_1,x_2,x_1^2,x_1x_2,x_2^2,x_1^3,x_1^2x_2,x_1x_2^2,x_2^3)。这个对应关系可以看作R3\R^3R9\R^9的一个映射xϕ(x)x\to \phi(x),称为feature mapping。如果在模型中把xx全部替换为ϕ(x)\phi(x),那么我们期待模型将有能力对线性不可分的问题也做出较好的预测。ϕ(x)\phi(x)的选取可以是任意的,不同的ϕ\phi的选取会使得模型产生不同的效果。我们的目的是希望经过ϕ(x)\phi(x)的映射以后,可以用原先的线性模型解决非线性问题。

SVM中,核心就是计算iαiyixixj\sum\limits_{i}\alpha_i y_i x_i^\top x_j这一项。那么,在把xix_i用feature mapping映射后我们的目标就是计算iαiyiϕ(xi)ϕ(xj)\sum\limits_{i}\alpha_i y_i \phi(x_i)^\top \phi(x_j)。我们会发现,不仅在SVM中,在使用feature mapping之后常常会遇到要计算ϕ(xi)ϕ(xj)\phi(x_i)^\top \phi(x_j)这样的内积的情况。于是,我们定义feature mapping ϕ\phi下的kernel是X×XR\mathcal{X}\times \mathcal{X}\to \R的映射:K(x,y):=ϕ(x)ϕ(y)K(x,y):=\phi(x)^\top \phi(y)。这样,iαiyiϕ(xi)ϕ(xj)\sum\limits_{i}\alpha_i y_i \phi(x_i)^\top \phi(x_j)就写作iαiyiK(xi,xj)\sum\limits_{i}\alpha _iy_iK(x_i,x_j)

在实际中,计算ϕ(x)\phi(x)的开销往往是巨大的,而计算K(x,y)K(x,y)却可能比ϕ(x)\phi(x)ϕ(y)\phi(y)更便捷,原因在于我们最终只取出了内积而并不需要完全了解ϕ\phi的构造。而我们发现,在SVM中我们只需用到kernel而从不会单独使用某个ϕ(x)\phi(x)。这使得我们可以从定义kernel出发,检验这个kernel确实能被写成某个feature mapping的内积形式。例如,假如K(x,y)=(xy)2K(x,y)=(x^\top y)^2,那么由于(xy)2=(ixiyi)2=(x^\top y)^2=\left(\sum\limits_{i}x_iy_i\right)^2= (ixiyi)(jxjyj)=ij(xixj)(yiyj)\left(\sum\limits_{i}x_iy_i\right)\left(\sum\limits_{j}x_jy_j\right)=\sum\limits_{i}\sum\limits_{j}(x_ix_j)(y_iy_j),所以令ϕ(x)=(x1x1,,x1xn,x2x1,,x2xn,,,xnx1,,xnxn)\phi(x)=(x_1x_1,\cdots,x_1x_n,x_2x_1,\cdots,x_2x_n,\cdots,\cdots,x_nx_1,\cdots,x_nx_n),就有K(x,y)=ϕ(x)ϕ(y)K(x,y)=\phi(x)^\top \phi(y)。可见,尽管对于某个xx计算ϕ(x)\phi(x)O(n2)O(n^2)的,但计算K(x,y)K(x,y)却是O(n)O(n)的,因为我们可以先计算出xyx^\top y再对实数做平方。

更一般的,我们要问如何判断K(x,y)K(x,y)是一个well-defined的kernel呢(即它能被写成某个ϕ\phi的内积形式呢)?当x,yx,y只能取有限个向量时,我们可以定义kernel矩阵K:Rn×RnRK:\R^n\times \R^n\to \R。此时,Mercer定理给出了判断kernel合法性的充分必要条件:矩阵KK是对称且半正定的。我们验证必要性,充分性从略。如果存在ϕ\phi使得K(xi,xj)=ϕ(xi)ϕ(xj)K(x_i,x_j)=\phi(x_i)^\top \phi(x_j),那么显然K(xi,xj)=K(xj,xi)K(x_i,x_j)=K(x_j,x_i);其次,zRn,zKz=ijKijzizj\forall z\in \R^n,z^\top Kz=\sum\limits_{i}\sum\limits_{j}K_{ij}z_iz_j =ijziϕ(xi)ϕ(xj)zj=\sum\limits_{i}\sum\limits _{j}z_i\phi(x_i)^\top \phi(x_j)z_j =ijkzi(ϕ(xi)(k)ϕ(xj)(k))zj=\sum\limits_{i}\sum\limits_{j}\sum\limits_{k}z_i\left(\phi(x_i)^{(k)}\phi(x_j)^{(k)}\right)z_j =k(ijziϕ(xi)(k)zjϕ(xj)(k))=\sum\limits_{k}\left(\sum\limits_{i}\sum\limits_{j}z_i\phi(x_i)^{(k)}\cdot z_j\phi(x_j)^{(k)}\right) =k(iziϕ(xi)(k))20=\sum\limits_{k}\left(\sum\limits_{i}z_i\phi(x_i)^{(k)}\right)^2\geq 0

SVM中常用的kernel有:RBF kernel(Radial Basis Function,径向基函数,也称为为Gaussion kernel):K(xi,xj)=exixj22σ2K(x_i,x_j)=e^{-\frac{\|x_i-x_j\|^2}{2\sigma^2}};Simple polynomial kernel:K(xi,xj)=(xixj)dK(x_i,x_j)=(x_i^\top x_j)^d;Cosine similarity kernel:K(xi,xj)=xixjxixjK(x_i,x_j)=\dfrac{x_i^\top x_j}{\|x_i\|\|x_j\|};Sigmoid kernel:K(xi,xj)=tanh(αxixj+c)K(x_i,x_j)=\tanh(\alpha x_i^\top x_j+c),其中tanh(x)=1e2a1+e2a\tanh(x)=\dfrac{1-e^{-2a}}{1+e^{-2a}}