Skip to content

第四章 支持向量机

支持向量机

支持向量机 Support Vector Machine。

首先,我们再重新思考一下如何二分类?对于高维空间中的样本点,要将它们分开来,一个几何视角就是:找到一个超平面,将它们分开。注意,超平面自然是一个线性模型,但是我们之前研究线性模型更多的是从统计观点来看的,现在我们就从几何视角入手。

我们不在用 {0,1} 表示类别,改用 {1,+1} 来表示类别。用 h(x)=wx+b 表示预测值。由于超平面对应 wx+b=0,那么点在上半平面就是 wx+b>0,而如果此时真实值 y 也在上半平面,那么 y=+1,对应的就是 y(wx+b)>0。因此分类的 01 损失函数为:

  • 分对了:1[h(x)y]=0,即 y(wx+b)>0
  • 分错了:1[h(x)y]=1,即 y(wx+b)<0

标签值和样本之于超平面所处的位置是否一致:标签为正表示样本在超平面上半部分:

标签

问题:怎样去选择最好的分类器/超平面?之前在统计的意义下已经解决了这个问题。现在我们从几何视角下回顾:

分类器

显然 4 号超平面是最好的,因为它离所有样本最远。计算点到超平面的距离!找一个最大间隔 margin 的超平面,它对于噪声数据的鲁棒性最强。那么如何确定带有最大间隔的超平面呢?首先要找到一个正例的上夹板和负例的下夹板,使得上夹板和下夹板之间的间隔达到最大,将其称之为 margin,居中的超平面就是我们要找的超平面。(最小间隔,最大间隔,平均间隔?)

间隔:距离两个类中最近的点之间的距离称为间隔:也被称为 最小间隔

间隔

需求:

  • 间隔尽量大
  • 所有的点都分对
maxw,bmargin(w,b)s.t. yi(wxi+b)1,1in

