SVM的學習算法可以歸結爲凸二次規劃問題。這樣的凸二次規劃問題具有全局最優解,並且許多最優化算法可以用來求解,但是當訓練樣本容量很大時,這些算法往往變得非常低效,以致無法使用。論文《Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines》提出的SMO是針對SVM問題的Lagrange對偶問題開發的高效算法。論文對很多計算細節予以忽略,而網上很多文章的解讀要麼不詳細,要麼使用了另外一套符號體系,不方便理解。本文將使用原論文的符號體系進行詳細解讀。
1. 問題概述
支持向量機(SVM)的一大特點是最大化間距(max margin)。對於如上圖的二分類問題,雖然有很多線可以將左右兩部分分開,但是隻有中間的紅線效果是最好的,因爲它的可活動範圍是最大的,從直觀上來說,很好理解。
對於線性二分類問題,假設分類面爲
u=w⃗ ⋅x⃗ +b(1)
則margin爲
m=1∥w∥2(2)
根據max margin規則和約束條件,得到如下優化問題,我們要求的就是參數
w⃗ 和
b :
minw⃗ ,b12∥∥w⃗ ∥∥2subjecttoyi(w⃗ ⋅x⃗ i−b)≥1,∀i,(3)
對於正樣本,類標號
yi 爲+1,反之則爲-1。根據拉格朗日對偶,公式(3)可以轉換爲如下的二次規劃(QP)問題,其中
αi 爲拉格朗日乘子。
minα⃗ Ψ(α⃗ )=minα⃗ 12∑i=1N∑j=1Nyiyj(xi→,xj→)αiαj−∑i=1Nαi(4)
其中
N 爲訓練樣本的數量,上式需要滿足不等式約束:
αi⩾0,∀i(5)
還需要滿足等式約束:
∑i=1Nyiαi=0(6)
一旦求解出所有的拉格朗日乘子,則我們可以通過如下的公式得到分類面參數
w⃗ 和
b 。
w⃗ =∑i=1Nyiαix⃗ i,b=w⃗ ⋅x⃗ k−ykforsomeαk>0.(7)
當然並不是所有的數據都可以完美的線性可分,可能有少量數據就是混在對方陣營,這時可以通過引入鬆弛變量
ξi 得到軟間隔形式的SVM:
minw⃗ ,b,ξ⃗ 12∥∥w⃗ ∥∥2+C∑i=1Nξisubjecttoyi(w⃗ ⋅x⃗ i−b)≥1−ξi,∀i,(8)
其中的
ξi 爲鬆弛變量,能假裝把錯的樣本分對,
C 對max margin和max failures的trade off。對於這個新的優化問題,約束變成了一個box constraint:
0≤αi≤C,∀i(9)
而鬆弛變量
ξi 不再出現在對偶公式中了。
對於線性不可分的數據,可以用和函數
K 將其投影到高維空間,這樣就可分了,由此得到一般的分類面公式:
u=∑j=1NyjαjK(xj→,x⃗ )−b(10)
則最終需要求解的問題如下:
minα⃗ Ψ(α⃗ )=minα⃗ 12∑i=1N∑j=1NyiyjK(xi→,xj→)αiαj−∑i=1Nαi
0≤αi≤C,∀i(11)
∑i=1Nyiαi=0
在這個問題中,變量是拉格朗日乘子,一個變量
αi 對應一個樣本點
(xi,yi) ,變量的總數等於樣本容量
N 。
KKT條件(Karush-Kuhn-Tucker)是正定二次規劃問題有最優解的充分必要條件,其表述如下:
αi=0⇔yiui⩾1,
0<αi<C⇔yiui=1,(12.1)
αi=C⇔yiui≤1.
這裏記:輸入爲訓練樣本
x⃗ i 時,SVM的輸出爲
ui ,即:
ui=∑j=1NyjαjK(xj→,xi→)−b(12.2)
2. SMO算法概述
SMO算法是一種啓發式算法,其基本思路是:
如果所有變量的解都滿足此最優化問題的KKT條件,那麼這個最優化問題的解就得到了(因爲KKT條件是該最優化問題的充分必要條件)。否則選擇兩個變量,固定其他的變量,針對這兩個問題構建一個二次規劃問題。這個二次規劃問題的解應該更接近二次規劃問題的解(因爲這會使得原始二次規劃問題的目標函數值更小)。而且,這時子問題可以通過解析方法求解,這樣就大大提高了整個算法的計算速度。
每一次,子問題都有兩個變量,一個是違反KKT條件最嚴重的那一個,另一個由約束條件自動確定。如此,SMO算法將原問題不斷分解爲子問題並對子問題求解,進而得到原問題的最終解。
注意,每個子問題有兩個變量,而不能是1個變量,因爲當選擇一個變量時,由於約束條件,其他變量的值就固定了該變量的值也就固定了。所以子問題中同時更新兩個變量。
SMO算法包括兩個部分:
(1)求解兩個變量二次規劃問題的解析方法
(2)選擇變量的啓發式方法
3 兩個變量二次規劃問題的求解方法
不失一般性,假設選擇的兩個變量是α1 ,α2 ,其他αi 固定。爲了描述方便定義如下符號:
Kij=Kji=K(xi→,xj→)
ui=∑j=1NyjαjoldKji−bold(公式12.2)
vi=∑j=3NyjαjoldKij=ui+bold−y1α1oldK1i−y2α2oldK2i
那麼SMO的最優化問題的子問題可以寫成:
滿足約束條件:
α1y1+α2y2=−∑i=3Nαiyi=k
0≤αi≤Ci=1,2
3.1 約束條件
首先,我們分析下約束條件,然後求此約束條件下的極小。
約束條件使得目標函數在一條平行長度爲C的正方形的對角線的線段上的最優值。這使得兩個變量的最優化問題實質上是單變量的最優化問題,不妨考慮α2 的最優化問題。
假設初始可行解爲α1old 和α2old ,最優解爲α1new 和α2new ,並假設在沿着約束方向未經編輯時的α2 的最優解爲α2new,unc 。由於α2new 需要滿足不等式約束,所以最優值α2new 的取值範圍必須滿足條件:
L≤α2new≤H
當
y1≠y2 時,它們可以表示爲
α2=α1+k={k=α2old−α1oldC+k=C+α2old−α1old if α1=0 min value if α1=C max value
此時,
L=max(0,α2old−α1old),H=min(C,C+α2old−α1old)(13)
當
y1=y2 時,它們可以表示爲
α2=k−α1={k=α2old+α1oldk−C=α2old+α1old−C if α1=0 max value if α1=C min value
此時,
L=max(0,α2old+α1old−C),H=min(C,α2old+α1old)(14)
3.2 初步求解α2
在下面的公式兩側同時乘以y1
α1y1+α2y2=k
可得
α1+sα2=γ⇒α1=γ−sα2
這裏
s=y1y2 ,
γ=ky1 爲一常數。將上式代入目標函數,可得
Ψ(α2)=12K11(γ−sα2)2+12K22α22+sK12(γ−sα2)α2+y1(γ−sα2)v1−γ+sα2+y2α2v2−α2+Ψconstant
對目標函數求導,可得:
dΨdα2=−sK11(γ−sα2)+K22α2−K12α2+sK12(γ−sα2)−y2v1+s+y2v2−1=0
一般情況下,二次導數爲正,這時上式所得
α2 即爲所求。
此時,
α2(K11+K22−2K12)=s(K11−K12)γ+y2(v1−v2)+1−s
將
γ=α1+sα2 和
vi 代入上式,即可得:
α2(K11+K22−2K12)=α2old(K11+K22−2K12)+y2(u1−u2+y2−y1)
令:
Ei=ui−yi 表示誤差項(可以想象,即使分類正確,
ui 的值也可能很大),
η=K11+K22−2K12=∥∥Φ(xi)−Φ(xj)∥∥ ,其中
Φ 是原始空間向特徵空間的映射,這裏
η 可以看成是一個度量兩個樣本相似性的距離,換句話說,一旦選擇核函數則意味着你已經定義了輸入空間中元素的相似性。最後得到迭代式:
α2new=α2old+y2(E1−E2)η
3.3 限定α2 ,並求解α1
考慮不等式約束條件L≤α2new≤H ,整理得下式:
α2new,clipped=⎧⎩⎨Lα2newH if α2new⩽L if L<α2new<H if α2new>H
又因爲
α1old+sα2old=α1new+sα2new,clipped=γ ,則有
α1new=α1old+s(α2old−α2new,clipped)
。
3.4 更新閾值b
爲了使新得到的α1 和α2 乘子滿足KKT條件,則需要α1 或α2 在界內,並滿足條件yiui=1 。
假設α1new 在界內,則:
y1unew1=1⇒y1(αnew1y1K11+αnew,clipped2y2K21+∑j=3N(αjyjKj1)−bnew)=1
又因爲:
E1=u1−y1=αold1y1K11+αold2y2K21+∑j=3N(αjyjKj1)−bold−y1
所以
∑j=3N(αjyjKj1)=E1−αold1y1K11−αold2y2K21+bold+y1
將其代入上式,可得
y1(αnew1y1K11+αnew,clipped2y2K21+E1−αold1y1K11−αold2y2K21+bold+y1−bnew)=1
等式兩側同時乘以
y1 ,可得
bnew1=E1+y1(αnew1−αold1)K11+y2(αnew,clipped2−αold2)K12+bold
同理,假設
α2new,clipped 在界內,則:
bnew2=E2+y1(αnew1−αold1)K12+y2(αnew,clipped2−αold2)K22+bold