前面咱们针对Hard Margin SVM推导了他的原问题:
ωmin2∣∣ω∣∣2
s.t.
y(i)(ωTx(i)+b)⩾1i=1,2,...m
对应的对偶问题:
αmin21i=1∑mj=1∑mαiαjyiyjx(i)⋅x(j)−i=1∑mαi
s.t.
αi⩾0i=1,2,...,m
i=1∑mαiyi=0html
以及决策边界中未知量w的计算方法:
w=i=1∑mαiy(i)x(i)python
那决策边界中的未知量b如何计算呢?就要用了KKT条件,同时用于求解对偶问题的SMO算法也要应用到KKT条件,因此这一次的内容从KKT条件开始。web
3-1 KKT条件
咱们说广义拉格朗日乘子函数的构造是从本来只能解决带等式约束的拉格朗日乘数法推广而来,因此咱们先从最原始的拉格朗日乘数法的求解开始过程开始。算法
3-1-1 从拉格朗日乘数法的求解过程提及
拉格朗日乘数法是求解带有等式约束的最优化问题app
xminf(x)
hi(x)=0,i=1,2,...,psvg
对应的求解方法就是构造拉格朗日乘子函数
L(x,λ)=f(x)+i=1∑pλihi(x)函数
接着对原始的优化变量以及乘子变量求导,并令导数为0,即:
⎩⎨⎧∇xf+i=1∑pλi∇xhi(x)=0hi(x)=0,i=1,2,...,p优化
解这个方程组就能够找到极值点,但目前只是把疑似极值点求出来了,至因而不是极值点,是极大仍是极小点,还须要进一步断定。spa
因此上面的方程组只是取得极值的必要条件,而不是充分条件。orm
3-1-2 推广出KKT条件
针对既带有等式约束和不等式约束的优化问题,咱们能够构造广义拉格朗日函数
xminf(x)
gi(x)⩽0,i=1,2,...q
hi(x)=0,i=1,2,...p
构造拉格朗日乘子函数
L(x,λ,μ)=f(x)+i=1∑pλihi(x)+j=1∑qμjgj(x)
设极值点为
x∗
在极值点出必需要知足:
|
|
1.原问题的约束条件 |
gi(x∗)⩽0,i=1,2,...q
hi(x∗)=0,i=1,2,...p |
2.对偶问题的约束条件 |
μi⩾0,i=1,2,...q |
3.松弛互补条件 |
μigi(x∗)=0,i=1,2,...q |
4.X同时是拉格朗日函数的极小点
∇xL(x∗,λ,μ)=0 |
∇xf(x∗)+i=1∑pλi∇xhi(x∗)+j=1∑qμj∇xgj(x∗)=0 |
再次详细说明下其中的松弛互补条件:
根据
μigi(x∗)=0,i=1,2,...q
咱们会发现
当
μ>0时,
gi(x∗)=0。说明极值点在边界处取得。
当
μ=0时,
gi(x∗)⩽0。说明这个不等式约束对函数没有影响。
以上四条就是KKT条件,它是对原问题最优解的约束,是最优解的必要条件。
可是若是原问题和对偶问题存在强对偶问题,则KKT条件就是取得极值的充要条件。
而咱们的支持向量机的原问题不论是线性可分的仍是不可分,即便加上后面的核函数,都是强对偶问题。使得咱们可使用KKT条件,获得极值点的一些特征。
3-1-3 KKT条件用于原问题
原问题:
ωmin2∣∣ω∣∣2
s.t.
y(i)(ωTx(i)+b)⩾1i=1,2,...m
根据KKT条件中的松弛互补条件(对于不等式约束,乘子变量*函数值=0)
αi(yi(wTx(i)+b)−1)=0,i=1,2,...m
咱们仔细分析下松弛互补条件:
当
αi>0时,
yi(wTx(i)+b)=1 —>支撑向量
当
αi=0时,
yi(wTx(i)+b)⩾1—>自由变量,对分类超平面不起做用
3-1-4 KKT条件的做用:
- SMO算法选择优化变量
SMO算法是用于求解以后对偶问题的算法,它是一个迭代算法,每次仅选取两个乘子变量进行优化。KKT条件能够帮助咱们寻找出须要优化的乘子变量。
- 迭代终止的断定规则
由于对于支持向量机来讲KKT条件是极值点的充分必要条件,因此若是在迭代过程当中发现待求点已经知足KKT条件了,那咱们就把极值点解出来了,无须继续迭代。
3-1-5 决策边界中b的计算:
咱们经过将原问题转化为拉格朗日对偶问题,使得最优化的变量从本来的w,b转换为拉格朗日乘子变量
α
若是咱们能够求得使得对偶问题最优的
α后。则决策边界中的w能够经过
w=i=1∑mαiyix(i)求得
而决策边界中b经过松弛互补条件求得。
前面说到,对于最优势来讲,当
αi>0时,
yi(wTx(i)+b)=1。
因此咱们只须要到
αi>0对应的样本,求得b。
理论上来讲,任意符合
αi>0的样本,均可以用来计算b的值,但因为计算有偏差,通常为了减少偏差,会用全部知足
αi>0的样本计算b,再取均值。
3-2 SMO算法
3-2-1 咱们如今面临的棘手问题
前面讲到了对偶问题,让咱们再看下推导获得的对偶问题
αmin21i=1∑mj=1∑mαiαjyiyjx(i)⋅x(j)−i=1∑mαi
s.t.
αi⩾0i=1,2,...,m
i=1∑mαiyi=0
为了方便以后进一步的推导,咱们将对偶问题写成向量化的形式
αmin21αTQα−eTα
s.t.
yTα=0
αi⩾0,i=1,2,...,m
其中
矩阵
Qij=yiyjx(i)⋅x(j)
向量
eT=[1,1,...,1]
关于从
j=1∑mαiαjyiyjx(i)⋅x(j)到
αTQα
应用了二次型展开。
这部分我不是熟悉,只依稀记得一个例子
x2+y2+z2=[xyz]⎣⎡100010001⎦⎤⎣⎡xyz⎦⎤
中间的矩阵对应的是本来的系数,因此Q本质上就是
αiαj的系数矩阵
这是一个大规模的二次函数的最优化问题,因为自己是凸优化问题,因此一些经典的最优化算法(如牛顿法,梯度降低法)能够收敛到极值点处。
但棘手的是还存在着等式约束和不等式约束,因此须要更好的求解算法,那就是SMO算法(序列最小最优化算法)
从SVM提出,到SMO算法提出以前,SVM并无普遍使用就是由于这个对偶问题的求解很是麻烦。
3-2-2 破解对偶问题的神器SMO算法
SMO算法(Sequential minimal optimization)序列最小最优算法的核心思想是分治法(把一个大问题拆解成不少子问题来求解,而后把解合并起来,造成大问题的解)
SMO算法的巧妙之处在于每次选取两个变量进行优化。为何不仅选出一个变量进行优化呢?
由于咱们有一个等式约束
i=1∑mαiyi=0,若是只有一个
α变化的话,就会破坏原来的等式约束。
所以只调整一个变量是不行的,最少要调整2个变量。
根据这个想法,就能够把原来的m元2次问题转化成2元2次问题。
而对于2元2次函数的极值问题的求解就是初中内容了,能够经过等式约束,消掉一个变量,变成一元二次函数求极值的问题。
一元二次函数就是一个抛物线,但由于有
α⩾0的限定条件,因此咱们须要根据这个状况来进行极值的讨论。
3-2-3 SMO算法的理论推导
3-2-3-1 定义一些变量
以后原来代换的变量也写在这边,方便查看
|
|
定义矩阵Q |
Qij=yiyjXiTXj |
定义
ui |
ui=j=1∑myjαjXj⋅Xi+b
ui至关于把第i个样本带到咱们的预测函数中 |
|
|
定义
Kij |
Kij=XiTXj |
定义s |
s=y1y2 |
定义
vi |
vi=k=1,k≠i,k≠j∑mykαkKik |
定义
ξ |
ξ=yiαi+yjαj=−k=1,k≠i,k≠j∑mykαk |
|
|
定义
w |
w=ξyi |
|
|
定义
η |
η=Kii+Kjj−2Kij |
定义
Ei |
Ei=ui−yi |
3-2-3-2 KKT条件的做用
再回忆KKT条件:
{αi>0αi=0yi(wTx(i)+b)=1yi(wTx(i)+b)⩾1
以前讲到,KKT条件用于选择优化变量,断定迭代是否终止
-
选择优化变量:
KKT条件帮助咱们选择每次哪两个变量来优化,怎么挑呢?只要这个变量违反KKT条件,咱们就把它挑出来。
因此若是不知足kkt条件,就必定不是极值点,因此咱们要把它挑出来,调整
α使得知足KKT条件
-
断定迭代的依据:
若是alphai都知足,说明找到了极值点。
因此大致上SMO算法的流程图为:

根据SMO算法的流程图,能够看出咱们须要解决的几个小问题,分别是如何初始化,如何选出优化变量,如何优化选出的变量。先就其中最繁琐的如何优化选出的变量提及。
3-2-3-3 子问题的推导->如何优化选出的变量
3-2-3-3-1 转化为二元二次函数问题
假如咱们已经经过KKT条件,从m个
α中已经选出了须要优化的2个变量
αi,αj
这时对于对偶问题
f(α)=21i=1∑mj=1∑mαiαjyiyjx(i)⋅x(j)−i=1∑mαi来讲,只有
αi和
αj是变量,其余的都是常量,这时咱们的目标函数就转化成了二元二次函数,再根据等式约束,能够进一步转化为一元二次求极值的问题。
咱们将上式整理下,写成
系数αi2+系数αj2+系数αiαj+系数αi+系数αj+系数这样的形式
g(αi,αj)=21Kiiαi2+21Kjjαj2+sKijαiαj+yiviαi+yjvjαj−αi−αj
其中
s=y1y2
vi=k=1,k≠i,k≠j∑mykαkKik
约束条件为
αi⩾0
αj⩾0
k=1∑mykαk=0由此能够推出
yiαi+yjαj=−k=1,k≠i,k≠j∑mykαk=ξ
接下来的目标就是计算
f(αi,αj)的极值
3-2-3-3-2 肯定
αj的可行域
由于
yiαi+yjαj=−k=1,k≠i,k≠j∑mykαk=ξ
因此
αi+yiyjαj=yiξ
因为
yiyj的正负号不知,因此一共对应四种情形,同时咱们还能够尝试肯定下
ξ的正负
序号 |
yi |
yj |
αi+yiyjαj=yiξ |
ξ |
1 |
+ |
+ |
αi+αj=ξ |
+ |
2 |
- |
- |
αi+αj=−ξ |
- |
3 |
+ |
- |
αi−αj=ξ |
不知 |
4 |
- |
+ |
αi−αj=−ξ |
不知 |
对应这四种状况,咱们能够经过图像,分别肯定出
αj的取值范围
序号 |
yi |
yj |
αi+yiyjαj=yiξ |
ξ |
|
1 |
+ |
+ |
αi+αj=ξ |
+ |
 Low boundary =
0 High boundary=
αi+αj |
2 |
- |
- |
αi+αj=−ξ |
- |
 Low boundary =
0 High boundary=
αi+αj |
3 |
+ |
- |
αi−αj=ξ |
不知 |
 Low boundary =
max{0,αi−αj} High boundary=
+∞ |
4 |
- |
+ |
αi−αj=−ξ |
不知 |
 Low boundary =
max{0,αi−αj} High boundary=
+∞ |
最终总结下
αj的取值范围
{αj∈[0,αi+αj]αj∈[max{0,αi−αj},+∞)yiyj=1yiyj=−1
3-2-3-3-2 肯定
αj的值
因为
αi与
αj存在等式关系,即
yiαi+yjαj=ξ,
左右同时乘以
yi得
αi+yiyjαj=ξyi,即
αi+sαj=ξyi
令
w=ξyi
故
αi=w−sαj
因此咱们将上式带入
g(αi,αj)=21Kiiαi2+21Kjjαj2+sKijαiαj+yiviαi+yjvjαj−αi−αj
就能够获得关于
αj的一元二次函数,接下来就是这个带入过程。
g(αj)=21Kii(w−sαj)2+21Kjjαj2+sKij(w−sαj)αj+yivi(w−sαj)+yjvjαj−(w−sαj)−αj
咱们能够经过对
g(αj)求导=0,获得极值点的位置
g′(αj)=Kii(w−sαj)(−s)+Kjjαj+sKijw−2s2Kijαj−syivi+yjvj+s−1=0
在整理过程当中,咱们使用一个小技巧
syivi=yiyjyivi=yjvi
带入目标函数中获得
(Kii+Kjj−2Kij)αj=sw(Kii−Kij)+yjvi−yjvj−s+1
等号的右边能够进一步简化成和左边类似的结构。
用到一些小技巧好比
sw=yiyjyiξ=yjξ
其中
ξ=αi∗yi+αj∗yj
αi∗和
αj∗表示未迭代的值
因此
sw=yj(αi∗yi+αj∗yj)
将
sw=yj(αi∗yi+αj∗yj)带入右式,同时让
s=yiyj,
1=yjyj
sw(Kii−Kij)+yjvi−yjvj−s+1=yj(αi∗yi+αj∗yj)(Kii−Kij)+yjvi−yjvj−yiyj+yjyj=yiyjαi∗Kii+αj∗Kii−yiyjαi∗Kij−αj∗Kij+yj(vi−vj+yj−yi)
接下来的化简要将
vi用
ui表示
回忆
vi=k=1,k≠i,k≠j∑mykαkKik=Xi⋅k=1,k≠i,k≠j∑mykαkXk
ui=j=1∑myjαjKij+b=Xi⋅j=1∑myjαjXj+b=vi+yiαi∗XiXi+yjαj∗XjXi+b
也就是说
vi−vj=ui−uj+yjαjXjXj+yiαiXiXj−yiαiXiXi−yjαjXjXi
=ui−uj+yjαj∗Kjj+yiαi∗Kij−yiαi∗Kii−yjαj∗Kij
因此等号右边能够继续化简
=yiyjαi∗Kii+αj∗Kii−yiyjαi∗Kij−αj∗Kij+yj(vi−vj+yj−yi)
=yiyjαi∗Kii+αj∗Kii−yiyjαi∗Kij−αj∗Kij+yj(ui−uj+yjαj∗Kjj+yiαi∗Kij−yiαi∗Kii−yjαj∗Kij+yj−yi)
=yiyjαi∗Kii+αj∗Kii−yiyjαi∗Kij−αj∗Kij+αj∗Kjj+sαi∗Kij−sαi∗Kii−αj∗Kij+yj((ui−uj)−(yi−yj))
=αj∗(Kii+Kjj−2Kij)+yj((ui−uj)−(yi−yj))
这时,等号的左右边都有
(Kii+Kjj−2Kij),对于取得极值点的
αj能够进一步化简
设
η=Kii+Kjj−2Kij
Ei=ui−yi
ηαj=αj∗η+yj(Ei−Ej)
因此
αj=αj∗+ηyj(Ei−Ej)
这是在无约束时,使得
g(αi,αj)最小的点,咱们令其为
αjbest但因为
αj还存在不等式约束
{αj∈[0,αi+αj]αj∈[max{0,αi−αj},+∞)yiyj=1yiyj=−1
因此再根据约束,进一步考虑最终迭代后
αi的值
对应的一共有三种状况
最终迭代后
αjnew的值为
αjnew=⎩⎪⎪⎨⎪⎪⎧LαjbestHif αjbest<Lif L⩽αjbest⩽Hif αjbest>H
3-2-3-3-3 肯定
αi的值
由于
αinewyi+αjnewyj=αi∗yi+αj∗yj
因此迭代后
αinew=αi∗+s(αj∗−αjnew)
3-2-3-3-4 更新b
若是
α1>0
则
k=1∑mykαkXkX1+b1new=y1
即
k=3∑mykαkXkX1+α1newy1K11+α2newy2K21+b1new=y1
因此
b1new=y1−k=3∑mykαkXkX1−α1newy1K11−α2newy2K21
未更新的
E1=k=3∑mykαkKk1+α1∗y1K11+α2∗y2K21+b∗−y1
因此可得
y1−k=3∑mykαkKk1=−E1+α1∗y1K11+α2∗y2K21+b∗
故
b1new=−E1+α1∗y1K11+α2∗y2K21+b∗−α1newy1K11−α2newy2K21
=b∗−E1+y1K11(α1∗−α1new)+y2K21(α2∗−α2new)
同理可得
b2new=b∗−E2+y1K12(α1∗−α1new)+y2K22(α2∗−α2new)
最终
bnew的取值为
bnew=2b1new+b2new
对b的更新还不是十分肯定,先暂时按这样的方式实现下代码
3-2-3-3-5 更新
Ek
每次完成两个变量的优化以后,还必须更新对应的
Ek,并将他们保存在列表中,
Ek值的更新要用到
bnew
Eknew=i=1∑myiαiKik+bnew−yk
3-2-3-4 一些证实细节
3-2-3-4-1 SVM对偶问题的任意一个子问题都是凸优化问题(抛物线开口向上)
用到的方法利用是Hessian矩阵判断
子问题的Hessian矩阵为
[QiiQjiQijQjj]
能够写成以下矩阵乘积的形式
[yiXiTyiXjT][yiXiyjXj]=ATA
任意的向量x
xTATAx=(Ax)T(Ax)⩾0
因此Hessian矩阵半正定,所以目标函数必定为凸函数
3-2-3-4-2 SVM算法收敛性的证实
由于不管迭代时,两个变量的初始值时多少,经过上面的子问题求解算法获得的是在可行域内的最小值,所以每次更新完这两个变量后,都能保证目标函数的值小于或者等于初始值,即函数值降低。同时SVM要求解的对偶问题是凸优化问题,有全局最小解,因此SMO算法能保证收敛。
3-2-3-5 优化变量的选择
使用KKT条件,挑选出违反KKT条件的样本,进行优化。
根据前面的推导,在最优势处必须知足
{αi>0αi=0yi(wTx(i)+b)=1yi(wTx(i)+b)⩾1
其中
w用
α来表示
设
ui=j=1∑myjαjXj⋅Xi+b
因此在最优势处必须知足
{αi>0αi=0yiui=1yiui⩾1
根据上式,依此检查全部样本,若是违反了上面的条件,则须要优化。
优先优化
αi>0
第二个变量的选择,选择使
∣Ei−Ej∣最大化的值。
其中
Ei=ui−yi
为何选
∣Ei−