支持向量机 (Support Vector Machine, SVM):支持向量机在高维或无限维空间中构造超平面或超平面集合,其可以用于分类、回归或其他任务。直观来说,分类边界距离最近的训练资料点越远越好,因为这样可以缩小分类器的泛化误差。

1. 定义

更正式地来说,支持向量机在高维或无限维空间中构造超平面或超平面集合,其可以用于分类、回归或其他任务。直观来说,分类边界距离最近的训练资料点越远越好,因为这样可以缩小分类器的泛化误差。(来源:维基百科,使用 CC BY-SA 3.0 协议)

对于二维二分类问题如下:

(来源:维基百科,使用 CC BY-SA 3.0 协议)

当我们来对两种样本人工分类的时候,一定是想找到间隔最宽的一个空隙划开,因为我们感觉这样的分类效果最好。

支持向量机和人的思维一致,就是要找到一个分类超平面 wxb=0,并且希望该超平面支持向量的间隔越大越好,因为这样可以减小在测试集上的泛化误差。

支持向量是训练数据集中最靠近分类超平面的点。

2. 线性 SVM

2.1 硬间隔

2.1.1 间隔的定义

SVM 的核心就是间隔越大越好,那么我们首先要找到间隔的数学表达。

平面中点 (x0,y0) 到直线的 ax+by+c=0 距离公式:

(a.1)d=|ax0+by0+c|a2+b2

有些资料向量相乘写成 wx,有些资料写成 wTx,二者实际是一样的。因为前者是点乘(内积),后者是叉乘(外积)。

将上式推广到多维空间中一样成立。对于超平面 wTx+b=0,点 x 到其的距离为:

(a.2)d=|wTx+b|w

xx 的二范数(下标 2 可省略),其定义是:x2=i=1nxi2

我们将 ±1 作为每个样本点的类别标签,如果样本可以线性可分,那么一定存在分类超平面满足:

