前言
之前的博客中,已經介紹了SVM的原理:
機器學習入門學習筆記:(4.1)SVM算法
機器學習入門學習筆記:(4.2)核函數和軟間隔
最後我們得到的優化問題如下:
maxα∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxixj,s.t.∑i=1mαiyi=00≤αi≤C,i=1,2,...,m
這個問題的解就是一系列的
α
,這些
α
會使得上面的式子有最大值。
這個式子是引入了軟間隔後的支持向量機的問題,再進一步,用上核函數,就可以表示爲:
maxα∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjK(xi,xj),s.t.∑i=1mαiyi=00≤αi≤C,i=1,2,...,m
一般來說,我們都不是很喜歡求最大值的問題,而是求最小值,所以將上面的問題換成求最小值的形式:
minα12∑i=1m∑j=1mαiαjyiyjK(xi,xj)−∑i=1mαi,s.t.∑i=1mαiyi=00≤αi≤C,i=1,2,...,m
我們之後的討論都會圍繞着這個問題進行。
SMO算法
爲了解決二次規劃問題,人們提出許多高效的算法。其中比較典型的一個就是SMO(Sequential Minimal Optimization)算法。SMO算法由Microsoft Research的John C. Platt在1998年提出,併成爲最快的二次規劃優化算法,特別針對線性SVM和數據稀疏時性能更優。關於SMO最好的資料就是他本人寫的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。
(摘自支持向量機(五)SMO算法)
SMO 概念
SMO的基本思路就是:先固定
αi
之外的所有參數,然後求
αi
的極值。但是問題中存在約束條件:
∑mi=1αiyi=0
。如果固定了
αi
之外的其他變量,則
αi
也會被固定,可以由其他的變量導出。於是,一次只留一個參數,固定其餘參數的方法在這裏是不適用的,但是這個思想卻給了我們不錯的啓發。那麼,SMO可以每次選擇兩個變量
αi
和
αj
,並固定其他參數。這樣,在參數初始化之後,SMO不斷迭代重複下面的步驟,直至收斂:
- 選取一對新的
αi
和
αj
;
- 固定
αi
和
αj
之外的參數,求解前面的優化問題,獲取更新後的
αi
和
αj
。
假設選取的兩個變量爲
α1
和
α2
,那麼由於其餘參數均被固定,目標函數最後也只與
α1
和
α2
有關。
由約束條件
∑mi=1αiyi=0
有:
α1y1+α2y2=C
,其中
C
爲常數。
爲簡化表示,我們用
Kij
表示
K(xi,xj)
。
對原始問題進行化簡:
minα12∑i=1m∑j=1mαiαjyiyjK(xi,xj)−∑i=1mαi
=minα∑i=1m[αiα1yiy1K(xi,x1)+αiα2yiy2K(xi,x2)+∑j=3mαiαjyiyjK(xi,xj)]−α1−α2−∑i=3mαi
=minα12[α21y21K(x1,x1)+α1α2y1y2K(x1,x2)+∑j=3mα1αjy1yjK(x1,xj)]+12[α2α1y2y1K(x2,x1)+α22y22K(x2,x2)+∑j=3mα2αjy2yjK(x2,xj)]+12∑i=3m[αiα1yiy1K(xi,x1)+αiα2yiy2K(xi,x2)+∑j=3mαiαjyiyjK(xi,xj)]−α1−α2−∑i=3mαi
=minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+∑i=3m∑j=3mαiαjyiyjK(xi,xj)+2α1y1v1+2α2y2v2]−α1−α2−∑i=3mαi
(其中,因爲核函數滿足
K12=K21
,所以直接合在一起了;爲了便於表示,令
vi=∑mj=3yjαjkij
)
由於除了
α1
和
α2
之外的
αi,i=3,4,...,m
都被固定了,所以都是常數。
=minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]−α1−α2+C
其中
C
是任意常數。
解的範圍
現在的結果是有關
α1
和
α2
的表達式,爲了進一步化簡我們還可以將
α1
用
α2
表示。但是在此之前,還有一個問題,那就是
α1
和
α2
的取值範圍是多少?儘管有了約束條件
∑mi=1αiyi=0
,但是在
y1
和
y2
取不同值時,也會有不同的約束關係產生。
(摘自John C. Platt的論文)
前面推出的
α1
和
α2
的約束關係爲:
α1y1+α2y2=C
。
我們還有些已知的條件:
0≤α≤C
y1
和
y2
都是輸出的標籤,爲
±1
,顯然:
y21=y22=1
。
如上圖所示,分兩種情況討論:
如果
y1≠y2
,則
y1
和
y2
一定異號,那麼約束關係變爲:
α1−α2=k
,
k
是任意常數。
k
具體是多少我們並不關心,但是我們知道
α1
和
α2
的取值都落在途中的直線上。
k
無非就是一個截距,隨着
k
的變化,這根直線在方框內會上下移動,交點也變,但是一定要在方框範圍內,所以邊界一定會落在方框與直線的交點上。假設幾種可能的情況就不難推算出
α
的範圍了假設只考慮
α2
的範圍,設
L
爲
α2
可能的最小取值,
H
爲
α2
可能的最大取值。
L=max(0,−k),H=min(C,C−k)L=max(0,α2−α1),H=min(C,C+α2−α1)
如果
y1=y2
,則
y1
和
y2
一定同號,那麼約束關係變爲:
α1+α2=k
,
k
是任意常數。與前面同樣分析。只考慮
α2
的範圍,設
L
爲
α2
可能的最小取值,
H
爲
α2
可能的最大取值。根據圖中所示,可以得到如下關係:
L=max(0,k−C),H=min(C,k)L=max(0,α1+α2−C),H=min(C,α1+α2)
通過上面的討論,我們得到了
α2
的可能取值範圍:
L≤α2≤H
- 當
y1≠y2
時,
L=max(0,α2−α1),H=min(C,C+α2−α1)
;
- 當
y1=y2
時,
L=max(0,α1+α2−C),H=min(C,α1+α2)
。
同理,
α1
的範圍與
α2
是一樣的。這個範圍先保留,後面再用。
求解優化問題
轉化爲一元函數求極值點
接下來,將
α1
用
α2
表示。將約束關係:
α1y1+α2y2=C
左右同時乘上
y1
得到:
α1=(ζ−α2y2)y1
,這裏的
ζ
是常數,爲了不跟原式子中的
C
混淆,換成
ζ
表示這個常數。
好了,我們已經將
α1
用
α2
表示出來了,可以代回到前面的問題中了:
minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]−α1−α2+C其中vi=∑j=3myjαjkij
我們有
y21=y22=1
,以及
α1=(ζ−α2y2)y1
,代入化簡得到:
minα12[(ζ−α2y2)2k11+k22α22+2(ζ−α2y2)α2y2k12+2(ζ−α2y2)v1+2α2y2v2]−(ζ−α2y2)y1−α2+C
常數可以去掉,不影響結果:
minα12[(ζ−α2y2)2k11+k22α22+2(ζ−α2y2)α2y2k12+2(ζ−α2y2)v1+2α2y2v2]−(ζ−α2y2)y1−α2
上面的問題已經化成了單變量的優化問題了,使用常規套路,求偏導取0,即可解出
α2
的值。
對目標函數求偏導數:
∂Φ∂α2=α2(K11+K22−2K12)−K11ζy2+K12ζy2−y2v1+y2v2+y1y2−1
令這個偏導數爲0可以求出新的
α2
,利用
α1=(ζ−α2y2)y1
這個關係,又可以求出新的
α1
,這兩新求出的值即爲我們使用SMO算法優化之後的結果。爲了與原始的
α1
和
α2
值區分,我們將這兩個新的值標記爲
α∗1
和
α∗2
。
修改後的幾個條件如下:
∂Φ∂α∗2=α∗2(K11+K22−2K12)−K11ζy2+K12ζy2−y2v1+y2v2+y1y2−1=0
ζ=α1y1+α2y2=α∗1y1+α∗2y2
其中vi=∑j=3myjαjkij
爲了後面表示簡便,還要給出幾個關係:
如果把
vi
直接代入,結果太複雜了。還需要對
vi
做一些變換:
前面的博客中,我們已經推導過SVM的數學模型的最終結果:
f(xi)=ωTx+b=∑mj=1αjyjK(xi,xj)+b
展開
f(x)
看看:
f(x1)=α1y1K11+α2y2K12+∑j=3mαjyjK1j+b=α1y1K11+α2y2K12+v1+b
f(x2)=α1y1K12+α2y2K22+∑j=3mαjyjK2j+b=α1y1K12+α2y2K22+v2+b
所以:
v1=f(x1)−α1y1K11−α2y2K12−b
v2=f(x2)−α1y1K12−α2y2K22−b
好了,條件基本都得到了,再列一下我們要用的條件:
∂Φ∂α∗2=α∗2(K11+K22−2K12)−K11ζy2+K12ζy2−y2v1+y2v2+y1y2−1=0
ζ=α1y1+α2y2(=α∗1y1+α∗2y2)
v1=f(x1)−α1y1K11−α2y2K12−b
v2=f(x2)−α1y1K12−α2y2K22−b
聯立,化簡得:(注:
ζ=α1y1+α2y2
,用舊的
α1
和
α2
,因爲我們最後要表示出新的
α∗2
)
α∗2(K11+K22−2K12)=(K11+K22−2K12)α2+y2[y2−y1+f(x1)−f(x2)]
設預測值與真實值之差爲
Ei
:
Ei=f(xi)−yi
繼續化簡:
α∗2=α2+y2E1−E2(K11+K22−2K12)
再記
η=(K11+K22−2K12)
:
α∗2=α2+y2E1−E2η,η=(K11+K22−2K12)
注意,
α∗2
是經過優化後求出的解,
α2
是之前的值。
當然還有
α2
的範圍約束,前面我們已經推導了:
了
α2
的可能取值範圍:
L≤α2≤H
- 當
y1≠y2
時,
L=max(0,α2−α1),H=min(C,C+α2−α1)
;
- 當
y1=y2
時,
L=max(0,α1+α2−C),H=min(C,C+α1+α2)
。
所以求出了優化後的
α∗2
後,還需要經過一個範圍的約束:
αnew2=⎧⎩⎨⎪⎪H,α∗2>Hα∗2,L≤α∗2≤HL,α∗2<L
求解
α1
知道了
α2
求
α1
就很容易了:
由約束條件:
α1y1+α2y2=αnew1y1+αnew2y2=ζ
得到:
αnew1=α1+y1y2(α2−αnew2)
取臨界情況
前面推導的結果:
α∗2=α2+y2E1−E2η,η=(K11+K22−2K12)
大部分情況下,都有
η=(K11+K22−2K12)>0
,但是在不滿足這個條件時,
α∗2
需要取臨界值。
- η<0,當核函數K不滿足Mercer定理時,矩陣K非正定;
- η=0,樣本x1與x2輸入特徵相同;
也可以換個方式來理解:
原問題:
minα12[(ζ−α2y2)2k11+k22α22+2(ζ−α2y2)α2y2k12+2(ζ−α2y2)v1+2α2y2v2]−(ζ−α2y2)y1−α2+C
其一階偏導數爲:
∂Φ∂α2=α2(K11+K22−2K12)−K11ζy2+K12ζy2−y2v1+y2v2+y1y2−1
二階偏導數爲:
∂2Φ∂α22=η=(K11+K22−2K12)
這個
η
就是原問題的二階偏導數,根據函數的性質來看:
- 當
η<0
時,目標函數爲凸函數,沒有極小值,最小值會在邊界取得;
- 當
η=0
時,目標函數爲單調函數,很明顯,最小值或者最大值都會在邊界上取得。
所以,當
η≤0
時,把
α∗2=L
和
α∗2=H
分別代入
α1y1+α2y2=αnew1y1+αnew2y2=ζ
解出
α∗1=L1
和
α∗1=H1
,其中令
s=y1y2
:
L1=α1+s(α2−L)
H1=α1+s(α2−H)
代回到目標函數中可以求出對應的兩個可能值
ΨL
和
ΨH
,最後取兩者中更小的那個就是最小值了。
代入之前先看看目標函數:
Ψ=12[α21K11+α22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]−α1−α2
因爲
v1
和
v2
的存在,展開後還是有些不太好看的。
vi=∑mj=3yjαjkij
這東西不好化簡,所以使用
vi
的另一種表示形式:
vi=f(xi)−α1y1Ki1−α2y2Ki2−b
代入
Ψ
中:(注:
y21=y22=1
)
Ψ=12α21K11+12α22K22+α1α2y1y2K12+α1y1(f(x1)−α1y1K11−α2y2K12−b)+α2y2(f(x2)−α1y1K12−α2y2K22−b)−α1y21−α2y22
Ψ=12α21K11+12α22K22+α1α2y1y2K12+α1(y1f(x1)−α1K11−α2y1y2K12−y1b−y21)+α2(y2f(x2)−α1y1y2K12−α2K22−by2−y22)
下面令
Ψ=12α21K11+12α22K22+α1α2y1y2k12+α1f1+α2f2
,則:
f1=y1f(x1)−α1K11−α2y1y2K12−y1b−y21=y1(E1−b)−α1K11−α2y1y2K12
f2=y2f(x2)−α1y1y2K12−α2K22−by2−y22=y2(E2−b)−α1y1y2K12−α2K22
使用上面的這些式子,將
L1=α1+s(α2−L)
、
H1=α1+s(α2−H)
以及
s=y1y2
代入可以得到如下結果:
這裏是論文中的結果,我就偷懶不寫步驟了。前面推導的式子聯立就可以得到上面的6個式子。
計算
ω
和b
首先看
ω
,前面我們可以解出
α
,根據公式:
ω=∑mi=1αiyixi
就可以求出來
ω
。
因爲除了
α1
和
α2
之外的
αi
都被固定了,所以優化前後都會有如下關係:
ω=α1y1x1+α2y2x2+∑i=3mαiyixi
ωnew=αnew1y1x1+αnew2y2x2+∑i=3mαiyixi
兩式做差即可求出新的
ω
:
ωnew=ω+y1x1(αnew1−α1)+y2x2(αnew2−α2)
然後是
b
,我們沒有直接的公式來計算,只能通過KKT條件間接求出來。
(摘自Platt的論文)
這是原優化問題的KKT條件:
- 當
αi=0
時,分類是正確的;
- 當
0≤αi≤C
時,這時的樣本點是支持向量,處在邊界上;
- 當
αi=C
時,位於邊界之間。
參考上面的KKT條件進行分類討論:
如果
0<α1<C
,則
(x1,y1)
爲支持向量,滿足
yi(∑mi=1αiyiKi1+b1)=1
:
αnew1y1K11+αnew2y2K21+∑i=3mαiyiKi1+bnew1=y1
因爲:
y1−∑mi=3αiyiKi1=y1−f(x1)+α1y1K11+α2y2K21+b
所以:
bnew1=y1−f(x1)+α1y1K11+α2y2K21+b−αnew1y1K11−αnew2y2K21
bnew1=−E1−y1K11(αnew1−α1)−y2K21(αnew2−α2)+b
其中
α1,α2,b
爲舊的值,
αnew1,αnew2,bnew
爲優化後的值。
如果
0<α2<C
,則
(x2,y2)
爲支持向量,同理可以得到:
b