1. 程式人生 > >SVM中的訓練演算法:序列最小最優化演算法SMO的讀書筆記

SVM中的訓練演算法:序列最小最優化演算法SMO的讀書筆記

最近重看李航的統計學習方法,看SVM這章,細細的對了一下其中將SMO的這一張,記得去年這會兒看這本書的SMO這章還有點懵懵懂懂,並在書上寫了自己一些疑問的筆記,今年重新看發現之前的疑問不再是疑問了,於是做個筆記總結一下,總結一下。 首先線性可分支援向量機的構建條件是需要線性可分的。與感知機不同的是,SVM還加了一個約束:最大間隔。因此與感知機只考慮誤分類點的損失函式不同,SVM是唯一存在的。而感知機是有多個解的。(下圖為感知機的形式)
線性SVM的原始問題描述如下:
該問題的對偶問題描述如下:
其中的alpha為對應樣本點的拉格朗日系數。 因為這裡我們關注的是SMO演算法的推導過程,因此對偶問題的描述的具體推導過程,可參考李航的《統計學習方法》。在此不展開細講。 看到這裡不知你是否跟我當初看書的時候有同樣的疑問,那就是上面這個描述中只有alpha,難道不能用再用一次拉格朗日方程,然後對alpha求導,這樣不是就可以直接用梯度下降法了嗎? 答案是不行的:因為上面的問題描述不符合拉格朗日對偶性中構建拉格朗日方程的條件,條件3是有上下限的(下圖為拉格朗日對偶性的原始問題)
那麼SVM本身能不能夠利用梯度下降法來求解呢? 答案是:可以的。 因為線性SVM本身是等價於合頁損失函式+最小化的二階範數的(如下圖)

