支持向量機原理(四)SMO算法原理

           支持向量機原理(一) 線性支持向量機html

    支持向量機原理(二) 線性支持向量機的軟間隔最大化模型算法

    支持向量機原理(三)線性不可分支持向量機與核函數函數

    支持向量機原理(四)SMO算法原理post

    支持向量機原理(五)線性支持迴歸優化

 

  在SVM的前三篇裏,咱們優化的目標函數最終都是一個關於$\alpha$向量的函數。而怎麼極小化這個函數,求出對應的$\alpha$向量,進而求出分離超平面咱們沒有講。本篇就對優化這個關於$\alpha$向量的函數的SMO算法作一個總結。htm

1. 回顧SVM優化目標函數

    咱們首先回顧下咱們的優化目標函數:$$ \underbrace{ min }_{\alpha}  \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum\limits_{i=1}^{m}\alpha_i $$ $$ s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$0 \leq \alpha_i \leq C$$blog

    咱們的解要知足的KKT條件的對偶互補條件爲:$$\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1 + \xi_i^{*}) = 0$$內存

    根據這個KKT條件的對偶互補條件,咱們有:$$\alpha_{i}^{*} = 0 \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) \geq 1 $$ $$ 0 <\alpha_{i}^{*} < C  \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) = 1 $$ $$\alpha_{i}^{*}= C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) \leq 1$$get

     因爲$w^{*} = \sum\limits_{j=1}^{m}\alpha_j^{*}y_j\phi(x_j)$,咱們令$g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}$,則有: $$\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 $$ $$ 0 < \alpha_{i}^{*} < C  \Rightarrow y_ig(x_i)  = 1 $$ $$\alpha_{i}^{*}= C \Rightarrow y_ig(x_i)  \leq 1$$it

2. SMO算法的基本思想

    上面這個優化式子比較複雜,裏面有m個變量組成的向量$\alpha$須要在目標函數極小化的時候求出。直接優化時很難的。SMO算法則採用了一種啓發式的方法。它每次只優化兩個變量,將其餘的變量都視爲常數。因爲$\sum\limits_{i=1}^{m}\alpha_iy_i = 0$.假如將$\alpha_3, \alpha_4, ..., \alpha_m$ 固定,那麼$\alpha_1, \alpha_2$之間的關係也肯定了。這樣SMO算法將一個複雜的優化算法轉化爲一個比較簡單的兩變量優化問題。

    爲了後面表示方便,咱們定義$K_{ij} = \phi(x_i) \bullet \phi(x_j)$

    因爲$\alpha_3, \alpha_4, ..., \alpha_m$都成了常量,全部的常量咱們都從目標函數去除,這樣咱們上一節的目標優化函數變成下式:$$\;\underbrace{ min }_{\alpha_1, \alpha_1} \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2) +y_1\alpha_1\sum\limits_{i=3}^{m}y_i\alpha_iK_{i1} + y_2\alpha_2\sum\limits_{i=3}^{m}y_i\alpha_iK_{i2}$$ $$s.t. \;\;\alpha_1y_1 +  \alpha_2y_2 = -\sum\limits_{i=3}^{m}y_i\alpha_i = \varsigma $$ $$0 \leq \alpha_i \leq C \;\; i =1,2$$

3. SMO算法目標函數的優化

    爲了求解上面含有這兩個變量的目標優化問題,咱們首先分析約束條件,全部的$\alpha_1, \alpha_2$都要知足約束條件,而後在約束條件下求最小。

    根據上面的約束條件$\alpha_1y_1 +  \alpha_2y_2  = \varsigma\;\;0 \leq \alpha_i \leq C \;\; i =1,2$,又因爲$y_1,y_2$均只能取值1或者-1, 這樣$\alpha_1, \alpha_2$在[0,C]和[0,C]造成的盒子裏面,而且二者的關係直線的斜率只能爲1或者-1,也就是說$\alpha_1, \alpha_2$的關係直線平行於[0,C]和[0,C]造成的盒子的對角線,以下圖所示:

     因爲$\alpha_1, \alpha_2$的關係被限制在盒子裏的一條線段上,因此兩變量的優化問題實際上僅僅是一個變量的優化問題。不妨咱們假設最終是$\alpha_2$的優化問題。因爲咱們採用的是啓發式的迭代法,假設咱們上一輪迭代獲得的解是$\alpha_1^{old}, \alpha_2^{old}$,假設沿着約束方向$\alpha_2$未經剪輯的解是$\alpha_2^{new,unc}$.本輪迭代完成後的解爲$\alpha_1^{new}, \alpha_2^{new}$

    因爲$\alpha_2^{new}$必須知足上圖中的線段約束。假設L和H分別是上圖中$\alpha_2^{new}$所在的線段的邊界。那麼很顯然咱們有:$$L \leq \alpha_2^{new} \leq H $$

    而對於L和H,咱們也有限制條件若是是上面左圖中的狀況,則$$L = max(0, \alpha_2^{old}-\alpha_1^{old}) \;\;\;H = min(C, C+\alpha_2^{old}-\alpha_1^{old})$$

    若是是上面右圖中的狀況,咱們有:$$L = max(0, \alpha_2^{old}+\alpha_1^{old}-C) \;\;\; H = min(C, \alpha_2^{old}+\alpha_1^{old})$$

     也就是說,假如咱們經過求導獲得的$\alpha_2^{new,unc}$,則最終的$\alpha_2^{new}$應該爲:

$$\alpha_2^{new}=
\begin{cases}
H& { \alpha_2^{new,unc} > H}\\
\alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc} \leq H}\\
L& {\alpha_2^{new,unc} < L}
\end{cases}$$   

    那麼如何求出$\alpha_2^{new,unc}$呢?很簡單,咱們只須要將目標函數對$\alpha_2$求偏導數便可。

    首先咱們整理下咱們的目標函數。

    爲了簡化敘述,咱們令$$E_i = g(x_i)-y_i = \sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x_i, x_j)+ b - y_i$$,

    其中$g(x)$就是咱們在第一節裏面的提到的$$g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}$$

    咱們令$$v_i = \sum\limits_{j=3}^{m}y_j\alpha_jK(x_i,x_j) = g(x_i) -  \sum\limits_{j=1}^{2}y_j\alpha_jK(x_i,x_j) -b  $$

    這樣咱們的優化目標函數進一步簡化爲:$$W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2) +y_1\alpha_1v_1 +  y_2\alpha_2v_2$$

    因爲$\alpha_1y_1 +  \alpha_2y_2 =  \varsigma $,而且$y_i^2 = 1$,能夠獲得$\alpha_1用 \alpha_2$表達的式子爲:$$\alpha_1 = y_1(\varsigma  - \alpha_2y_2)$$

    將上式帶入咱們的目標優化函數,就能夠消除$\alpha_1$,獲得僅僅包含$\alpha_2$的式子。$$W(\alpha_2) = \frac{1}{2}K_{11}(\varsigma  - \alpha_2y_2)^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_2K_{12}(\varsigma - \alpha_2y_2) \alpha_2 - (\varsigma  - \alpha_2y_2)y_1 -  \alpha_2 +(\varsigma  - \alpha_2y_2)v_1 +  y_2\alpha_2v_2$$

    忙了半天,咱們終於能夠開始求$\alpha_2^{new,unc}$了,如今咱們開始經過求偏導數來獲得$\alpha_2^{new,unc}$。

$$\frac{\partial W}{\partial \alpha_2} = K_{11}\alpha_2 +  K_{22}\alpha_2 -2K_{12}\alpha_2 -  K_{11}\varsigma y_2 + K_{12}\varsigma y_2 +y_1y_2 -1 -v_1y_2 +y_2v_2 = 0$$

    整理上式有:$$(K_{11} +K_{22}-2K_{12})\alpha_2 = y_2(y_2-y_1 + \varsigma  K_{11} - \varsigma  K_{12} + v_1 - v_2)$$

$$ = y_2(y_2-y_1 + \varsigma  K_{11} - \varsigma  K_{12} + (g(x_1) -  \sum\limits_{j=1}^{2}y_j\alpha_jK_{1j} -b ) -(g(x_2) -  \sum\limits_{j=1}^{2}y_j\alpha_jK_{2j} -b))$$

    將$ \varsigma  = \alpha_1y_1 +  \alpha_2y_2 $帶入上式,咱們有:

$$(K_{11} +K_{22}-2K_{12})\alpha_2^{new,unc} = y_2((K_{11} +K_{22}-2K_{12})\alpha_2^{old}y_2 +y_2-y_1 +g(x_1) - g(x_2))$$

$$\;\;\;\; = (K_{11} +K_{22}-2K_{12}) \alpha_2^{old} + y_2(E_1-E_2)$$

    咱們終於獲得了$\alpha_2^{new,unc}$的表達式:$$\alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})}$$

    利用上面講到的$\alpha_2^{new,unc}$和$\alpha_2^{new}$的關係式,咱們就能夠獲得咱們新的$\alpha_2^{new}$了。利用$\alpha_2^{new}$和$\alpha_1^{new}$的線性關係,咱們也能夠獲得新的$\alpha_1^{new}$。

4. SMO算法兩個變量的選擇

    SMO算法須要選擇合適的兩個變量作迭代,其他的變量作常量來進行優化,那麼怎麼選擇這兩個變量呢?