(a.3){wTxi+b>0,yi=1wTxi+b<0,yi=1

这个条件实际上非常弱,它相当于只规定了分类超平面能把两种样本点隔开,没有任何对间隔的限制。

为了引入间隔,我们假设支持向量到分类超平面的距离为 d,那么我们要求分类超平面:

(a.4){if yi=1,then wTxi+bwdif yi=1,then wTxi+bwd

这样表达式中终于包含了间隔。接下来,我们对上式两边除以 d

(a.5){if yi=1,then wTxi+bwd1if yi=1,then wTxi+bwd1

由于 wd 都是标量,因此除以分母相当于对该超平面进行缩放,实际上超平面是没有变化的。

就像 2x+4y=0 缩放为 x+2y=0,两个式子表示的仍然是同一条直线。

因此为了式子简单,我们直接忽略掉缩放的值:

(a.6){if yi=1,then wTxi+b1if yi=1,then wTxi+b1

对于支持向量 xi,其满足:

(a.7)|wTxi+b|=1

那么支持向量与分类超平面的距离为:

(a.8)d=|wTxi+b|w=1w

由于间隔有两侧,那么间隔的距离为:

(a.9)d=2w

2.1.2 待求解的问题

获得了间隔的表达式,支持向量机要求解的问题就可以用形式化的语言表达:

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

这里第二行公式把 yi 乘到左边去了,是为了表达式的简洁。实际上这一行表达的含义与式 (a.6) 是一模一样的。

我们习惯求最小化问题,因此将以上问题分子分母颠倒,等价转换为:

(b.2)minw,b12w2s.t.yi(wTxi+b)1

其中,加平方是为了求导时正好能把前面的 1/2 消去。

2.1.3 前置知识

可以先看下一节求解的过程,过程中遇到了对应的方法后再看这一节。

2.1.3.1 拉格朗日乘子法

对于不等式约束优化问题:

minxf(x)s.t.hi(x)=0,i=1,2,...,mgj(x)<0,j=1,2,...,n

转化为其对应的无约束的拉格朗日函数:

L(x,α,β)=f(x)+i=1mαihi(x)+j=1nβjgj(x)

要满足 KKT 条件:

(1)L(x,α,β)x=0(2)βjgj(x)=0, j=1,2,...,n(3)hi(x)=0, i=1,2,...,m(4)gj(x)0, j=1,2,...,n(5)βj0, j=1,2,...,n

其中:

  1. 拉格朗日取得可行解的必要条件
  2. 松弛互补条件
  3. 初始的约束条件
  4. 初始的约束条件
  5. 不等式约束的拉格朗日乘子需满足的条件

2.1.3.2 拉格朗日对偶

对于原问题:

p=minxmaxα,β;βi0L(x,α,β)

它的对偶问题为:

d=maxα,β;βi0minxL(x,α,β)


定义以下式子:

f(α,β)=minxL(x,α,β)d=maxα,β;βi0f(α,β)=maxα,β;βi0minxL(x,α,β)g(x)=maxα,β;βi0L(x,α,β)p=minxg(x)=minxmaxα,β;βi0L(x,α,β)

我们可以写出如下不等式:

f(α,β)=minxL(x,α,β)L(x,α,β)maxα,β;βi0L(x,α,β)=g(x)

再进一步转换到 dp 上:

d=maxα,β;βi0f(α,β)minxg(x)=p


综上,我们可以得到原问题 p 和对偶问题 d 的最优解的关系:

dp

2.1.3.3 SMO 算法

SMO (Sequential Minimal Optimization) 算法的基本步骤:

  • 选取一对需要更新的变量 αiαj
  • 固定 αiαj 以外的参数,求解出更新后的 αiαj

一直循环以上两个步骤,直到收敛。

对于选取的 αiαj,可以使用随机选取的方法,但是该方法收敛速度较慢。更优的方法是选取最不满足 KKT 条件的参数,这样更新时收敛速度会更快。

2.1.4 求解支持向量机

2.1.4.1 问题转换

由拉格朗日乘子法,我们列出拉格朗日函数:

L(w,b,α)=12w2+i=1mαi(1yi(wTxi+b))

其中 αi0,为拉格朗日乘子;m 为样本点的数量。

我们知道,1wTxi+b0,因此式子后半段的求和项一定 0,那么 L(w,b,α) 的最大值为 12w2 即原问题:

maxαL(w,b,α)=12w2

我们要求的是原问题的最小值,因此问题转换为:

minw,bmaxαL(w,b,α)

该问题不好求解,因此使用拉格朗日对偶法转换为对偶问题,我们求出对偶问题的最大值,便是原问题的下界:

maxαminw,bL(w,b,α)

2.1.4.2 求解问题

第一步,求解内层问题:

(e.1)minw,bL(w,b,α)=minw,b12w2+i=1mαi(1yi(wTxi+b))

首先对 wb 求偏导,并算出偏导为 0 时的解:

(e.2){L(w,b,α)w=wi=1mαiyixi=0L(w,b,α)b=i=1mαiyi=0{w=i=1mαiyixii=1mαiyi=0

将上式的解带入式 (18),即可得到内层问题的解如下,我们令该结果为 L(α)

(e.3)L(α)=minw,bL(w,b,α)=i=1mαi12i=1mj=1mαiαjyiyjxiTxj

我们发现还有个条件 i=1mαiyi=0 还没用上,它将会在后续作为约束条件使用。

另外,我们令要计算的分割超平面为 g(x)=wTx+b,将 w 的值代入后得到:

(e.4)g(x)=i=1mαiyixiTx+b


第二步,求解外层问题:

(e.5)maxαL(α)=maxαi=1mαi12i=1mj=1mαiαjyiyjxiTxjs.t.i=1mαiyi=0,αi0

我们习惯求最小值,因此给上述问题乘上一个 1 转换成等价问题:

(e.6)minαL(α)=minα12i=1mj=1mαiαjyiyjxiTxji=1mαis.t.i=1mαiyi=0,αi0

该问题还需要满足 KKT 条件:

(e.7){αi0yi(wTxi+b)10αi(yi(wTxi+b)1)=0

对于该问题,我们共有 mαi 等待优化,这个量实在是太大了,不可能同时进行优化求解。使用 SMO 算法可以解决这个问题。


第三步,使用 SMO 求解外层问题:

不妨设我们选择要优化的变量为 α1α2,问题可以写为:

(e.8)minα1,α2L(α1,α2)=minα1,α212α12x1Tx1+12α22x2Tx2+α1α2y1y2x1Tx2α1α2+α1y1i=3myiαixiTx1+α2y2i=3myiαixiTx2s.t.α1y1+α2y2=i=3mαiyi,αi0

注意上式的前两项没有 yi 了,因为 yi=±1,所以 yi2=1 可以直接省略。另外由于变量相当于只剩 α1α2,因此后面的双层连加变成了两个单层连加。下面该技巧也会用到多次,也会反向用到。

上式的约束条件可以进行变形:

(e.9)α1y1+α2y2=i=3mαiyiα1=(i=3mαiyiα2y2)y1

其中除了 α1α2 之外的其他变量全部都是已知的,因此 α1α2 之间存在确定的关系。如果知道了二者其一,另一个也可以直接计算得到。因此,上面两个变量的优化问题实际上是一个变量的优化问题,完全可以将另一个变量代入替换。

为了式子简洁,我们令:

(e.10)f=i=3mαiyi=α1y1+α2y2vi=j=3myjαjxjTxi=g(xi)j=12yjαjxjTxib

通过式 (e.9) 将式 (e.8) 中的所有 α1 替换为 α2,另外使用式 (e.10) 的第二个等号前半段化简式 (e.8) 中的表示方法(第二个等号后半段将在后续操作中用到),可以得到:

(e.11)minα2L(α2)=minα212(fα2y2)2x1Tx1+12α22x2Tx2+(fα2y2)α2y2x1Tx2(fα2y2)y1α2+(fα2y2)v1+α2y2v2s.t.αi0

此时,整个式子已经只剩 α2 这一个参数了,我们终于可以对它求偏导并置为 0 得到结果了:

(e.12)L(α2)α2=α2x1Tx1fy2x1Tx1+α2x2Tx2fy2x1Tx22α2x1Tx2+y1y21y2v1+y2v2=0α2(x1Tx1+x2Tx22x1Tx2)=y2(fx1Tx1fx1Tx2y1+y2+v1v2)

此时这个式子已经能用来计算结果了,但是还不够简单,编程实现比较麻烦,我们可以进一步进行化简。

首先注意到式 (28) 的后半段,fvi 其实可以转化成关于 α1,α2 的式子,为了区分新算出来的 α,我们将fvi 里的记作 α1old,α2old.同时,我们令损失值 Ei 为预测值与实际值的差:

(e.13)Ei=g(xi)yi=i=jmαjyjxjTxi+byi

(e.10) 的后半段与 (e.13) 代入 (e.12),即可得到以下式子:

(e.14)α2newunc(x1Tx1+x2Tx22x1Tx2)=y2(fx1Tx1fx1Tx2y1+y2+v1v2)=y2((α1oldy1+α2oldy2)x1Tx1(α1oldy1+α2oldy2)x1Tx2y1+y2+g(x1)y1α1oldx1Tx1y2α2oldx2Tx1bg(x2)+y1α1oldx1Tx2+y2α2oldx2Tx2+b)=y2(α2oldy2x1Tx1+α2oldy2x2Tx22α2oldy2x1Tx2+E1E2)=α2oldx1Tx1+α2oldyx2Tx22α2oldyx1Tx2+y2(E1E2)=α2old(x1Tx1+x2Tx22x1Tx2)+y2(E1E2)

η=x1Tx1+x2Tx22x1Tx2,将上式左右同除以 η 得到:

(e.15)α2newunc=α2old+y2(E1E2)η

如此,我们将式 (e.12) 化简得到了非常优美的新式子,编程实现时更加简单。


上面求出来的答案并不是最终答案,我们还需要注意到约束条件 αi0,我们计算得到的 α1α2 都要满足该条件。

y1y2 的符号进行分类讨论:

  • y1=y2

由式 (e.10),我们不关心符号,因此将符号并入 t 中得到:

y1α1+y2α2=fα1+α2=t

由于 α10,α20 可知:

0α2newt=α1old+α2old

由此,我们可以将 α2newunc 剪辑:

α2new={α1old+α2old,α1old+α2old<α2newuncα2newunc,0α2newuncα1old+α2old0,α2newunc<0

  • y1y2

由式 (e.10),我们不关心符号,因此将符号并入 t 中得到:

y1α1+y2α2=fα2α1=t

由于 α10,α20 可知:

0α2newt=α2oldα1old

由此,我们可以将 α2newunc 剪辑:

α2new={α1old+α2old,α2oldα1old<α2newuncα2newunc,0α2newuncα2oldα1old0,α2newunc<0

2.2 软间隔

2.2.1 软间隔的定义

上述硬间隔 SVM 考虑的情况比较理想,样本点不存在噪音。如果样本点存在噪音,将会对硬间隔 SVM 造成干扰,导致泛化能力下降。或者样本点线性不可分,硬间隔 SVM 就无法处理。

在硬间隔 SVM 里,我们要求两类样本点一定分别分布于分割超平面两侧,即样本点一定被分割超平面正确分割。在软间隔 SVM 里,我们降低这个要求,允许样本点被错误分类。

如果样本点能随便被错误分类,那么就没办法找最优解了,因此样本点被错误分类时要有一定的代价,而正确分类时没有代价。我们将其与 wTx+b=±1 距离作为代价(松弛变量)ξ0

ξi=l(yi(wTxi+b)1)

其中,l() 可以有多种选择,下面的后三个是连续的函数:

l0/1(z)={1z<00otherwiselhinge(z)=max{0,1z}lexp=ezllog=log(1+ez)

它们的函数图像如下:

2.2.2 待求解的问题

将硬间隔 SVM 的问题加上松弛变量后,便是软间隔 SVM 待求解的问题:

minw,b12w2+Ci=1mξis.t.yi(wTxi+b)1ξi

其中 C 的值是松弛量的权重,C 越大即代表优化该问题时,更多考虑松弛量,即让错误分类的样本越少,反之则是允许错误分类的样本越多。

2.2.3 求解支持向量机

软间隔与硬间隔 SVM 的求解过程基本相同,因此下面写的比较简略。

由拉格朗日乘子法,我们列出拉格朗日函数:

L(w,b,α,ξ,μ)=12w2+Ci=1mξi+i=1mαi(1yi(wTxi+b))i=1mμiξi

由于 ξi0,因此最后一项是减而不是加。

其中 αi0,μi0,为两种拉格朗日乘子;m 为样本点的数量。

原问题为:

minw,b,ξmaxα,μL(w,b,α,ξ,μ)

转化为对偶问题:

maxα,μminw,b,ξL(w,b,α,ξ,μ)

对内层问题,求偏导得到解:

{L(w,b,α,ξ,μ)w=wi=1mαiyixi=0L(w,b,α,ξ,μ)b=i=1mαiyi=0L(w,b,α,ξ,μ)ξi=Cαiμi=0{w=i=1mαiyixii=1mαiyi=0C=αi+μi

αi0,μi0,C=αi+μi 可得:0αiC. 回代后,得到再对外层问题求解:

maxαL(α)=maxαi=1mαi12i=1mj=1mαiαjyiyjxiTxjs.t.i=1mαiyi=0,0αiCαi0

该问题还需要满足 KKT 条件:

{αi0μi0ξi0μiξi0yi(wTxi+b)1+ξi0αi(yi(wTxi+b)1+ξi)=0

接下来的 SMO 过程一模一样,最后得到:

α2newunc=α2old+y2(E1E2)η

然后要对其进行剪辑:

α2new={H,H<α2newuncα2newunc,Lα2newuncHL,α2newunc<L

具体的范围如下,对 y1,y2 分类讨论:

  • y1=y2

{L=max{0,α2oldα1oldC}H=min{C,α2oldα1old}

  • y1y2

{L=max{0,α2oldα1old}H=min{C,C+α2oldα1old}

3. 非线性 SVM

φ 是一个从低维的输入空间 X 到高维的希尔伯特空间 H 的映射。如果存在函数 κ(xi,xj) 对于任意 xi,xjX 都有:

κ(xi,xj)=φ(xi)φ(xj)

就称 κ(xi,xj) 为核函数。

通过核函数,我们可以将样本点从低维空间 X 映射到高维 H,在低维空间中线性不可分的样本点,可能在高维空间中线性可分,由此便可以解决线性不可分的数据。

对于核函数 κ(xi,xj),我们没有必要知道其对应的 φ(x) 是多少,因为它的表达可能会非常复杂。我们只需要知道 κ(xi,xj) 的表达式便可以使用它了。常用的核函数有:

名称表达式
线性核κ(xi,xj)=xiTxj
多项式核κ(xi,xj)=(xiTxj)d,d1
高斯核κ(xi,xj)=exp(xixj22σ2),σ>0
拉普拉斯核κ(xi,xj)=exp(xixj2σ2),σ>0
Sigmoid 核κ(xi,xj)=tanh(βxiTxj+θ),β>0,θ<0

要使用核函数,公式推导过程和前文一模一样,只需要把公式内的 xiTxj 替换成 κ(xi,xj) 就行了。