支持向量机, Support Vector Machine, SVM
支持向量机(Support Vector Machine, SVM)
之前我们看到,在解决分类问题时,无论是logistic regression还是感知机,都隐式或显式地引入了一个“平面”来分割空间,但实际上利用的性质都很少,很多时候分割并不是非常均匀,而SVM充分利用了“几何意义”使得分割尽可能均匀。
比如logistic regression的损失函数是带有一个对数的,会随着超平面和点的靠近而不均匀地快速增大,类似之前看到的在线性可分的训练集上,logistic regression会无限改进而无法收敛。而感知机直接看分类正确个数,就更不均匀了。
SVM的基本原理是用一个超平面(n维向量空间中一个n-1维的子空间)来分割空间(这在高维空间中一般是可行的),在超平面一侧的归为y=1,另一侧归为y=−1。超平面的选择原则是尽可能均匀,即夹在两个点集的“正中间”。
经典形式
定义超平面是
wTx+b=0
一个几何意义是,w是法向量
证明:任取超平面上两点x1,x2
wTx1+b=0wTx2+b=0
相减得
wT(x1−x2)=0
而超平面上任一向量都有起始点x1,x2,所以w垂直于超平面上任一向量,w就是一个法向量。
空间中任一点x0,到超平面的距离是
∣∣w∣∣∣wTx0+b∣
要想超平面夹在一个均匀的位置,也就是到两个点集的正中间,换句话说,超平面到两个点集的最小距离要相等。
从最值的角度来说,就是到两个点集的最小距离的min要最大。
两个最值不太好描述,进行一些转化形式化地来讲,就是
w,bmaxts.t.∀1≤i≤n,∣∣w∣∣∣wTx(i)+b∣≥t
诶诶不太对,那怎么区别是否分类正确呢?是用符号,y=±1
w,bmaxts.t.∀1≤i≤n,∣∣w∣∣y(i)(wTx(i)+b)≥t
∣∣w∣∣是非线性的,首先尝试处理,将其移项到右边,原问题等价于
w,bmaxts.t.∀1≤i≤n,y(i)(wTx(i)+b)≥t∣∣w∣∣
我们还是想让约束尽可能简单,把∣∣w∣∣吸收进t,原问题等价于
w,bmax∣∣w∣∣ts.t.∀1≤i≤n,y(i)(wTx(i)+b)≥t
现在我们要求分类必须全部正确,所以y(i)(wTx(i)+b)>0。再把t吸收掉
w,bmax∣∣w∣∣ts.t.∀1≤i≤n,y(i)(twTx(i)+tb)≥1
参数w,t是任取的,所以原问题转化成
w,bmax∣∣w∣∣1s.t.∀1≤i≤n,y(i)(wTx(i)+b)≥1
倒数不好处理,用单调性直接转化成比较可导的形式
w,bmin21∣∣w∣∣2s.t.∀1≤i≤n,y(i)(wTx(i)+b)≥1
这就是SVM的经典形式。
拉格朗日乘子法
转化成的问题的约束是线性的,考虑使用多元的拉格朗日乘子法来求解,先介绍一般的拉格朗日乘子法。
拉格朗日乘子法可以解决有等式和不等式约束的最优化问题。
如果问题是
wminf(w)s.t.∀1≤i≤n,gi(w)≤0;∀1≤i≤m,hi(w)=0
我们称下式为拉格朗日量(Lagrangian)
L(w,α,β)=f(w)+i=1∑nαigi(w)+i=1∑mβihi(w)
再定义
θp=α,β:αi≥0maxL(w,α,β)
这个量实际上是来约束拉格朗日量不要违法约束的,也就是说
θp={f(w)+∞if gi(w) and hi(w)=0if gi(w)>0 or hi(w)=0
那么现在原问题就等价于
wminθp=wminα,β:αi≥0maxL(w,α,β)
这就是一个双层,每层不同变量的最优化。
而冯诺依曼告诉了我们一个重要的不等式(minimax inequality)
f:W×V→Rwmaxvminf(w,v)≤vminwmaxf(w,v)
那么原问题又可以转化为
α,β:αi≥0maxwminL(w,α,β)≤wminα,β:αi≥0maxL(w,α,β)
记左边式子为θD,称左边的最优化问题为原问题的对偶问题
非常精彩的是,在一些情况下,等号是成立的,我们可以借此完成原问题和对偶问题的转化
取等条件是f和gi的海森矩阵都半正定,也就是说是凸函数,而且hi一定是线性的不等式约束,也就是说形如aTw+b的形式。
直接回到原问题,不管minimax inequality成不成立,找出极值的一个必要条件是
∂wi∂L(w,α,β)=0,∀i∂βi∂L(w,α,β)=0,∀iαigi(w)=0,∀igi(w)≤0,∀iαi≥0,∀i
第二行就是重新表述了等式的约束。
上面的条件称为KKT条件。
求解SVM
直接用拉格朗日乘子法
f(w)=21∣∣w∣∣2gi(w)=−y(i)(wTx(i)+b)+1≤0L(w,b,α)=21∣∣w∣∣2+i=1∑nαigi(w)
套用KKT条件来解,得
∇wL(w,b,α)=w−i=1∑nαiy(i)x(i)∇wL(w,b,α)=0⟺w=i=1∑nαiy(i)x(i)
∂b∂L(w,b,α)=−i=1∑nαiy(i)∂b∂L(w,b,α)=0⟺i=1∑nαiy(i)=0
使用minimax inequality,得到
α,β:αi≥0maxw,bminL(w,b,α,β)=w,bminα,β:αi≥0maxL(w,b,α,β)
使用KKT条件后再将w代入,正好是左边的式子,也就是说,现在我们知道原问题中w是能被α线性表示的,而原问题有转化为了另一个关于α的最优化问题
αmaxW(α)W(α)=i=1∑nαi−21i=1∑nj=1∑nαiαjy(i)y(j)⟨x(i),x(j)⟩s.t.αi≥0⟺−αi≤0i=1∑nαiy(i)=0
然后接下来要是硬求偏导能得到一个关于α的线性方程组,但是实际中一般不会用这种方式来求解。
如果梯度下降的话,又很难满足这些约束,我们接下来发展新的方法来解决。
回到原问题来解b。
考虑超平面的几何意义,b应该是在正中间的,也就是说,要选取两侧到超平面距离最短的点
b=−2maxy(i)=−1wTx(i)+miny(i)=1wTx(i)
软间隔SVM
虽然只要维度够高,大概率能实现完美分类。但仍然有情况不能完美分类。而且完美分类不一定就是最优解(看讲义上的图)。
所以我们现在改造SVM,使其允许错误分类。
f(w)=21∣∣w∣∣2+Ci=1∑kζis.t.y(i)(wTx(i)+b)≥1−ζiζi≥0⟺−ζi≤0
重新再走一遍上面的流程,和上面基本一样,但是对ζ求偏导可以得到
C=αi+βi
最后转化为
αmaxW(α)W(α)=i=1∑nαi−21i=1∑nj=1∑nαiαjy(i)y(j)⟨x(i),x(j)⟩s.t.0≤αi≤Ci=1∑nαiy(i)=0
此时KKT条件是
∂αi∂W(α)=0αi(1−ζi−y(i)(wTx(i)+b))=0βiζi=00≤αi≤Cζi≥0
接下来讨论的都是基于这个形式的SVM。
坐标上升法(Coordinate Ascent)
先介绍这个方法,是后面要用到的。
回忆一下梯度下降法,我们每次选定了最优的方向后会迈出一小步,但是太慢了,而且每次不论用什么方法,都至少要对整个梯度计算一次,可以看到现在参数变成了α,数量是训练集大小,实际上是非常大的。
那能不能想办法解决核心痛点,一次更新的维度太多的问题呢?
坐标上升法是一种很激进的方法。
还是用偏导的思想,直接将函数视为关于某一维的函数,那么可以直接在该维度取到最值,相应调整这一维的参数。
不断选择不同的维度,重复这个过程,就可以取到多元函数的最值。
SMO
如果直接使用坐标上升法其实是不行的,因为在其他维度确定的情况下,任一维度的α都是不能变的,否则违法了那个和为0的等式。
SMO就是同时考虑两个变元,将一个用另一个表出,然后进行坐标上升法的最优化调整。
设调整的两个参数是α1,α2,y(1)α1+y(2)α2=−∑k=3nαky(k)
以下都用α2表示α1。
代入W(α),加上之前的限制0≤α≤C,实际上就是要使一个二次函数取到最值。
设只考虑二次函数的最值,取到了α1new,unclipped,α1new∈[L,H]×[L,H],则
α2new=⎩⎨⎧Lα2new,unclippedHif α2new,unclipped<Lif L≤α2new,unclipped≤Hif α2new,unclipped>H
就是考虑一个开口向上的二次函数的最值,用一个区间来截断。
启发式选取alpha
先思考一下α的取到边界值的实际意义。
αi=0⇒βi=C⇒ζi=0⇒y(i)(wTx(i)+b)≥1
也就是说此时第i个样本被正确分类。
αi=C⇒y(i)(wTx(i)+b)=1−ζi
可能在间隔里面,也可能被误分类。
0<αi<C⇒βi=0⇒ζi=0⇒y(i)(wTx(i)+b)=1
是间隔边界上的支持向量。
在整个算法中,实际上α只满足∑i=1nαiy(i)=0的限制,并不一定满足KKT条件。
而KKT条件是取到最值的必要条件,整个的思路就是不断调整α使其满足KKT条件。
最后SMO的停机条件是满足
0≤αi≤Ci=1∑nαiy(i)=0⎩⎨⎧y(i)(wTx(i)+b)≥1y(i)(wTx(i)+b)=1y(i)(wTx(i)+b)≤1if αi=0if 0<αi<Cif αi=C
然后启发式选取α的过程是这样的
首先要选取α2:
- 遍历整个训练集,选择第一个违反KKT条件的为第一个变量并接着选择第二个变量,进行一次优化
- 遍历整个训练集后,遍历0<αi<C的变量(non-bound),选取第一个违反KKT条件的为第一个变量并接着选择第二个变量,进行一次优化;不断重复这一步,直到所有non-bound变量都被优化过
- 不断重复1-2:遍历整个训练集优化一个变量,再多次优化non-bound变量
- 当整个训练集的样本符合停机条件时停下
定义
di=wTx(i)+bEi=di−y(i)
工程上,判断变量是否符合KKT条件是用下面的条件,
⎩⎨⎧y(i)(wTx(i)+b)≥1−ϵ1−ϵ≤y(i)(wTx(i)+b)≤1+ϵ y(i)(wTx(i)+b)≤1+ϵif αi=0if 0<αi<Cif αi=C
直接合并起来,得到
(αi<C,y(i)Ei≥−ϵi) and (αi>0,y(i)Ei≤ϵi)
相应地,判断是否违反KKT条件就是
(αi<C,y(i)Ei<−ϵi) or (αi>0,y(i)Ei>ϵi)
不直接用上面推导的KKT条件是为了防止数值计算导致的误差。
原论文中有一个小技巧,在α2太小的情况(<1e-18)下直接设为0,离C差距很小的情况(<1e-18)下直接设为C。
在线更新b
按α优化的过程实际上是在优化w,所以b也要相应地变化,这也是体现在KKT条件里的。