在SVM的前三篇裏,我們優化的目標函數最終都是一個關於
α
向量的函數。而怎麼極小化這個函數,求出對應的
α
向量,進而求出分離超平面我們沒有講。本篇就對優化這個關於
α
向量的函數的SMO算法做一個總結。
回顧SVM優化目標函數
我們首先回顧下我們的優化目標函數:
minα12∑i=1m∑j=1mαiαjyiyjK(xi,xj)−∑i=1mαis.t.∑i=1mαiyi=00≤αi≤C
我們的解要滿足的KKT條件的對偶互補條件爲:
α∗i(yi(wTxi+b)−1)=0(1)
根據這個KKT條件的對偶互補條件,我們有:
α∗i=0⇒yi(w∗∙ϕ(xi)+b)−1)≥10<α∗i<C⇒yi(w∗∙ϕ(xi)+b)−1)=1α∗i=C⇒yi(w∗∙ϕ(xi)+b)−1)≤1(2)
由於
w∗=∑j=1mα∗jyjϕ(xj)
,我們令
g(x)=w∗∙ϕ(x)+b=∑j=1mα∗iyjK(x,xj)+b∗
,則有:
α∗i=0⇒yig(xi)≥10<α∗i<C⇒yig(xi)=1α∗i=C⇒yig(xi)≤1(3)
SMO算法的基本思想
上面這個優化式子比較複雜,裏面有m個變量組成的向量
α
需要在目標函數極小化的時候求出。直接優化時很難的。SMO算法則採用了一種啓發式的方法。它每次只優化兩個變量,將其他的變量都視爲常數。由於
∑i=1mαiyi=0
.假如將
α3,α4,...,αm
固定,那麼
α1,α2
之間的關係也確定了。這樣SMO算法將一個複雜的優化算法轉化爲一個比較簡單的兩變量優化問題。
爲了後面表示方便,我們定義
Kij=ϕ(xi)∙ϕ(xj)
由於
α3,α4,...,αm
都成了常量,所有的常量我們都從目標函數去除,這樣我們上一節的目標優化函數變成下式:
minα1,α212K11α21+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1∑i=3myiαiKi1+y2α2∑i=3myiαiKi2s.t.α1y1+α2y2=−∑i=3myiαi=常數ς0≤αi≤Ci=1,2(1)(2)(3)
SMO算法目標函數的優化
本部分的總體思路:首先將目標函數看作是一個關於
α1,α2
的二元二次函數
W(α1,α2)
,然後通過條件
α1y1+α2y2=ς
將目標函數轉化爲一個關於
α2
的一元二次函數
W(α2)
,我們的最終目標是求出
W(α2)
在參數
α2
可行域範圍內的函數最小值。
下文第一部分先求出
W(α2)
的極值點
αnew,unclipped2
。下文第二部分根據約束條件
(
α1y1+α2y2=ς,0≤αi≤Ci=1,2
)求出
α2
的可行域。下文第三部分,分類討論一元二次函數
W(α2)
的最優解
α∗2
在
α2
的可行域邊界取得還是在極值點取得。第四部分通過
α1,α2
的關係,由
α2
求出
α1
.
1. 不考慮約束條件(
α1y1+α2y2=ς,0≤αi≤Ci=1,2
),對目標函數求極值點
首先我們的目標函數是一個二元二次函數:
W(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1∑i=3myiαiKi1+y2α2∑i=3myiαiKi2=12K11α21+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2(4)(5)(6)
其中
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪vi=∑j=3myjαjKij=g(xi)−∑j=12yjajkij−b,i=1,2g(x)=w∙ϕ(x)+b=∑j=1mαiyjK(x,xj)+b(4)
由於
α1y1+α2y2=ς
,並且
y2i=1
,可以得到用
α2
表達
α1
的式子:
α1=y1(ς−α2y2)(7)
將上式帶入我們的目標優化函數,就可以消除
α1
,得到僅僅包含
α2
的式子爲:
W(α2)=12K11(ς−a2y2)2+12K22α22+y2K12(ς−a2y2)α2−(y1(ς−α2y2)+α2)+(ς−a2y2)v1+y2α2v2(8)(9)
顯然
W(α2)
是一個一元二次方程,最優解
α∗2
只能是約束條件(
0≤αi≤C
)規定的可行域的邊界值,或者是
W(α2)
的極值點。現在我們先對其求極值點,即對
α2
求導並令爲0得:
∂W(α2)∂α2=(K11+K22−2K12)α2−K11ςy2+K12ςy2+y1y2−1−v1y2+v2y2=0(10)(5)
這時候我們定義
Ei
表示預測值
g(xi)
與真實值
yi
之差:
Ei=g(xi)−yi(6)
這時我們記優化前的解爲
αold1,αold2
,優化後的解爲
αnew1,αnew2
,由約束條件
∑i=1myiαi=0
,有
αold1y1+αold2y2=αnew1y1+αnew1y2=ς
,即
αnew1y1+αnew1y2=ς(7)
進行下一步化簡,將式子(4)(6)(7)代入式子(5),此時求解出的
αnew2
未考慮約束條件(
0≤αi≤C
),先記爲
αnew,unclipped2
:
(K11+K22−2K12)αnew,unclipped2=(K11+K22−2K12)αold2+y2(E1−E2)(8)
我們終於得到了
αnew,unclipped2
的表達式:
αnew,unclipped2=αold2+y2(E1−E2)K11+K22−2K12(9)
2. 由約束條件(
α1y1+α2y2=ς,0≤αi≤Ci=1,2
)求出
α2
的可行域
上面求出的
αnew,unclipped2
沒考慮到的約束條件爲:
{0≤αi=1,2≤Cα1y1+α2y2=ς
在二維平面上直觀表達上述兩個約束條件 :
根據式子
α1y1+α2y2=ς
,和
y1,y2
只能取值
+1或−1
,共有四種情況:
(1)當
y1=1,y2=1
,此時的表達式爲
α1y1+α2y2=ς
,那麼對應上圖中的右邊情況。根據
ς
的不同取值,我們可以分爲下面幾種情況來求
α2
的可行域:
-
ς<0
,因爲
0≤αi≤C
,所以此時
α1y1+α2y2=ς
與方形區域一定沒有任何交集,所以此時
α2
的可行域爲空集.
-
ς=0
,此時
α1y1+α2y2=0
,此時與方形區域的交點就是(0,0),那麼可行域就是
α2=0
.
-
0≤ς≤C
時,此時對應上圖中右邊的靠下的那種直線的情況,所以根據直線和方形區域的相交情況,此時可以求出
α2
的可行區間爲
[0,ς]
,即
[0,α1+α2]
.
- 當
C≤ς≤2C
時,可以求出此時對應上圖右邊情況靠上的那種直線,所以此時可以求出的可行區間爲
[ς−C,C],即[α1+α2−C,C]
- 當
ς≥2C
時,可行域爲空寂,且這種情況也不會發生。
綜上所述,當
y1=1且y2=1
時,此時的
α2
可行域在存在的情況下(即不考慮
ς<0、ς≥2C
),其實可以這樣表示它的區間:
[max(0,α1+α2−C),min(C,α1+α2)]
(2)當
y1=−1且y2=−1
時,此時的表達式是
α1+α2=−ς
,那麼首先此時的
ς≤0
,此時的各種分類其情況和上面的(1)類似。
(3)當
y1=1且y2=−1
時,此時的表達式是
α1−α2=ς
,根據
ς
的不同取值,我們可以分爲下面幾種情況來求
α2
的可行域:
-
ς>C或者ς<−C
時,此時直線與方形區域沒有交點,所以此時
α2
可行域爲空集.
-
0<ς≤C
時,此時對應上面的左圖中的靠下的那種直線的情況,此時可以計算出
α2的可行域爲[0,C−α1+α2]
.
- 當
−C≤ς≤0
時,此時對應左圖中靠上的那種直線的情況,此時可計算出
alpha2的可行域爲[α2−α1,C]
綜上所述,
α2的可行域爲[max(0,α1−α2),min(C,C−α2+α2)]
(4)當
y1=−1且y2=1
時,情況和(3)類似。
我們設
α2
的可行域爲
α2∈[L,H]
,結合上述(1)~(4)種情況,我們得出不同情況下
α2
可行域的邊界值L、H:
-
當y1≠y2時,L=max(0,αold2−αold1);H=min(C,C+αold2−αold1)
-
當y1=y2時,L=max(0,αold1+αold2−C);H=min(C,αold2+αold1)
3. 對
αnew,unclipped2
進行修剪
好了,目前爲止我們手頭上有一元二次函數
W(α2)
的極值點
αnew,unclipped2
,和
α2
的可行域的邊界值L,H。
下文根據
α2
的可行域和一元二次函數
W(α2)
的開口方向,討論
W(α2)
在何處取得最小值,共分爲3種情況:
(1)無論一元二次函數
W(α2)
的開口向上還是向下,只要極值點不在可行域內,該函數的最小值就在可行域的邊界值取得,這種情況我們只需要比較
W(L)和W(H)
的大小,然後取小者就是函數的最小值。
(2)如果
W(α2)
的開口向上,且極值點在可行域內,則函數最小值爲極值點。
(3)如果
W(α2)
的開口向下,該函數的最小值就在可行域的邊界值取得,這種情況我們只需要比較
W(L)和W(H)
的大小,然後取小者就是函數的最小值。
綜合上述三種情況,就可以對
αnew,unclipped2
進行修剪了,最優解就可以記爲
αnew2
:
αnew2=⎧⎩⎨⎪⎪⎪⎪Hαnew,unclipped2Lαnew,unclipped2>HL≤αnew,unclipped2≤Hαnew,unclipped2<L
4. 通過
αnew2
求解
αnew1
由
αold1y1+αold2y2=αnew1y1+αnew2y2=ς
得:
αnew1=αold1+y1y2(αold2−αnew2)(11)
SMO算法兩個變量的選擇
1.第一個變量的選擇
第一個變量的選擇稱爲外循環,首先遍歷整個樣本集,選擇違反KKT條件的
αi
作爲第一個變量,接着依據相關規則選擇第二個變量(見下面分析),對這兩個變量採用上述方法進行優化。當遍歷完整個樣本集後,遍歷非邊界樣本集
(0<αi<C)
中違反KKT的
αi
作爲第一個變量,同樣依據相關規則選擇第二個變量,對此兩個變量進行優化。當遍歷完非邊界樣本集後,再次回到遍歷整個樣本集中尋找,即在整個樣本集與非邊界樣本集上來回切換,尋找違反KKT條件的
αi
作爲第一個變量。直到遍歷整個樣本集後,沒有違反KKT條件
αi
,然後退出。
邊界上的樣本對應的
αi=0
或者
αi=C
,在優化過程中很難變化。然而非邊界樣本
(0<αi<C)
會隨着對其他變量的優化會有大的變化。

2.第二個變量的選擇
SMO稱第二個變量的選擇過程爲內循環,假設在外循環中找個第一個變量記爲
α1
,第二個變量的選擇希望能使
α2
有較大的變化,由於
α1
是依賴於
|E1−E2|
,當
E1
爲正時,那麼選擇最小的
Ei
作爲
E2
。如果
E1
爲負,選擇最大
Ei
作爲
E2
,通常爲每個樣本的
Ei
保存在一個列表中,選擇最大的
|E1−E2|
來近似最大化步長。
有時按照上述的啓發式選擇第二個變量,不能夠使得函數值有足夠的下降,這時按下述步驟:
首先在非邊界集上選擇能夠使函數值足夠下降的樣本作爲第二個變量;
如果非邊界集上沒有,則在整個樣本集上選擇第二個變量;
如果整個樣本集依然不存在,則重新選擇第一個變量;
計算閾值
bnew
、差值
Ei
每完成對兩個變量的優化後,要對b的值進行更新,因爲b的值關係到預測值
g(x)
的計算,即關係到下次優化時
Ei
的計算。
求解
bnew
的4種情況
1. 如果
0<αnew1<C
,由KKT條件
y1(wTx1+b)=1
,且
y2i=1
,得到
∑i=1mαiyiKi1+b=yi
,所有有:
bnew1=y1−∑i=3mαiyiKi1−αnew1y1K11−αnew2y2K21(12)
將式子(6)代入上式子,得:
bnew1=−E1−y1K11(αnew1−αold1)−y2K21(αnew2−αold2)+bold(13)
2. 如果
0<αnew2<C
,則:
bnew2=−E2−y1K12(αnew1−αold1)−y2K22(αnew2−αold2)+bold(14)
3. 如果
α1,α2
同時滿足
0<αnewi<C
,則:
bnew1=bnew2(15)
4. 如果
α1,α2
同時不滿足
0<αnew1,2<C
,那麼
bnew1
和
bnew2
以及它們之間的數都是符合KKT條件的閾值,這時選擇它們的中點作爲
bnew
更新差值
Ei
根據式子(4),(6),得到:
Ei=g(xi)−yi=∑j=1mαiyjK(x,xj)+bnew−yi(16)
SMO算法總結
輸入是m個樣本
(x1,y1),(x2,y2),...,(xm,ym)
,其中
x
爲
n
維特徵向量。y爲二元輸出,值爲+1或-1。精度e.
輸出值是近似解,向量
α
.
1) 取初值
α0=0,k=0
,
α
的上標表示迭代輪數,
k
表示當前迭代爲第
k
輪.
2) 按照上文的方法依次選取兩個參數
αk1,αk2
,求出新的
αk+1,unclipped2
.
αk+1,unclipped2=αk2+y2(E1−E2)K11+K22−2K12
3)求出
α2
可行域的邊界值 L,H:
L,H={當y1≠y2時,L=max(0,αk2−αk1);H=min(C,C+αk2−αk1)當y1=y2時,L=max(0,αk1+αk2−C);H=min(C,αk2+αk1)
3)對
αk+1,unclipped2
進行修剪:
αk+12=⎧⎩⎨⎪⎪⎪⎪Hαk+1,unclipped2Lαk+1,unclipped2>HL≤αk+1,unclipped2≤Hαk+1,unclipped2<L
4)求出
αk+11
:
αk+11=αk1+y1y2(αk2−αk+12)(17)
5)按照上文的規則,求出
bk+1
,並更新
Ei
:
Ei=g(xi)−yi=∑j=1mαiyjK(x,xj)+bk+1