序列最小最優化(Sequential Minimal Optimization, SMO)演算法的推導、理解
近期做了關於 SMO 演算法的彙報,對這個演算法理解了不少,也手推了一遍,記錄一下這個小小的勞動成果。
內容大多是彙報的 ppt 截圖,有需要的小夥伴可以去 下載,也可以給我留言,看到會回覆的。
文章目錄
前言
1998 年,John Platt 提出了序列最小最優化演算法 (SMO) 演算法用於訓練 SVM 分類器。SMO 演算法是一種啟發式演算法,其基本思路是:一次迭代只優化兩個變數而固定剩餘的變數。
SMO 要解如下凸二次規劃的對偶問題
其實就是訓練 SVM 分類器
演算法過程
精度
ϵ
\epsilon
ϵ指 KKT 條件的容錯率 toler。
部分 KKT 條件:
比如第二個條件,不要求嚴格等於 1 ,在容錯率範圍內都是可以接收的。原文內容如下:
SMO 演算法主要有兩個部分組成:
- 選取兩個 α \alpha α進行優化;
- 求解兩個 α \alpha α的解析解。
先說第二個內容
求解 α \alpha α的解析解
子問題
假設選擇的變數是
α
1
,
α
2
\alpha_1,\alpha_2
α1,α2,其餘變數
α
i
(
i
=
3
,
⋯
,
N
)
\alpha_i (i=3,\cdots,N)
首先分析約束條件,重新定義
α
2
\alpha_2
α2的取值範圍
取值範圍
根據約束條件得到 α 2 \alpha_2 α2的表示式,然後分情況討論,並根據 α 1 ∈ [ 0 , C ] \alpha_1 \in [0,C] α1∈[0,C]進行放縮
還可以將約束條件用圖形表示出來,也可以得到相同的結果
解析解
目標函式是含
α
1
n
e
w
,
α
2
n
e
w
\alpha_1^{new},\alpha_2^{new}
將已知的量用
ν
i
\nu_i
νi替換,其中
f
(
x
i
)
=
∑
j
=
1
N
y
j
α
j
n
e
w
K
i
j
+
b
f(x_{i})=\sum_{j=1}^{N}y_{j}\alpha_{j}^{new}K_{ij}+b
f(xi)=j=1∑NyjαjnewKij+b
下一步轉化成只含
α
2
n
e
w
\alpha_{2}^{new}
α2new的函式
對目標函式求導,並令其等於
0
0
0
定義一些等式,使表示式更簡潔
得到的極值點不一定在
α
2
n
e
w
\alpha_{2}^{new}
α2new的取值範圍裡,所以需要剪輯,則最終的
α
1
n
e
w
,
α
2
n
e
w
\alpha_{1}^{new},\alpha_{2}^{new}
α1new,α2new的表示式如下
更新 b , E i b,E_{i} b,Ei
根據 KKT 條件得到相應的等式,然後求解就可以了。
之前一直不明白當
α
i
\alpha_{i}
αi都在邊界上時
b
n
e
w
b^{new}
bnew的取值為什麼要取中點,試著推導,恍然大悟 。
可以看出,當四種
y
i
y_{i}
yi的情況放在一起時,
b
n
e
w
b^{new}
bnew只能取中點。
其他在邊界的情況也可以推匯出相同的結論,同時關於
b
n
e
w
b^{new}
bnew其他情況的取值也清晰了。
選取 α 1 , α 2 \alpha_{1},\alpha_{2} α1,α2
多次遍歷
α
i
∈
[
0
,
C
]
\alpha_{i}\in[0,C]
αi∈[0,C]的樣本點,個人的理解是因為:根據 KKT 條件,這時
這樣的樣本點很容易違背 KKT 條件,對它們進行判斷更新可以加快求解速度。
SMO 演算法的理論推導就到這裡了,最後貼一下李航老師《統計學習方法》裡的演算法流程。
演算法實現
關於演算法的實現,可以參考
支援向量機|SMO演算法實現
如有錯誤,請指正,謝謝
參考資料
[1] 李航. 統計學習方法[M]. 清華大學出版社, 2012.
[2]https://www.jianshu.com/p/436d429ce91b