SMO序列最小化優化演算法

Sequential minimal optimization

優化目標是找到一組最優的αi*。一旦求出這些αi*,就很容易計算出權重向量w*和b,並得到分隔超平面了。

1.座標下降法

求解下面問題這裡寫圖片描述

在這裡需要求解m個變數αi一般來說是通過梯度下降(這裡是求最大值,所以應該叫上升)等演算法每一次迭代對所有m個變數αi也就是α向量進行一次性優化。通過誤差每次迭代調整α向量中每個元素的值。而座標上升法(座標上升與座標下降可以看做是一對,座標上升是用來求解max最優化問題,座標下降用於求min最優化問題)的思想是每次迭代只調整一個變數αi的值,其他變數的值在這次迭代中固定不變。

核心思想還是迭代

這裡寫圖片描述

最裡面語句的意思是固定除αi之外的所有αj(i不等於j),這時W可看作只是關於αi的函式,那麼直接對αi求導優化即可。這裡我們進行最大化求導的順序i是從1到m,可以通過更改優化順序來使W能夠更快地增加並收斂。

2.座標下降法示例

尋找函式f(x,y)=x2+xy+y2的最小值處(x,y)

這裡寫圖片描述

(圖是函式投影到xoy平面的等高線圖,顏色越深值越小)

起始點A需要到達F,那最快的方法就是圖中黃色線的路徑,一次性就到達了,其實這個是牛頓優化法,但如果是高維的話,這個方法就不太高效了,如果是高維的情況,而且目標函式很複雜的話,再加上樣本集很多,那麼在梯度下降中,目標函式對所有αi求梯度或者在牛頓法中對矩陣求逆,都是很耗時的。

我們也可以按照紅色所指示的路徑來走。從A開始,先固定x,沿著y軸往讓f(x, y)值減小的方向走到B點,然後固定y,沿著x軸往讓f(x, y)值減小的方向走到C點,不斷迴圈,直到到達F*。

3.SMO演算法

一次迭代優化兩個α而不是一個

原因這個優化問題存在約束也就是這裡寫圖片描述

因此,我們需要一次選取兩個引數做優化,比如αi和αj,此時αi可以由αj和其他引數表示出來。這樣回代入W中,W就只是關於αj的函數了,這時候就可以只對αj進行優化了。在這裡就是對αj進行求導,令導數為0就可以解出這個時候最優的αj了。然後也可以得到αi。這就是一次的迭代過程,一次迭代只調整兩個拉格朗日乘子αi和αj。

演算法步驟:

重複下面過程直到收斂{

(1)選擇兩個拉格朗日乘子αi和αj;

(2)固定其他拉格朗日乘子αk(k不等於i和j),只對αi和αj優化w(α);

(3)根據優化後的αi和αj,更新截距b的值

}

每次迭代都要選擇最好的αi和αj,為了更快的收斂!那實踐中每次迭代到底要怎樣選αi和αj呢?採用啟發式選擇,主要思想是先選擇最有可能需要優化(也就是違反KKT條件最嚴重)的αi,再針對這樣的αi選擇最有可能取得較大修正步長的αj。

4.凸優化問題終止條件:

SMO演算法的基本思路是:如果說有變數的解都滿足此最優化問題的KKT條件,那麼這個最優化問題的解就得到了。因為KKT條件是該最優化問題的充分必要條件(證明請參考文獻)。所以我們可以監視原問題的KKT條件,所以所有的樣本都滿足KKT條件,那麼就表示迭代結束了。但是由於KKT條件本身是比較苛刻的,所以也需要設定一個容忍值,即所有樣本在容忍值範圍內滿足KKT條件則認為訓練可以結束;