式子中的+表示的是
順便說一下,上面損失函式的第一項意味著,當SVM的函式間隔>1 的時候,損失才為0,否則損失為 1-y(w*x+b),這意味著SVM對於正確劃分的要求更加高。 這裡再貼一下書中關於感知機,SVM和0-1損失的比較,來說明上面的SVM對於正確劃分的要求更加高這個問題。
再說回SVM是否可以用梯度下降法來求解呢?看之前的損失函式形式(下圖)
這裡面只有w,沒有約束,然後求解的是使該式子最小的w,那麼當然可以用梯度下降法了。 具體的求解方法,不在這裡詳細敘述有興趣的童鞋可以看一下,下面這篇blog,連線如下: 再回到正題SMO,在正式講解SMO之前,我覺得還需要介紹一下其他的關於SVM的求解優化演算法,這樣有助於理解SMO是怎樣來的,增加理解SMO這個演算法。 我這裡貼一段看的一篇關於SVM的論文綜述的一部分。(論文:支援向量機理論與演算法研究綜述,丁世飛,齊丙娟,譚紅豔) SVM訓練演算法有三大類:塊演算法(chunking algorithm);分解演算法(decomposition algorithm);增量演算法(incremental algorithm) 1.塊演算法: Chunking演算法[10]
的出發點是刪除矩陣中對應Lagrange乘數為零的行和列將不會影響最終的結 果。對於給定的樣本, Chunking演算法的目標是通過某種迭代方式逐步排除非支援向量,從而降低訓練過程對儲存器容量的要求。具體做法是,將一個大型QP問題分解為一系列較小規模的QP問題, 然後找到所有非零的Lagrange乘數並刪除。在演算法的每步中Chunking都解決一個QP問題,其樣本為上一步所剩的具有非零Lagrange乘數的樣本以及M個不滿足KKT條件的最差樣本。如果在某一步中,不滿足KKT條件的樣本數不足M個,則這些樣本全部加入到新的QP問題中。每個QP子問題都採用上一個QP子問題的結果作為初始值。在演算法進行到最後一步時,所有非零Lagrange乘數都被找到,從而解決了初始的大型QP問題。Chunking演算法將矩陣規模從訓練樣本數的平方減少到具有非零Lagrange乘數的樣本數的平方,在很大程度上降低了訓練過程對儲存容量的要求。Chunking演算法能夠大大提高訓練速度,尤其是當支援向量的數目遠遠小於訓練樣本的數目時。然而,如果支援向量個數比較多,隨著演算法迭代次數的增多,所選的塊也會越來越大,演算法的訓練速度依舊會變得十分緩慢。 2.分解演算法(decomposition algorithm) 分解演算法最早在文獻[11]中提出, 是目前有效解決大規模問題的主要方法。分解演算法將二次規劃問題分解成一系列規模較小的二次規劃子問題,進行迭代求解。在每次迭代中,選取拉格朗日乘子分量的一個子集做為工作集,利用傳統優化演算法求解一個二次規劃的子問題。以分類SVM為例,分解演算法的主要思想是將訓練樣本分成工作集B和非工作集N,工作集B中的樣本個數為 q , q 遠小於訓練樣本總數。每次只針對工作集B中的樣本進行訓練,而固定N中的訓練樣本。該演算法的關鍵在於選擇一種最優工作集選擇演算法,而在工作集的選取中採用了隨機的方法,因此限制了演算法的收斂速度。文獻[12]在分解演算法的基礎上對工作集的選擇做了重要改進。採用類似可行方向法的策略確定工作集B。如果存在不滿足KTT條件的樣本,利用最速下降法,在最速下降方向中存在 q 個樣本,然後以這 q 個樣本構成工作集, 在該工作集上解決QP問題,直到所有樣本滿足KTT條件。如此改進提高了分解演算法的收斂速度,並且實現了SVMlight
演算法。文 獻 [13] 提 出 的 序 列 最 小 優 化 (sequential minimal optimization, SMO)演算法是分解演算法的一個特例,工作集中只有2個樣本,其優點是針對2個樣本的二次規劃問題可以有解析解的形式,從而避免多樣本情況下的數值解不穩定及耗時問題,且不需要大的矩陣儲存空間,特別適合稀疏樣本。工作集的選擇不是傳統的最陡下降法,而是啟發式。通過兩個巢狀的迴圈尋找待優化的樣本,然後在內環中選擇另一個樣本,完成一次優化,再迴圈,進行下一次優化,直到全部樣本都滿足最優條件。 SMO演算法主要耗時在最優條件的判斷上,所以應尋找最合理即計算代價最低的最優條件判別式。SMO演算法提出後,許多學者對其進行了有效的改進。文獻[14]提出了在內迴圈中每次優化3個變數,因為3個變數的優化問題同樣可以解析求解, 實驗表明該演算法比SMO的訓練時間更短。文獻[15-16]在迭代過程中的判優條件和迴圈策略上做了一定的修改,加快了演算法的速度。 3.增量演算法(incremental algorithm) 增量學習是機器學習系統在處理新增樣本時,能夠只對原學習結果中與新樣本有關的部分進行增加修改或刪除操作,與之無關的部分則不被觸及。增量訓練演算法的一個突出特點是支援向量機的學習不是一次離線進行的,而是一個數據逐一加入反覆優化的過程。文獻[17]最早提出了SVM增量訓練演算法,每次只選一小批常規二次演算法能處理的資料作為增量,保留原樣本中的支援向量和新增樣本混合訓練,直到訓練樣本用完。文獻[18]提出了增量訓練的精確解 , 即 增 加 一 個 訓 練 樣 本 或 減 少 一 個 樣 本 對Lagrange係數和支援向量的影響。文獻[19]提出了另一種增量式學習方法,其思想是基於高斯核的區域性特性,只更新對學習機器輸出影響最大的Lagrange係數,以減少計算複雜度。文獻[20]提出了一種“快速增量學習演算法”, 該演算法依據邊界向量不一定是支援向量,但支援向量一定是邊界向量的原理,首先選擇那些可能成為支援向量的邊界向量,進行SVM的增量學習,找出支援向量,最終求出最優分類面,提高訓練速度。文獻[21]提出了基於中心距離比值的增量運動向量機,利用中心距離比值,在保證訓練和測試準確率沒有改變的情況下,提高收斂速度。文獻[22]提出了基於殼向量的線性SVM增量學習演算法,通過初始樣本集求得殼向量,進行SVM訓練,得到支援向量集降低二次規劃過程的複雜度,提高整個演算法的訓練速度和分類精度。 其中統計學習方法中講到的的SMO演算法是屬於分解演算法。 下面來講解什麼是SMO演算法,書上是這樣說的:
這裡需要需要注意的是:
具體來說:

