在支持向量機模型的求解中,我們用到了SMO算法來求解向量α。那麼什麼是SMO算法?在講SMO算法之前,我們需要先了解以下座標上升法。
1、座標上升法
假設有優化問題:
算法的思想爲:每次只考慮一個變量進行優化,將其他變量固定。這時整個函數可以看作只關於該變量的函數,可以對其直接求導計算。然後繼續求其他分變量的值,整個內循環下來就得到了α的一組值,若該組值滿足條件,即爲我們求的值,否則繼續迭代計算直至收斂。一個示意圖如下:
如圖爲一個二次橢圓曲線的等高線,變量維數爲2,初始值在點(2,-2),可見其優化路徑爲折線式前進,因爲算法每次只在一個方向上對函數進行優化。
2、SMO算法
在講支持向量機求目標函數最優時,通過求解對偶問題轉換爲求解目標函數對α的極大值,如下:
可以看到優化問題與上面提到的座標上升法很相似,參考上面講到的座標上升法,我們也可以選擇向量α的一個變量,將其他變量固定進行優化。但與上面不同的是,該處優化問題包含了約束條件,
變量必須滿足等式約束,所以考慮每次選擇兩個變量進行優化。
不失一般性,將設選擇的兩個變量爲α_1,α_2,其他變量α_i (i=3,4,…,N)是固定的。
於是優化問題的子問題可以寫作:
則約束條件改寫爲:
直線被約束條件0≤α_i≤C約束在了一個C×C的正方形中。
從圖中可以看出,最優問題的子問題是求在正方形內的線段上的最優值。這使得兩個變量的最優化問題成爲了實質上的單變量的最優化問題,不妨設爲變量α_2的最優化問題,由不等式約束可得α_2的取值範圍:
L,H分別爲正方形區域內線段的端點值。
引入符號:
由條件:
將α_1代入最優子問題的目標函數,得到只包含α_2的函數,對α_2求偏導並令其爲0 ,可得的值,
加上取值範圍約束進而得到 的值,再而得到。α_2,α_1 的更新值如下:
若α值滿足停止條件,則α即爲我們求的近似解。否則重新掃描選擇兩個變量繼續迭代計算直至滿足停止條件。
3、變量的選擇
現在的問題就是如何選擇兩個變量構造最優子問題。SMO採用啓發式選擇方法選擇變量。所謂啓發式,即每次選擇拉格朗日乘子時,優先選擇前面樣本系數中滿足條件0<α_i < C的
α_i作優化,不考慮約束條件中相等的情況是因爲在界上的樣例對應的係數α_i 一般都不會改變。
通過啓發式搜索找到第一個變量,那麼第二個應該如何選取呢?因爲要考慮算法的收斂性,第二個變量顯然不是隨便選的。實際上由Osuna定理,只要選擇的兩個變量中有一個違背KKT條件,那麼目標函數在一步迭代後值就會減小,並且我們希望找到的α_2 在更新後能夠有足夠大的變化。
由上面 的公式可以看出,其值依賴於,當α_1 確定後E_1也就確定了,因此在給定第一個變量的初始值α_i=0後,對輸入樣例循環遍歷,找出違背KKT條件中使最大的樣例點的係數作爲α_2。
在特殊情況下,通過以上選擇的α_2 不能使目標函數有足夠的下降,那麼採用以下啓發式規則繼續選擇α_2:
遍歷在間隔邊界上的支持向量點,依次將其對應的變量作爲α_2 試用,直到目標函數有足夠的下降。若找不到合適的α_2,那麼再遍歷訓練數據集尋找
若仍未找到,則放棄第一個α_1,重新選擇α_1 。
在α_1,α_2 完成一次更新後,還需要對閾值b進行更新,b的更新可以通過KKT約束條件:
以上介紹了SMO算法的思路和大概流程,沒有對算法的推導及實現上的細節做詳細的介紹,大家有興趣想要深入瞭解SMO的話,可以看Andrew ng的支持向量機視頻和John C.Platt的《Sequential Minimal Optimization A Fast Algorithm for Trainning Support Vector Machines》。