SVM(Support Vector Machine)是用来解决分类问题的。任何一个机器学习问题首先要考虑三个问题:
1. 模型是什么
2. 优化目标是什么
3. 算法是什么
SVM的模型: hw,b(x)=g(wTx+b)
g为sigmoid函数。我们考虑二元线性分类,两种不同的类别分别用1和-1表示,即y∈{1,−1}。wTx+b>0的样本被标记为1,wTx+b<0的样本被标记为-1。
一个很朴素的想法:对于分类问题,我们想找到这样一个分类器——不仅能把数据分开,还要远远的分开,我们认为这样的分类器是好的分类器。那么怎么用数学语言来表达这一观点呢?
首先引入函数间隔和几何间隔用来精确衡量待分类样本到超平面的距离。
函数间隔:
γˆ(i)=y(i)(wTx(i)+b)
γˆ(i)越大,分类效果越好。取所有样本最小的函数间隔作为训练集的函数间隔:
γ=mini=1,⋯,mγˆ(i)
几何间隔:wT(x(i)−γ(i)w∥w∥)+b=0 由左式得:
γ(i)=(w∥w∥)Tx(i)+b∥w∥
上式是分类为1的样本的几何间隔,再将分类为-1的样本考虑进来,重新定义几何间隔为:
γ(i)=y(i)⎛⎝(w∥w∥)Tx(i)+b∥w∥⎞⎠
整个样本的几何间隔为:
γ=mini=1,⋯,mγ(i)
几何间隔等于函数间除以
∥w∥,当
∥w∥=1时,几何间隔等于函数间隔。
用来测量距离的尺子已经制作好了,利用这两把尺子把我们之前的朴素想法转化为数学语言,就变成了一个优化问题:
maxγ,w,bγs.t.y(i)(wTx(i)+b)≥γ,i=1,⋯,m∥w∥=1
当
∥w∥=1时,几何间隔和函数间隔相等,上述优化问题等价于:
maxγ,w,bγ^∥w∥s.t.y(i)(wTx(i)+b)≥γ^,i=1,⋯,m
令
γ^=1(因为
wTx+b=0,所以函数间隔可以等比例的缩放w,b而不改变超平面的位置),上述优化问题转化为:
minγ,w,b12∥w∥2s.t.y(i)(wTx(i)+b)≥1,i=1,⋯,m
这就是SVM的
优化目标,目标函数和限制条件都是凸函数,这是一个凸优化问题,凸优化满足强对偶性,原问题与对偶问题的最优解相等且等价于KKT条件的解,这也是我们花那么多努力将最初的优化问题转化为上述优化问题的原因。
限定条件的最值问题,利用拉格朗日乘子法解决。一般形式的凸优化问题有两个限定条件:一个不等式限制,一个等式限制:
minx,λ,vf0(x)s.t.fi(x)≤0,i=1,⋯,mhi(x)=0,i=1,⋯,p
称该问题为原问题,最优点为
x∗,最优值为
p∗
构造拉格朗日量:
L(x,λ,v)=f0(x)+∑i=1mλifi(x)+∑i=1pvihi(x)
拉格朗日对偶函数:
g(λ,v)=infx∈DL(x,λ,v)=infx∈Df0(x)+∑i=1mλifi(x)+∑i=1pvihi(x)
g(λ,v)是
L(x,λ,v)的逐点下确界。直观理解:固定
λ和v,x跑遍定义域,
Lλ,v(x)值域的最小值。
对偶问题为原问题提供了下界。限制λi≥0,i=1,⋯,m则:
g(λ,v)≤p∗
证明如下:
g(λ,v)≤f0(x)+∑i=1mλifi(x)+∑i=1pvihi(x)=f0(x)+∑i=1mλifi(x)≤f0(x)
现将目标转向求解原问题的对偶问题(简化了约束),即:
maxλ,vg(λ,v)s.t.λi≥0,i=1,⋯,m
设对偶问题的最优点为
(λ∗,v∗),最优值为
d∗
凸优化满足强对偶条件,即:d∗=p∗
d∗=g(λ∗,v∗)≤f0(x∗)+∑i=1mλ∗ifi(x∗)+∑i=1pv∗ihi(x∗)=f0(x∗)+∑i=1mλ∗ifi(x∗)≤f0(x∗)=p∗
d∗=p∗意味着上述两个不等式全为等式。于是有:
∇xL(x,λ∗,v∗)=0∑i=1mλ∗ifi(x∗)=0
再加上原问题与对偶问题的限定条件可得:
fi(x∗)≤0,i=1,⋯,mhi(x∗)=0,i=1,⋯,pλ∗i≥0,i=1,⋯,mλ∗ifi(x∗)=0,i=1,⋯,m∇xL(x,λ∗,v∗)=0
以上五个式子被称为KKT条件。
针对SVM优化目标构造拉格朗日量:
L(λ,w,b)=12∥w∥2−∑i=1mλi(y(i)(wTx(i)+b)−1)
∂L(λ,w,b)∂w=w−∑i=1mλiy(i)x(i)=0⇒w=∑i=1mλiy(i)x(i)
w是输入向量
x(i)的线性组合,回到SVM的模型:
hw,b(x)=g(wTx+b),我们关心的是
wTx+b的大小
wTx+b=∑i=1mλiy(i)(x(i))Tx+b=∑i=1mλiy(i)⟨x(i),x⟩+b
wTx+b是新输入的样本与训练样本的内积之和。当
λ∗i>0,由KKT条件
λ∗ifi(x∗)=0⇒fi(x∗)=0⇒y(i)(wTx(i)+b)=1
此时
x(i)是取得最小间隔的样本,被称为
支持向量。支持向量只占样本很小的一部分,大部分
λi=0,所以只需要计算支持向量与新输入样本的内积。
∂L(λ,w,b)∂b=∑i=1mλiy(i)=0
对偶函数:
g(λ)=∑i=1mλi−12∑i=1m∑j=1mλiλjy(i)y(j)⟨x(i),x(j)⟩
把求解原问题的最小值转化为求解对偶问题的最大值:
maxλg(λ)=∑i=1mλi−12∑i=1m∑j=1mλiλjy(i)y(j)⟨x(i),x(j)⟩s.t.λi≥0,i=1,⋯,m∑i=1mλiy(i)=0
注:为什么要加上
∑i=1mλiy(i)=0这个约束?根据定义
g(λ)是
L(λ,w,b)在定义域上的逐点下确界,如果
∑i=1mλiy(i)≠0则
L(λ,w,b)是关于b的线性函数,无法取到最小值,
g(λ)无定义。
求解上述凸优化问题,得到λ∗,带入w=∑i=1mλiy(i)x(i),得到w∗,即确定了超面的方向,从而易得:
b∗=maxi:y(i)=−1w∗Tx(i)+mini:y(i)=1w∗Tx(i)2
样本往往有很高维的特征,为了将SVM应用到高维甚至无穷维,需要借助核方法。核方法将
X空间中的任意两个向量
x(i),x(j)映射成另一空间的内积:
k(x(i),x(j))=⟨ϕ(x(i)),ϕ(x(j))⟩
ϕ为核函数,如何构建合适的核函数以及如何证明一个核函数的正确性可以看Andrew Ng的讲义。
我们假定样本线性可分,如果样本线性不可分呢?需要对上述SVM进行改进,优化目标变为:L1 norm margin SVM
minγ,w,b12∥w∥2+C∑i=1mξis.t.y(i)(wTx(i)+b)≥1−ξi,i=1,⋯,mξi≥0,i=1,⋯,m
直观理解:当
ξi>1时,
y(i)(wTx(i)+b)<0,样本分类错误,我们允许这种情况发生,但是要对优化目标加一个正数(
C∑i=1mξi)作为惩罚。此时对偶问题变为:
maxλg(λ)=∑i=1mλi−12∑i=1m∑j=1mλiλjy(i)y(j)⟨x(i),x(j)⟩s.t.0≤λi≤C,i=1,⋯,m∑i=1mλiy(i)=0
接下来的目标就是求解该对偶问题,解得
λ∗。
先介绍坐标上升算法:无约束条件的一个优化问题:
maxαW(α1,α2,⋯,αm)
坐标上升的思路:每次选取一个参数,固定其它参数不动,求得相对选定参数的最大值,不断重复这一过程,最终求得最终的最大值。将这一思路应用到修正过的SVM优化目标,因为有约束条件
∑i=1mλiy(i)=0的存在,无法每优化一个参数。但是可以一次优化两个参数。该算法被称为
SMO算法,顺序最小优化算法,所谓最小即为每次优化最小数量的参数。借助SMO算法,我们可以高效的实现SVM。
最后回答一下最开始提到的机器学习的三个问题,作为一个总结:
- SVM的模型:hw,b(x)=g(wTx+b)
- SVM的优化目标:
maxλg(λ)=∑i=1mλi−12∑i=1m∑j=1mλiλjy(i)y(j)⟨x(i),x(j)⟩s.t.0≤λi≤C,i=1,⋯,m∑i=1mλiy(i)=0
- 求解SVM优化目标的算法:SMO算法
PS:为什么要将原问题转化为对偶问题,最重要的原因:简化约束。约束是很麻烦的,没有约束的最值问题的求解可以用梯度下降或者牛顿法很好的解决。无论原问题是不是凸优化问题,其对偶问题都是凸优化问题。区别在于:如果原问题是凸优化则对偶问题与原问题的最值相等,如果原问题是非凸的,对偶问题提供了对原问题很好的近似,而无论哪种情况,对偶问题都简化了原问题的约束,降低了求解难度。