基本就是上面式子的展開,沒什麼東西,注意這裡Kij = k(xi,xj)是核函式,因此kij =kji,這是核函式的定義來的。
看到這裡不知道大家是不是跟我當初第一次看一樣,有點懵為什麼y1!=y2 => alpha1-alpha2=k;y1=y2 => alpha1 + alpha2 = k; 因為對於二分類問題來說(y 為 +1, -1),y1 != y2 那麼就是 y1/y2 = -1 ,當y1 = y2 那麼 y1/y2 = 1。所以才有了上面的圖中的式子。
對於這裡的L,H 的確定,不知大家有沒有想清楚,首先L,H是alpha2的上下界,因此如下圖所示。
那麼對於y1 != y2 則 alpha2 = alpha1 - k; k = alpha1 - alpha2 y1 = y2 則 alpha 2 = k - alpha1; k = alpha1 + alpha2 帶入對應的極值點 alpha1 = 0 或C的時候,就得到了,上面的L,H 上下界的關係了。

這個定理李航書上幾乎手把手的教你證明了,感覺大家可以跟著書上推一遍,應該就比較能理解整個過程了。這裡就不貼上過來,因為書確實將的比較細緻了。

不知道你是不是跟我一樣比較疑惑,什麼叫KKT違反最嚴重的點?我想應該是該樣本點帶入yi*g(xi)後與1的差最大的點吧。
這裡其實就是外層alpha1定了,那麼內層alpha2應該也就定了的意思。只是有些特殊情況下目標函式不能產生足夠的下降,所以才會啟發式的選擇alpha2,直到擁有足夠的下降。如果一直找不到就更換外層迴圈的alpha1,這也是為什麼這個方法稱之為啟發式的演算法的原因:有規則,但也不完全遵從規則。


我們可以看到,在更細Ei 的時候,我們只需要更行對應的支援向量即可。 最後:
參考文獻: 《統計學習方法》李航 [10] BOSER B E, GUYON I M, VAPNIK V N. A training algorithm for optimal margin classifiers[C]//Proceedings of The Fifth Annual Workshop on Computational Learning Theory. New York: ACM Press, 1992: 144-152. [11] OSUNA E, FRENUD R, GIROSI F. An improved training algorithm for support vector machines[C] Proceedings of IEEE Workshop on Neural Networks for Signal Processing.New York, USA: [s.n.], 1997: 276-285. [12] JOACHIMS T. Making large-scale support vector machine learning practical[C]//Advances in Kernel Methods:Support Vector Learning. Cambridge, MA: The MIT Press,1998. [13] PLATT J. Fast training of support vector machines using sequential minimal optimization[C] dvances in Kernel Methods: Support Vector Learning. Cambridge, MA: The MIT Press, 1998. [14] DAI Liu-ling, HUANG He-yan, CHEN Zhao-xiong.Ternary sequential analytic optimization algorithm for SVM classifier design[J]. Asian Journal of Information Technology, 2005, 4(3): 2-8. [15] KEERTHI S S, SHEVADE S K, BHATTAEHARYYA C. Improvements to platt's SMO algorithm for SVM classifier design[J]. Neural Computation, 2001, 13(3): 637- 649. [16] PLATT J. Using analytic QP and sparseness to speed training support vector machines[C] Advances in Neural Information Processing Systems. [S.l]: MIT Press, 1999,557-563. [17] SYED N, LIU H, SUNG K. Incremental learning with support vector machines[C] International Joint Conference on Artificial Intelligence. Sweden: Morgan kaufmann publishers, 1999: 352-356. [18] GAUWENBERGHS G, POGGIO T. Incremental and decremental support vector machine[J]. Machine Learning.2001, 44 (13): 409- 415. [19] RALAIVOLA L, FLORENCE D’ALCHÉ-BUC.Incremental support vector machine learning: a local approach[C] Proceedings of International Conference on Neural Networks. Vienna, Austria: [s.n.], 2001: 322-330. [20] 孔銳, 張冰. 一種快速支援向量機增量學習演算法[J]. 控制與決策, 2005, 20(1): 1129- 1132. KONG Rui, ZHANG Bing. A fast incremental learning algorithm for support vector machine[J]. Control And Decision, 2005, 20(1): 1129- 1132. [21] 孔波, 劉小茂, 張鈞. 基於中心距離比值的增量支援向量機[J]. 計算機應用, 2006, 26(6): 1434-1436.KONG Bo, LIU Xiao-mao, ZHANG Jun. Incremental support vector machine based on center distance ratio[J].Journal of Computer Applications, 2006, 26(6): 1434-1436. [22] 李東暉, 杜樹新, 吳鐵軍. 基於殼向量的線性支援向量機快速增量學習演算法[J]. 浙江大學學報, 2006, 40(2):202- 215.