这里的 1 是一个 裕度。如果我们说 yi(wxi+b)0,那么上下夹板就重合了。其中,裕度也可以看作一种抗噪声能力(统计意义下的置信度就对应几何下的间隔 margin,#TODO 但是我现在觉得裕度没啥用):

裕度

点到平面的距离公式

定理:设平面外的一点 x0,求它到以 w 为法向量,以 b 为截距的超平面之间的距离:

图片

设超平面上有一点 x,则它一定满足 wx+b=0,同时它到 x0 的向量为 x0x,那么所求的就是它在法向量 w 上的投影:

|Projw(x0x)|=|w(x0x)|w=|wx0wx|w=|wx0+b|w

Project 就是投影。我们再以二维向量来说明这个间隔:

首先,满足 yi(wxi+b)1 一定存在吗?是一定的,因为超平面也就是 wxi+b=0,那么我们在构造的时候不妨这么思考,该超平面一定可以转化为 w0+w1x1+x2=0,以 x2 为纵轴的话,那么截距就是 w0。而我们知道原超平面是 w1x1+w2x2+b=0,以正例为例的话,所求的上夹板就是 w1x1+w2x2+b=1,截距就是 (1b)/w2,斜率为 w1/w2,想要找一个这样的直线自然是轻而易举。因为对于某两个分属于正负例的点而言,它们之间的间隔可以小的近乎为 0(也就是穿过二者的直线,这样上下夹板重合),也可以得到一条这样要求的直线。

但是问题就在于:找到了上夹板,那么下夹板就一定存在吗?不一定,举一个极端的例子来看:假设正例全部分布在 x2=2x1+1 上,负例全部分布在 x2=2x1 上。那么永远无法找到合适的夹板。

于是我们这里就又有了一个前提:这样的夹板是可以找到的。那么样本点中离分类面最近的点最近的所在只能是在上下夹板上,即 wx+b=±1,也就是说:虽然不能保证上下夹板上一定都有样本点,但是这是可以被允许的最近距离。因此总间隔为:

γ=1w2+|1|w2=2w2

这里求的间隔不是到点的间隔,或者穿过点的直线的间隔,而就是到裕度为 1 的上下夹板之间的间隔。当然我们最后所求的最大值一定能够满足至少一个夹板上有数据点:

maxw,b2w2s.t. yi(wxi+b)1,1in

在我们实现了这个约束条件的时候,就说明我们创造了两个夹板,并不需要夹板上有没有数据点,我们所求的最大值也是夹板间的间隔最大值。例如只有两个点 (0,2)(2,0),对应的“间隔”最大值显然是 22,超平面显然是 y=x 最佳。

wx+b=1wx+b=1 就是两个夹板。但这并不代表着夹板之间的截距是 2,而是 2/w2,通过调整 w2 的值可以使得任何这样的夹板都是可以找到的,例如假设正例全部分布在 x2=x1+1 上,负例全部分布在 x2=x1 上。也可以找到。

任意给两个点都能找到恰好满足 wx+b=1wx+b=1 的上下夹板。数据集中距离最近的那两个点一定会在上下夹板上。因为夹板就是三个未知数两个方程,说明夹板有无穷多组满足的解,在其中找出使得所求间隔最大的解 —— 其实就是穿过这两个点的平行线族。

{w1x1+w2x2+b=1w1x1+w2x2+b=1

这也被称为硬间隔支持向量机 High-margin SVM:

minw,b12w22s.t. yi(wxi+b)1,1in
  • 1/2 为了方便计算
  • w2 不是凸函数,但是 w22 是凸函数

这是一个 线性约束的二次优化问题。前面的都是线性可分的数据 —— 很强的假设。

线性不可分情况下的分类

线性不可分或者过拟合的情况:

线性不可分

不能过分要求线性可分:允许一部分点在错误的那一边。但是在错误那一边点的数量不能多。因此:

minw,b12w22s.t. yi(wxi+b)1ξi,ξ0,i=1nξn,1in

我们称 ξi 为松弛变量 Slack Variables。

松弛变量

收益就是间隔可以更大了,是一种权衡犯错点数量和间隔大小的方法:将约束的和式放到目标函数上(软间隔支持向量机的目标函数):

minw,b,ξ12w22+Ci=1nξis.t. yi(wxi+b)1ξi,ξi0,1in

对任何的 n 都存在对应的 C(不等式约束下的拉格朗日乘数法)。ξi 可以理解为错误。对于错误的 L1 正则化。

支持向量机无法做多分类任务:几何直观模型的天然局限,还会存在 Ambiguity 死角。

多分类问题

对于 m 个类,我们引入 m 个超平面,One-vs-Rest:对于每个超平面,将一类作为正例,其余都是负例。对于测试用例,我们根据所有的超平面进行投票:但是对于死角的情况(所有的超平面都给出了负例),SVM 是无法解决的。不同的超平面得到的 score 是无法比较的,超参数 C 不同导致分类错误率不同,放在一起比较是没有意义的。trade-off!

支持向量机的重要性:

  • 学科发展
  • 引入的最大间隔思想
  • 引入的核函数方法

默认的软件包将超参数 C 置为 1,人们一般按照 2 的指数进行网格搜索。机器学习中调参一般就是等间隔网格或者指数网格。

联合优化

m 个超平面放在一起优化:

min{wj},{bj},ξ12j=1Mwj22+Ci=1nξis.t. jyi,wyixi+byiwjxi+bj+1ξi,ξi0,i[n]

超平面下本类的 score:wyixi+byi,其他类的 score:wjxi+bj,同时还要大一个软间隔:1ξi,即便如此,这个模型是无法输出概率,后面还需要一个 Softmax 函数 —— 那为啥不直接用 Softmax Regression?人们平时采用的贝叶斯准则就是基于概率的 —— 这是很朴素的。

约束优化问题

凸优化

Convex Optimization:SVM 是一个线性约束的二次优化问题。高中数学中,一般都是固定一组变量就是求另外一组的最小值。

minxf(x)s.t. xX
  • X 是一个凸集,f(x) 是一个凸函数
  • 凸集 S 的定义:x,xSλ[0,1],λx+(1λ)xS:两点连线在集合内
  • 凸函数 f(x) 的定义:λ[0,1],x,xdom(f):f(λx+(1λ)x)λf(x)+(1λ)f(x):割线在弧的上方

如果:

  • X=Rd,那么就是一个不带约束的优化问题,微积分求导即可
  • XRd,且是一个凸集合,那么这就是带约束的优化问题 Constrained Problem

等式约束

可以将约束写为如下形式:

minxRdf(x)s.t. g(x)=0

首先,如果是无约束优化问题,那么最小值对应的就应该是 f(x)=0 的点。而此时我们要求所有的点都需要满足 g(x)=0:这个时候假设约束函数 g(x)=0 为红色的线,那么我们画出在某一点的切线 xg(x)导数是垂直于切线的(因为导数是因变量关于自变量的变化率,当我们沿着切线走的时候,由于函数值恒等于 0,因此它的变化率也为 0,因此导数就应该和我们走的方向正交,导数就是沿着导数的方向,因变量会随着自变量而变化)

其次,我们考虑最优的点 x,首先它需要满足 g(x)=0,考虑 xf(x),如果它不是垂直于切线的,那么我们沿着切线的方向走(就相当于在 g(x)=0 上走),f(x) 的值就会发生变化!因此最优点 xf(x) 的导数也是垂直于切线的。

等式约束

上面一个条件是对于所有点成立的,下面一个条件只对于最优点成立。那么既然二者是平行关系,那么存在一个 μ 使得:

f+μg=0,μ0

其实就是关于 f+μg 求导,记拉格朗日函数为:

L(x,μ)=f(x)+μg(x)

拉格朗日函数有两个变量,分别求导数:

xL=0f+μg=0μL=0g(x)=0

对两个变量的导数都为 0 才是驻点。拉格朗日函数的驻点就是所求的最优点。

不等式约束

Inequality Constraints

minxRdf(x)s.t. g(x)0

如果最优解在区域内部,那么约束失效,求解关于 f(x) 的导数即可。它是拉格朗日函数中 μ=0 的情况。另外一种情况最优解在边界上,这与等式约束相同,但是这里要求 μ>0,要求导函数反向,同时要求 f(x) 的方向要指向区域内部(导数的方向就是函数值增加最快的方向,因此如果指向了外部,那么内部必然存在一个使得函数值更小的点,这是不合适的,而指向内部的话,说明使得函数值更小的点在区域外部,那么区域上就是可行的最优解)由于 g(x) 的方向始终指向区域的外部,因此 μ>0

不等式约束

总结得到 KKT 条件(Karush-Kuhn-Tucker Conditions):对于拉格朗日函数:$ L(\boldsymbol{x}, \lambda)=f(\boldsymbol{x})+\lambda g(\boldsymbol{x}) $,它需要满足:

  • g(x)0:Primal Feasibility 原问题的可行解区域
  • λ0:Dual Feasibility 对偶可行解区域(新引入的变量 λ 称为对偶变量)
  • λg(x)=0:Complementary Slackness 补充松弛变量(将内部解和边界解写在一起)

一般意义的拉格朗日函数

考虑如下的原问题:

minxRdf(x)s.t. gj(x)0 for j=1,,Js.t. hk(x)=0 for k=1,,K

优化问题的正规性条件:#TODO

L(x,λ,μ)=f(x)+j=1Jλjgj(x)+k=1Kμkhk(x)

为什么是加起来?因为都要满足导数互相平行的关系!得到推广的 KKT 条件,对于所有的 1jJ

  • Primal Feasibility:$ g_{j}(\boldsymbol{x}) \leq 0, h_{k}(\boldsymbol{x})=0 $
  • Dual Feasibility:λj0
  • Complementary Slackness:λjgj(x)=0

求导:

xf(x)+j=1Jλjxgj(x)+k=1Kμkxhk(x)=0

如果求到的三个驻点 x,μ,λ 均满足 KKT 条件,那么 x 就是最优解:

f(x)=L(x,λ,μ)

原问题和对偶问题

根据拉格朗日函数引出的原问题和对偶问题,首先来看原问题:

minxRdf(x)s.t. gj(x)0 for j=1,,Js.t. hk(x)=0 for k=1,,K

那么它的拉格朗日对偶问题为:

maxλRJ,μRKΓ(λ,μ)infxL(x,λ,μ)s.t. λj0 for j=1,,J

什么是 infxL(x,λ,μ),它表示对 x 求完 最小值 之后的拉格朗日函数(将 λ,μ 都看作常数)。

原来的函数的自变量是 x,现在的自变量变成拉格朗日乘子了。注意,虽然没写 Complementary Slackness,但是最后还是要考虑。注意拉格朗日对偶函数 Γ(λ,μ) 永远是一个凹函数,不管原先的函数是不是凸函数 —— 对偶问题的求解比原问题的求解性质更好。并且对偶问题的约束条件也是凸的。

定理:如果对一个仿射函数(线性函数)的点点最小值是一个凹函数。https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf,显然,拉格朗日函数是关于对偶变量的仿射函数。SVM 是一种带约束的优化问题,引入拉格朗日对偶问题的收益有限,因为 SVM 的约束很好。

如果原问题是凸问题,那么对偶问题和原问题的解相同;如果原问题不是凸问题,由于拉格朗日对偶问题是凸问题,那么二者之间的最优解存在一个 gap,称之为 拉格朗日间隔。只有近似解足够好,拉格朗日间隔足够小,我们就认为可以接受。

如何消去 x

xL=0x=ψ(λ,μ)

万一无法求出 ψ(λ,μ) 怎么办?也就是无法求出 x 的闭式解 —— 线性约束二次优化问题不存在这个困扰。

如果 x¯ 是满足约束条件的任意的点,那么有:

infxL(x,λ,μ)f(x)+j=1Jλjgj(x¯)+k=1Kμkhk(x)f(x)
  • 第一个不等式:下界定义
  • 第二个不等式:由于 x¯ 满足约束条件,那么 hk(x¯)=0,同时 λj0,以及 gj(x¯)0

因此,对于对偶变量有 $ \boldsymbol{\lambda} \geq \mathbf{0}, \Gamma(\boldsymbol{\lambda}, \boldsymbol{\mu}) \leq f\left(\boldsymbol{x}^{*}\right) $。即对于任意可行解,拉格朗日对偶函数小于等于原函数。

如果原问题是凸的,那么有:

maxλ,μΓ(λ,μ)=f(x)

此时对偶问题的解就是原凸问题的解。否则是严格小于。

SVM 的对偶问题

Soft-SVM 的原问题:

minw,b,ξ12w22+Ci=1nξis.t. 1ξiyi(wxi+b)0,ξi0,1in

一共有 2n 个不等式约束,n 是样本个数,写出拉格朗日对偶函数,有 3 个原问题变量(类比于 x,和 2 个对偶问题变量):

L(w,b,α,ξ,μ)=12w22+Ci=1nξi+i=1nαi(1ξiyi(wxi+b))i=1nμiξi

同时对偶变量的可行解区域 Dual Feasibility 为:αi0,μi0,i=1,,n

消去原问题的所有变量,拉格朗日函数对原问题变量求导:

Lw=0w=i=1nαiyixiLb=0i=1nαiyi=0Lξi=0C=αi+μi,i=1,,n

求完导数之后 bξi 都消失了,只有将 w 带入拉格朗日函数:

Γ(α)=i=1nαi12i=1nj=1nαiαjyiyj(xixj)

因此 Soft-SVM 的对偶问题就是:

maxαi=1nαi12i=1nj=1nαiαjyiyj(xixj)s.t. i=1nαiyi=0,0αiC,1in

注意:消去原变量的过程中可能引入新的约束。而 C=αi+μi,αi0,μi0 写在一起就是 0αiC。这个问题就是求 αi 使得对偶问题达到最大值,因为 对偶问题的最大值就是原问题的最小值(严格下界)。凹函数 Γ 只有最大值!对偶变量可能被消掉。

对偶问题的作用:原问题带有仿射变换,而对偶问题只是一个 box 和一个简单一点的仿射约束。原问题有 n 个约束,而对偶问题只有一个约束。因此 Soft-SVM 对偶问题的求解简单了。使用 Quadratic Programm 函数调包吗?这样很慢。对偶问题的目标函数很普通,但是约束很特殊,使用 Sequential Minimal Optimization,SMO 求解:

SMO 是使用迭代的控制变量法,假设任意两个变量 αiαj 未知而其他已知(上一轮迭代确定),那么约束条件也是关于两个未知量的线性方程,用一个表示另一个,带入原函数中,得到一元二次函数,快速求解最值。

利用 w=i=1nαiyixi 求出原问题的解。

对偶问题的几何含义

回顾 Soft-SVM 的 KKT 条件的几何解释:

{αi0,μi0yi(wxi+b)1+ξi0αi(yi(wxi+b)1+ξi)=0ξi0μiξi=0
  • Dual Feasibility:αi0,μi0
  • Primal Feasibility:yi(wxi+b)1+ξi0
  • Slack Condition:αi(yi(wxi+b)1+ξi)=0
  • Primal Feasibility:ξi0
  • Slack Condition:μiξi=0

考察 αi(yi(wxi+b)1+ξi)=0 的意义:分两种情况:

w=i=1nαiyixi 可知当 αi=0 意味着第 i 条样本 xi 对最后的解 w 没有影响。那么自然不为零就是有影响,我们将这些有影响的样本称为 支持向量 Support Vector。也就是说,SVM 最后的分类面是由训练样本中那些 αi0 的样本组成的。而 αi0,根据 Slack Condition 就意味着不在内部,而在边界上,即 yi(wxi+b)1+ξi=0,也就是:

yi(wxi+b)=1ξi1

支持向量可能会在夹板里面或夹板上

SV

  • 当点在上下夹板之外的时候,αi=0
  • 当点在上下夹板之上的时候,ξi=0,此时要求 导函数反向μi>0,因此,0<αi<C
  • 当点在上下夹板内的时候(可能在内,可能在反例的地方):0<ξi<1,ξi>2,因此 μi=0,所以 αi=C

最后的解就是支持向量的线性组合,SV 显然是很少的,那么 SVM 是否能够得到稀疏解呢?稀疏解的好处就是算的快。这件事对现实世界不成立,SVM 的结果一般是不稀疏的(SVM 的一大缺点)。

随机梯度下降

偏好:不带约束的问题。能否对 SVM 用随机梯度下降呢?SGD 能解决 线性约束的二次优化问题 Quadratic Programming with linear constraints 吗?

minxRd12xTQx+cTxs.t. Axb

写出问题的矩阵形式,直接调包!矩阵运算是经过优化的,比手写 for 循环好很多。

Soft-SVM 的原问题:

minw,b,ξ12w22+Ci=1nξis.t. yiwxiyibξi1,ξi0,1in

首先自变量有三个,将它写成向量形式:[w,n,ξ]T,其中 w 同样本的特征维度相同,都是 d 维的。

minw,b,ξ12[wbξ]T[Id0d,n+10n+1,d0n+1,n+1][wbξ]+[0d+1,1C1n,1][wbξ]s.t. [diag(y)yIn0n,d0n,1In][wbξ][1n,10n,1]

因此:

x=[wbξ],Q=[Id0d,n+10n+1,d0n+1,n+1],A=[diag(y)yIn0n,d0n,1In],b=[1n,10n,1]

照理来说,对偶问题约束简单,应该更快,但是由于它的优化函数是 O(n2) 复杂度的。样本条数一多,反而效率满了下来。最后优化的效果是 O(n2.67),DeepMind 就是降低矩阵乘法的 O(n3) 复杂度。而原问题二次项 Q 是一个 d+n+1 维度的,由于它有很多零,它是稀疏的,因此在样本多的情况下还是直接求原问题最快。

结构风险最小化

正则化风险最小化:我们希望机器学习模型符合我们的损失函数范式:宁可要正则项也不要约束项:

引入 合页损失函数 Hinge Loss:

(f(x),y)=max{0,1yf(x)}
  • 预测值: f(x)
  • 真实值: y
  • 对于线性假设: (f(x),y)=max{0,1y(wx+b)}

我们可以证明带约束的 SVM 等价于下面的不带约束的 SVM,这也是 SVM 走过的最大的弯路。首先回到 Soft-SVM 最初始形式:

minw,b,ξ12w22+Ci=1nξis.t. yi(wxi+b)1ξi,ξi0,1in

将约束消去就是将 ξi 消去,这个问题是关于 ξi 的线性约束线性优化问题。为了使目标函数尽可能小,那么要求 ξi 的最小值。

ξi1yi(wxi+b);ξi0

分类讨论:如果 1yi(wxi+b)0,那么 ξi 的最小值就是 0,否则 ξi 的最小值就是 1yi(wxi+b)。因此:

ξi=max{0,1yi(wxi+b)}

ξi 就对应这样一个分段函数,所谓的合页损失函数。

机器学习的四大损失函数

loss function

  • 01 损失函数:如果 score 错了,那么损失为 1,否则损失为 0
  • 合页损失函数:当 t1 时就是在夹板外,没有损失,当 t1 时,有损失,按照线性惩罚
  • 指数损失函数:Boosting
  • 逻辑斯蒂损失函数:Logistic Regression

那直接将 ξi 的最小值带入目标函数中去,不就是求到了目标函数的最小值吗?因为对于固定的参数 w,b 而言,ξi 就是所谓的变量。因此目标函数的最小值为(将 ξi 替换为最优解):

minw,b12w22+Cni=1nmax{0,1yi(wxi+b)}

GD 方法直接求解不可行,因为 Hinge Loss 有一个点不可导。采用次梯度,令 t=1 处的导数为 0 即可。次梯度为:

git={wt if yi(wtxi+b)1wtCyixi otherwise 

参数更新方程 wt+1wtηgt,这个算法依然是 1/T 的收敛速度。

如果目标函数是强凸的(二次项是强凸的,合页损失不是强凸的,加起来就是强凸的),有一个更快的方法。

输出:#TODO 为啥要求平均值。

w=1Tt=1Twt

支持向量回归

Support Vector Regression:SVR,不要推导对偶问题,这个直接用 SGD 求就行(换了个损失函数)。

Released under the MIT License.