1. 程式人生 > >SMO算法(轉)

SMO算法(轉)

algo class %0 mage 一輪 獲得 中一 max 根據

作者:[已重置]
鏈接:https://www.zhihu.com/question/40546280/answer/88539689
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

SMO(Sequential Minimal Optimization)是針對求解SVM問題的Lagrange對偶問題,一個二次規劃式,開發的高效算法。傳統的二次規劃算法的計算開銷正比於訓練集的規模,而SMO基於問題本身的特性(KKT條件約束)對這個特殊的二次規劃問題的求解過程進行優化。對偶問題中我們最後求解的變量只有Lagrange乘子技術分享向量,這個算法的基本思想就是每次都只選取一對技術分享,固定技術分享向量其他維度的元素的值,然後進行優化,直至收斂。

SMO幹了什麽?
首先,整個對偶問題的二次規劃表達如下:
技術分享
SMO在整個二次規劃的過程中也沒幹別的,總共幹了兩件事:
  • 選取一對參數技術分享
  • 固定技術分享向量的其他參數,將技術分享代入上述表達式進行求最優解獲得更新後的技術分享

SMO不斷執行這兩個步驟直至收斂。

因為有約束技術分享存在,實際上技術分享技術分享的關系也可以確定。技術分享這兩個參數的和或者差是一個常數。
技術分享

所以雖然宣傳上說是選擇了一對技術分享,但還是選擇了其中一個,將另一個寫作關於它的表達式代入目標函數求解。

為什麽SMO跑的那麽快,比提出之前的算法不知道高到哪裏去了?
正如上面提到的,在固定其他參數以後,這就是一個單變量二次規劃問題,僅有的約束也是這個變量技術分享,顯然有閉式解。不必再調用數值優化算法。

KKT條件是對偶問題最優解的必要條件


技術分享

除了第一個非負約束以外,其他約束都是根據目標函數推導得到的最優解必須滿足的條件,如果違背了這些條件,那得到的解必然不是最優的,目標函數的值會減小。

所以在SMO叠代的兩個步驟中,只要技術分享中有一個違背了KKT條件,這一輪叠代完成後,目標函數的值必然會增大。Generally speaking,KKT條件違背的程度越大,叠代後的優化效果越明顯,增幅越大。

怎樣跑的更快?
和梯度下降類似,我們要找到使之優化程度最大的方向(變量)進行優化。所以SMO先選取違背KKT條件程度最大的變量,那麽第二個變量應該選擇使目標函數值增大最快的變量,但是這個變量怎麽找呢?比較各變量優化後對應的目標函數值的變化幅度?這個樣子是不行的,復雜度太高了。

SMO使用了一個啟發式的方法,當確定了第一個變量後,選擇使兩個變量對應樣本之間最大的變量作為第二個變量。直觀來說,更新兩個差別很大的變量,比起相似的變量,會帶給目標函數更大的變化。間隔的定義也可以借用偏差函數
技術分享
我們要找的也就是使對於技術分享來說使技術分享最大的技術分享

很慚愧,只做了一點微小的工作。

References
[1] Platt, John. "Sequential minimal optimization: A fast algorithm for training support vector machines." (1998).

SMO算法(轉)