4.1 第一個變量的選擇

    SMO算法稱選擇第一個變量爲外層循環,這個變量須要選擇在訓練集中違反KKT條件最嚴重的樣本點。對於每一個樣本點,要知足的KKT條件咱們在第一節已經講到了: $$\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 $$ $$ 0 < \alpha_{i}^{*} < C  \Rightarrow y_ig(x_i)  =1 $$ $$\alpha_{i}^{*}= C \Rightarrow y_ig(x_i)  \leq 1$$

    通常來講,咱們首先選擇違反$0 < \alpha_{i}^{*} < C  \Rightarrow y_ig(x_i)  =1 $這個條件的點。若是這些支持向量都知足KKT條件,再選擇違反$\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 $ 和 $\alpha_{i}^{*}= C \Rightarrow y_ig(x_i)  \leq 1$的點。

4.2 第二個變量的選擇

     SMO算法稱選擇第二一個變量爲內層循環,假設咱們在外層循環已經找到了$\alpha_1$, 第二個變量$\alpha_2$的選擇標準是讓$|E1-E2|$有足夠大的變化。因爲$\alpha_1$定了的時候,$E_1$也肯定了,因此要想$|E1-E2|$最大,只須要在$E_1$爲正時,選擇最小的$E_i$做爲$E_2$, 在$E_1$爲負時,選擇最大的$E_i$做爲$E_2$,能夠將全部的$E_i$保存下來加快迭代。

    若是內存循環找到的點不能讓目標函數有足夠的降低, 能夠採用遍歷支持向量點來作$\alpha_2$,直到目標函數有足夠的降低, 若是全部的支持向量作$\alpha_2$都不能讓目標函數有足夠的降低,能夠跳出循環,從新選擇$\alpha_1$ 

4.3 計算閾值b和差值$E_i$ 

    在每次完成兩個變量的優化以後,須要從新計算閾值b。當$0 < \alpha_{1}^{new} < C$時,咱們有 $$y_1 - \sum\limits_{i=1}^{m}\alpha_iy_iK_{i1} -b_1 = 0 $$

    因而新的$b_1^{new}$爲:$$b_1^{new} = y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} - \alpha_{1}^{new}y_1K_{11} - \alpha_{2}^{new}y_2K_{21} $$

    計算出$E_1$爲:$$E_1 = g(x_1) - y_1 = \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} + \alpha_{1}^{old}y_1K_{11} + \alpha_{2}^{old}y_2K_{21} + b^{old} -y_1$$

    能夠看到上兩式都有$y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1}$,所以能夠將$b_1^{new}$用$E_1$表示爲:$$b_1^{new} = -E_1 -y_1K_{11}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{21}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old}$$

    一樣的,若是$0 < \alpha_{2}^{new} < C$, 那麼有:$$b_2^{new} = -E_2 -y_1K_{12}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{22}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old}$$

    最終的$b^{new}$爲:$$b^{new} = \frac{b_1^{new} + b_2^{new}}{2}$$

    獲得了$b^{new}$咱們須要更新$E_i$:$$E_i = \sum\limits_{S}y_j\alpha_jK(x_i,x_j) + b^{new} -y_i $$

    其中,S是全部支持向量$x_j$的集合。

    好了,SMO算法基本講完了,咱們來概括下SMO算法。

5. SMO算法總結

    輸入是m個樣本${(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}$,其中x爲n維特徵向量。y爲二元輸出,值爲1,或者-1.精度e。

    輸出是近似解$\alpha$

    1)取初值$\alpha^{0} = 0, k =0$

    2)按照4.1節的方法選擇$\alpha_1^k$,接着按照4.2節的方法選擇$\alpha_2^k$,求出新的$\alpha_2^{new,unc}$。$$\alpha_2^{new,unc} = \alpha_2^{k} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})}$$

    3)按照下式求出$\alpha_2^{k+1}$

$$\alpha_2^{k+1}=
\begin{cases}
H& {L \leq \alpha_2^{new,unc} > H}\\
\alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc} \leq H}\\
L& {\alpha_2^{new,unc} < L}
\end{cases}$$

    4)利用$\alpha_2^{k+1}$和$\alpha_1^{k+1}$的關係求出$\alpha_1^{k+1}$

    5)按照4.3節的方法計算$b^{k+1}$和$E_i$

    6)在精度e範圍內檢查是否知足以下的終止條件:$$\sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$0 \leq \alpha_i \leq C, i =1,2...m$$ $$\alpha_{i}^{k+1} = 0 \Rightarrow y_ig(x_i) \geq 1 $$ $$ 0 <\alpha_{i}^{k+1} < C  \Rightarrow y_ig(x_i)  = 1 $$ $$\alpha_{i}^{k+1}= C \Rightarrow y_ig(x_i)  \leq 1$$

    7)若是知足則結束,返回$\alpha^{k+1}$,不然轉到步驟2)。

 

    SMO算法終於寫完了,這塊在之前學的時候是很是痛苦的,不過弄明白就豁然開朗了。但願你們也是同樣。寫完這一篇, SVM系列就只剩下支持向量迴歸了,勝利在望!

(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com) 

相關文章
相關標籤/搜索