前三篇主要是介紹SVM的原理。最初SVM的原問題是凸二次優化問題,有現成的算法可以求解,費盡周折轉換到對偶問題,一是在對偶問題形勢下可以使用核函數,二是對偶問題我們可以高效求解。本篇主要介紹如何求解SVM。
SMO:Sequential Minimal Optimization
Coordinate Ascent(座標上升法)
回到我們的對偶問題:
上述問題僅僅是關於一系列 的優化問題,即:
考慮使用座標上升法解決該問題:
算法內層循環將 看做變量,其他的 看做常量進行優化。在二維情況下,函數等高線圖的優化路線如下:
可以看到,每一步優化中,都固定了一個變量,讓另一個變量取值使目標函數“最優”,交替更新兩個變量直到收斂或達到某種停止條件。然而由於如下限制,無法在對偶問題中使用座標上升法求解:
假如我們想固定其他變量,更新 ,由於對偶問題的約束,固定其他變量後 爲常量。
SMO Algorithm
只選取一個 更新是不行的,那麼考慮一次至少更新兩個變量。這便是SMO算法的動機由來,算法如下:
算法思想很簡潔,先按某種方式選定要更新的兩個變量 ,然後固定其它變量對 進行更新來優化 。
優化步驟
例如我們現在想優化 ,由約束可以得到:
又由對偶問題約束 可以得到可行解如下圖, 必須位於直線 被矩形區域 截斷的線段上:
由直線約束可以將 表示爲 的函數,即:
由此得到目標函數的表達式爲:
將目標函數展開,得到一個關於 的開口向下的二次函數,當不考慮矩形區域約束時可以直接求導,得到最優解 。然而實際情況中由於矩形約束, 通常有取值區間 ,考慮最優解和取值區間的關係,更新得到實際最優值:
當得到 後,可以依據直線約束更新 。
選擇步驟
選擇違反KKT條件最多的樣本對應的 作爲第一個變量,即對於每個訓練樣本,檢查是否滿足KKT條件(可參考SVM第2篇),選擇不滿足中程度最大者:
對於第二個變量,應該選擇一個使目標函數數值增長最快的變量,但由於比較各變量所對應的目標函數值增幅的複雜度過高,SMO採用啓發式規則,使選取的兩變量對應樣本之間間隔最大,直觀上看,這樣選取的兩個變量差異較大,相比於對兩個相似變量進行更新,差異更大的變量能對目標函數帶來更大的變化。
至此我們得到了SMO的完整算法。
四篇過後,SVM基本講述清楚。參考來源之前的總結博客有記述傳送門,同時還參考了國科大《模式識別與機器學習》091M4042H課程蘭豔豔老師slides。