此次必定要弄懂-SVM-3-Hard Margin SVM的對偶問題的求解(SMO算法)


前面咱們針對Hard Margin SVM推導了他的原問題:
min ω ω 2 2 \min \limits_{\bold{\omega}}\frac{||\omega||^2}{2} s . t . s.t. y ( i ) ( ω T x ( i ) + b ) 1 i=1,2,...m y^{(i)}(\bold{\omega}^T\bold{x^{(i)}}+b)\geqslant1 \quad\text{i=1,2,...m}


對應的對偶問題:
min α 1 2 i = 1 m j = 1 m α i α j y i y j x ( i ) x ( j ) i = 1 m α i \min\limits_{\alpha} \frac{1}{2}\sum\limits_{i=1}^m\sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)}-\sum\limits_{i=1}^m\alpha_i

s . t . s.t.
α i 0 i = 1 , 2 , . . . , m \alpha_i\geqslant0\quad i=1,2,...,m i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0 html

以及決策邊界中未知量w的計算方法:
w = i = 1 m α i y ( i ) x ( i ) w=\sum\limits_{i=1}^m\alpha_iy^{(i)}x^{(i)} python

那決策邊界中的未知量b如何計算呢?就要用了KKT條件,同時用於求解對偶問題的SMO算法也要應用到KKT條件,因此這一次的內容從KKT條件開始。web

3-1 KKT條件

咱們說廣義拉格朗日乘子函數的構造是從本來只能解決帶等式約束的拉格朗日乘數法推廣而來,因此咱們先從最原始的拉格朗日乘數法的求解開始過程開始。算法

3-1-1 從拉格朗日乘數法的求解過程提及

拉格朗日乘數法是求解帶有等式約束的最優化問題app

min x f ( x ) \min\limits_{x}f(x)
h i ( x ) = 0 , i = 1 , 2 , . . . , p h_i(x)=0,\quad i=1,2,...,p svg

對應的求解方法就是構造拉格朗日乘子函數
L ( x , λ ) = f ( x ) + i = 1 p λ i h i ( x ) L(x,\lambda)=f(x)+\sum\limits_{i=1}^p\lambda_ih_i(x) 函數

接着對原始的優化變量以及乘子變量求導,並令導數爲0,即:
{ x f + i = 1 p λ i x h i ( x ) = 0 h i ( x ) = 0 , i = 1 , 2 , . . . , p \begin{cases} \nabla_xf+\sum\limits_{i=1}^p\lambda_i\nabla_x h_i(x)=0\\ h_i(x)=0,\quad i =1,2,...,p \end{cases} 優化

解這個方程組就能夠找到極值點,但目前只是把疑似極值點求出來了,至因而不是極值點,是極大仍是極小點,還須要進一步斷定。spa

因此上面的方程組只是取得極值的必要條件,而不是充分條件。orm

3-1-2 推廣出KKT條件

針對既帶有等式約束和不等式約束的優化問題,咱們能夠構造廣義拉格朗日函數

min x f ( x ) \min\limits_xf(x)
g i ( x ) 0 , i = 1 , 2 , . . . q g_i(x)\leqslant0,\quad i=1,2,...q
h i ( x ) = 0 , i = 1 , 2 , . . . p h_i(x)=0,\quad i=1,2,...p

構造拉格朗日乘子函數
L ( x , λ , μ ) = f ( x ) + i = 1 p λ i h i ( x ) + j = 1 q μ j g j ( x ) L(x,\lambda,\mu)=f(x)+\sum\limits_{i=1}^p\lambda_ih_i(x)+\sum\limits_{j=1}^q\mu_jg_j(x)

設極值點爲 x x^*
在極值點出必需要知足:

1.原問題的約束條件 g i ( x ) 0 , i = 1 , 2 , . . . q g_i(x^*)\leqslant0,\quad i=1,2,...q
h i ( x ) = 0 , i = 1 , 2 , . . . p h_i(x^*)=0,\quad i=1,2,...p
2.對偶問題的約束條件 μ i 0 , i = 1 , 2 , . . . q \mu_i\geqslant0,\quad i=1,2,...q
3.鬆弛互補條件 μ i g i ( x ) = 0 , i = 1 , 2 , . . . q \mu_ig_i(x^*)=0,\quad i=1,2,...q
4.X同時是拉格朗日函數的極小點
x L ( x , λ , μ ) = 0 \nabla_xL(x^*,\lambda,\mu)=0
x f ( x ) + i = 1 p λ i x h i ( x ) + j = 1 q μ j x g j ( x ) = 0 \nabla_xf(x^*)+\sum\limits_{i=1}^p\lambda_i\nabla_xh_i(x^*)+\sum\limits_{j=1}^q\mu_j\nabla_xg_j(x^*)=0

再次詳細說明下其中的鬆弛互補條件:
根據 μ i g i ( x ) = 0 , i = 1 , 2 , . . . q \mu_ig_i(x^*)=0,\quad i=1,2,...q
咱們會發現
μ > 0 \mu>0 時, g i ( x ) = 0 g_i(x^*)=0 。說明極值點在邊界處取得。
μ = 0 \mu=0 時, g i ( x ) 0 g_i(x^*)\leqslant0 。說明這個不等式約束對函數沒有影響。

以上四條就是KKT條件,它是對原問題最優解的約束,是最優解的必要條件。
可是若是原問題和對偶問題存在強對偶問題,則KKT條件就是取得極值的充要條件。

而咱們的支持向量機的原問題不論是線性可分的仍是不可分,即便加上後面的核函數,都是強對偶問題。使得咱們可使用KKT條件,獲得極值點的一些特徵。

3-1-3 KKT條件用於原問題

原問題:
min ω ω 2 2 \min \limits_{\bold{\omega}}\frac{||\omega||^2}{2} s . t . s.t. y ( i ) ( ω T x ( i ) + b ) 1 i=1,2,...m y^{(i)}(\bold{\omega}^T\bold{x^{(i)}}+b)\geqslant1 \quad\text{i=1,2,...m}

根據KKT條件中的鬆弛互補條件(對於不等式約束,乘子變量*函數值=0)
α i ( y i ( w T x ( i ) + b ) 1 ) = 0 , i = 1 , 2 , . . . m \alpha_i\Big(y_i(w^Tx^{(i)}+b)-1\Big)=0,\quad i=1,2,...m

咱們仔細分析下鬆弛互補條件:
α i > 0 \alpha_i>0 時, y i ( w T x ( i ) + b ) = 1 y_i(w^Tx^{(i)}+b)=1 —>支撐向量
α i = 0 \alpha_i=0 時, y i ( w T x ( i ) + b ) 1 y_i(w^Tx^{(i)}+b)\geqslant1 —>自由變量,對分類超平面不起做用

3-1-4 KKT條件的做用:

  1. SMO算法選擇優化變量
    SMO算法是用於求解以後對偶問題的算法,它是一個迭代算法,每次僅選取兩個乘子變量進行優化。KKT條件能夠幫助咱們尋找出須要優化的乘子變量。
  2. 迭代終止的斷定規則
    由於對於支持向量機來講KKT條件是極值點的充分必要條件,因此若是在迭代過程當中發現待求點已經知足KKT條件了,那咱們就把極值點解出來了,無須繼續迭代。

3-1-5 決策邊界中b的計算:

咱們經過將原問題轉化爲拉格朗日對偶問題,使得最優化的變量從本來的w,b轉換爲拉格朗日乘子變量 α \alpha

若是咱們能夠求得使得對偶問題最優的 α \alpha 後。則決策邊界中的w能夠經過 w = i = 1 m α i y i x ( i ) w=\sum\limits_{i=1}^m\alpha_iy_ix^{(i)} 求得

而決策邊界中b經過鬆弛互補條件求得。
前面說到,對於最優勢來講,當 α i > 0 \alpha_i>0 時, y i ( w T x ( i ) + b ) = 1 y_i(w^Tx^{(i)}+b)=1
因此咱們只須要到 α i > 0 \alpha_i>0 對應的樣本,求得b。

理論上來講,任意符合 α i > 0 \alpha_i>0 的樣本,均可以用來計算b的值,但因爲計算有偏差,通常爲了減少偏差,會用全部知足 α i > 0 \alpha_i>0 的樣本計算b,再取均值。

3-2 SMO算法

3-2-1 咱們如今面臨的棘手問題

前面講到了對偶問題,讓咱們再看下推導獲得的對偶問題

min α 1 2 i = 1 m j = 1 m α i α j y i y j x ( i ) x ( j ) i = 1 m α i \min\limits_{\alpha} \frac{1}{2}\sum\limits_{i=1}^m\sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)}-\sum\limits_{i=1}^m\alpha_i

s . t . s.t.
α i 0 i = 1 , 2 , . . . , m \alpha_i\geqslant0\quad i=1,2,...,m i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0

爲了方便以後進一步的推導,咱們將對偶問題寫成向量化的形式

min α 1 2 α T Q α e T α \min\limits_{\alpha} \frac{1}{2}\alpha^TQ\alpha-e^T\alpha

s . t . s.t.
y T α = 0 y^T\alpha=0 α i 0 , i = 1 , 2 , . . . , m \alpha_i\geqslant0,\quad i=1,2,...,m

其中
矩陣 Q i j = y i y j x ( i ) x ( j ) Q_{ij}=y_iy_jx^{(i)}\cdot x^{(j)}
向量 e T = [ 1 , 1 , . . . , 1 ] e^T=[1,1,...,1]

關於從 j = 1 m α i α j y i y j x ( i ) x ( j ) \sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)} α T Q α \alpha^TQ\alpha
應用了二次型展開。

這部分我不是熟悉,只依稀記得一個例子
x 2 + y 2 + z 2 = [ x y z ] [ 1 0 0 0 1 0 0 0 1 ] [ x y z ] x^2+y^2+z^2=\begin{bmatrix} x &y&z \end{bmatrix}\begin{bmatrix} 1 & 0 &0\\ 0 & 1&0\\ 0 & 0 &1 \end{bmatrix}\begin{bmatrix} x\\ y\\ z \end{bmatrix}
中間的矩陣對應的是本來的係數,因此Q本質上就是 α i α j \alpha_i\alpha_j 的係數矩陣

這是一個大規模的二次函數的最優化問題,因爲自己是凸優化問題,因此一些經典的最優化算法(如牛頓法,梯度降低法)能夠收斂到極值點處。

但棘手的是還存在着等式約束和不等式約束,因此須要更好的求解算法,那就是SMO算法(序列最小最優化算法)

從SVM提出,到SMO算法提出以前,SVM並無普遍使用就是由於這個對偶問題的求解很是麻煩。

3-2-2 破解對偶問題的神器SMO算法

SMO算法(Sequential minimal optimization)序列最小最優算法的核心思想是分治法(把一個大問題拆解成不少子問題來求解,而後把解合併起來,造成大問題的解)

SMO算法的巧妙之處在於每次選取兩個變量進行優化。爲何不僅選出一個變量進行優化呢?

由於咱們有一個等式約束 i = 1 m α i y i = 0 \sum\limits_{i=1}^m\alpha_iy_i=0 ,若是隻有一個 α \alpha 變化的話,就會破壞原來的等式約束。

所以只調整一個變量是不行的,最少要調整2個變量。

根據這個想法,就能夠把原來的m元2次問題轉化成2元2次問題。

而對於2元2次函數的極值問題的求解就是初中內容了,能夠經過等式約束,消掉一個變量,變成一元二次函數求極值的問題。

一元二次函數就是一個拋物線,但由於有 α 0 \alpha\geqslant0 的限定條件,因此咱們須要根據這個狀況來進行極值的討論。

3-2-3 SMO算法的理論推導

3-2-3-1 定義一些變量

以後原來代換的變量也寫在這邊,方便查看

定義矩陣Q Q i j = y i y j X i T X j Q_{ij}=y_iy_jX_i^TX_j
定義 u i u_i u i = j = 1 m y j α j X j X i + b u_i=\sum\limits_{j=1}^my_j\alpha_jX_j\cdot X_i+b
u i u_i 至關於把第i個樣本帶到咱們的預測函數中
定義 K i j K_{ij} K i j = X i T X j K_{ij}=X_i^{T}X_j
定義s s = y 1 y 2 s=y_1y_2
定義 v i v_i v i = k = 1 , k = ̸ i , k = ̸ j m y k α k K i k v_i=\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kK_{ik}
定義 ξ \xi ξ = y i α i + y j α j = k = 1 , k = ̸ i , k = ̸ j m y k α k \xi=y_i\alpha_i+y_j\alpha_j = -\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_k
定義 w w w = ξ y i w=\xi y_i
定義 η \eta η = K i i + K j j 2 K i j \eta=K_{ii}+K_{jj}-2K_{ij}
定義 E i E_i E i = u i y i E_i=u_i-y_i

3-2-3-2 KKT條件的做用

再回憶KKT條件:
{ α i > 0 y i ( w T x ( i ) + b ) = 1 α i = 0 y i ( w T x ( i ) + b ) 1 \begin{cases} \alpha_i>0 & y_i(w^Tx^{(i)}+b)=1\\ \alpha_i=0 & y_i(w^Tx^{(i)}+b)\geqslant1 \end{cases}

以前講到,KKT條件用於選擇優化變量,斷定迭代是否終止

  1. 選擇優化變量:
    KKT條件幫助咱們選擇每次哪兩個變量來優化,怎麼挑呢?只要這個變量違反KKT條件,咱們就把它挑出來。
    因此若是不知足kkt條件,就必定不是極值點,因此咱們要把它挑出來,調整 α \alpha 使得知足KKT條件

  2. 斷定迭代的依據:
    若是alphai都知足,說明找到了極值點。

因此大致上SMO算法的流程圖爲:
在這裏插入圖片描述
根據SMO算法的流程圖,能夠看出咱們須要解決的幾個小問題,分別是如何初始化,如何選出優化變量,如何優化選出的變量。先就其中最繁瑣的如何優化選出的變量提及。

3-2-3-3 子問題的推導->如何優化選出的變量

3-2-3-3-1 轉化爲二元二次函數問題

假如咱們已經經過KKT條件,從m個 α \alpha 中已經選出了須要優化的2個變量 α i , α j \alpha_i,\alpha_j

這時對於對偶問題 f ( α ) = 1 2 i = 1 m j = 1 m α i α j y i y j x ( i ) x ( j ) i = 1 m α i f(\alpha)=\frac{1}{2}\sum\limits_{i=1}^m\sum\limits_{j=1}^m\alpha_i\alpha_jy_iy_jx^{(i)}\cdot x^{(j)}-\sum\limits_{i=1}^m\alpha_i 來講,只有 α i \alpha_i α j \alpha_j 是變量,其餘的都是常量,這時咱們的目標函數就轉化成了二元二次函數,再根據等式約束,能夠進一步轉化爲一元二次求極值的問題。

咱們將上式整理下,寫成 係數 α i 2 + 係數 α j 2 + 係數 α i α j + 係數 α i + 係數 α j + 係數 \boxed{\text{係數}}\alpha_i^2+\boxed{\text{係數}}\alpha_j^2+\boxed{\text{係數}}\alpha_i\alpha_j+\boxed{\text{係數}}\alpha_i+\boxed{\text{係數}}\alpha_j+\boxed{\text{係數}} 這樣的形式
g ( α i , α j ) = 1 2 K i i α i 2 + 1 2 K j j α j 2 + s K i j α i α j + y i v i α i + y j v j α j α i α j g(\alpha_i,\alpha_j)=\frac{1}{2}K_{ii}\alpha_i^2+\frac{1}{2}K_{jj}\alpha_j^2+sK_{ij}\alpha_i\alpha_j+y_iv_i\alpha_i+y_jv_j\alpha_j-\alpha_i-\alpha_j

其中
s = y 1 y 2 s=y_1y_2
v i = k = 1 , k = ̸ i , k = ̸ j m y k α k K i k v_i=\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kK_{ik}

約束條件爲
α i 0 \alpha_i\geqslant0
α j 0 \alpha_j\geqslant0

k = 1 m y k α k = 0 \sum\limits_{k=1}^my_k\alpha_k=0 由此能夠推出
y i α i + y j α j = k = 1 , k = ̸ i , k = ̸ j m y k α k = ξ y_i\alpha_i+y_j\alpha_j = -\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_k=\xi

接下來的目標就是計算 f ( α i , α j ) f(\alpha_i,\alpha_j) 的極值

3-2-3-3-2 肯定 α j \alpha_j 的可行域

由於
y i α i + y j α j = k = 1 , k = ̸ i , k = ̸ j m y k α k = ξ y_i\alpha_i+y_j\alpha_j = -\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_k=\xi

因此
α i + y i y j α j = y i ξ \alpha_i+y_iy_j\alpha_j=y_i\xi
因爲 y i y j y_iy_j 的正負號不知,因此一共對應四種情形,同時咱們還能夠嘗試肯定下 ξ \xi 的正負

序號 y i y_i y j y_j α i + y i y j α j = y i ξ \alpha_i+y_iy_j\alpha_j=y_i\xi ξ \xi
1 + + α i + α j = ξ \alpha_i+\alpha_j=\xi +
2 - - α i + α j = ξ \alpha_i+\alpha_j=-\xi -
3 + - α i α j = ξ \alpha_i-\alpha_j=\xi 不知
4 - + α i α j = ξ \alpha_i-\alpha_j=-\xi 不知

對應這四種狀況,咱們能夠經過圖像,分別肯定出 α j \alpha_j 的取值範圍

序號 y i y_i y j y_j α i + y i y j α j = y i ξ \alpha_i+y_iy_j\alpha_j=y_i\xi ξ \xi
1 + + α i + α j = ξ \alpha_i+\alpha_j=\xi + 在這裏插入圖片描述
Low boundary = 0 0
High boundary= α i + α j \alpha_i+\alpha_j
2 - - α i + α j = ξ \alpha_i+\alpha_j=-\xi - 在這裏插入圖片描述
Low boundary = 0 0
High boundary= α i + α j \alpha_i+\alpha_j
3 + - α i α j = ξ \alpha_i-\alpha_j=\xi 不知 在這裏插入圖片描述
Low boundary = max { 0 , α i α j } \max\{0,\alpha_i-\alpha_j\}
High boundary= + +\infin
4 - + α i α j = ξ \alpha_i-\alpha_j=-\xi 不知 在這裏插入圖片描述
Low boundary = max { 0 , α i α j } \max\{0,\alpha_i-\alpha_j\}
High boundary= + +\infin

最終總結下 α j \alpha_j 的取值範圍
{ α j [ 0 , α i + α j ] y i y j = 1 α j [ max { 0 , α i α j } , + ) y i y j = 1 \begin{cases} \alpha_j \in [0,\alpha_i+\alpha_j] & y_iy_j=1\\ \alpha_j\in [\max\{0,\alpha_i - \alpha_j\},+\infin)& y_iy_j=-1 \end{cases}

3-2-3-3-2 肯定 α j \alpha_j 的值

因爲 α i \alpha_i α j \alpha_j 存在等式關係,即 y i α i + y j α j = ξ y_i\alpha_i+y_j\alpha_j=\xi
左右同時乘以 y i y_i
α i + y i y j α j = ξ y i \alpha_i+y_iy_j\alpha_j=\xi y_i ,即
α i + s α j = ξ y i \alpha_i+s\alpha_j=\xi y_i
w = ξ y i w=\xi y_i
α i = w s α j \alpha_i=w-s\alpha_j

因此咱們將上式帶入
g ( α i , α j ) = 1 2 K i i α i 2 + 1 2 K j j α j 2 + s K i j α i α j + y i v i α i + y j v j α j α i α j g(\alpha_i,\alpha_j)=\frac{1}{2}K_{ii}\alpha_i^2+\frac{1}{2}K_{jj}\alpha_j^2+sK_{ij}\alpha_i\alpha_j+y_iv_i\alpha_i+y_jv_j\alpha_j-\alpha_i-\alpha_j
就能夠獲得關於 α j \alpha_j 的一元二次函數,接下來就是這個帶入過程。

g ( α j ) = 1 2 K i i ( w s α j ) 2 + 1 2 K j j α j 2 + s K i j ( w s α j ) α j + y i v i ( w s α j ) + y j v j α j ( w s α j ) α j g(\alpha_j)=\frac{1}{2}K_{ii}(w-s\alpha_j)^2+\frac{1}{2}K_{jj}\alpha_j^2+sK_{ij}(w-s\alpha_j)\alpha_j+y_iv_i(w-s\alpha_j)+y_jv_j\alpha_j-(w-s\alpha_j)-\alpha_j

咱們能夠經過對 g ( α j ) g(\alpha_j) 求導=0,獲得極值點的位置

g ( α j ) = K i i ( w s α j ) ( s ) + K j j α j + s K i j w 2 s 2 K i j α j s y i v i + y j v j + s 1 = 0 g'(\alpha_j)=K_{ii}(w-s\alpha_j)(-s)+K_{jj}\alpha_j+sK_{ij}w-2s^2K_{ij}\alpha_j-sy_iv_i + y_jv_j+s-1=0

在整理過程當中,咱們使用一個小技巧
s y i v i = y i y j y i v i = y j v i sy_iv_i=y_iy_jy_iv_i=y_jv_i

帶入目標函數中獲得
( K i i + K j j 2 K i j ) α j = s w ( K i i K i j ) + y j v i y j v j s + 1 \big(K_{ii}+K_{jj}-2K_{ij}\big)\alpha_j=sw\big(K_{ii}-K_{ij}\big)+y_jv_i-y_jv_j-s+1

等號的右邊能夠進一步簡化成和左邊類似的結構。
用到一些小技巧好比
s w = y i y j y i ξ = y j ξ sw=y_iy_jy_i\xi=y_j\xi
其中 ξ = α i y i + α j y j \xi=\alpha_i^*y_i+\alpha_j^*y_j
α i \alpha_i* α j \alpha_j^* 表示未迭代的值

因此 s w = y j ( α i y i + α j y j ) sw=y_j(\alpha_i^*y_i+\alpha_j^*y_j)

s w = y j ( α i y i + α j y j ) sw=y_j(\alpha_i^*y_i+\alpha_j^*y_j) 帶入右式,同時讓 s = y i y j s=y_iy_j 1 = y j y j 1=y_jy_j
s w ( K i i K i j ) + y j v i y j v j s + 1 = y j ( α i y i + α j y j ) ( K i i K i j ) + y j v i y j v j y i y j + y j y j = y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + y j ( v i v j + y j y i ) \begin{aligned} &sw\big(K_{ii}-K_{ij}\big)+y_jv_i-y_jv_j-s+1 \\ &=y_j(\alpha_i^*y_i+\alpha_j^*y_j)\big(K_{ii}-K_{ij}\big)+y_jv_i-y_jv_j-y_iy_j+y_jy_j\\ &=y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+y_j\big(v_i-v_j+y_j-y_i\big)\\ \end{aligned}

接下來的化簡要將 v i v_i u i u_i 表示

回憶
v i = k = 1 , k = ̸ i , k = ̸ j m y k α k K i k = X i k = 1 , k = ̸ i , k = ̸ j m y k α k X k v_i=\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kK_{ik}=X_i\cdot\sum\limits_{k=1,k=\not i,k=\not j}^m y_k\alpha_kX_k
u i = j = 1 m y j α j K i j + b = X i j = 1 m y j α j X j + b = v i + y i α i X i X i + y j α j X j X i + b u_i=\sum\limits_{j=1}^my_j\alpha_jK_{ij}+b=X_i\cdot\sum\limits_{j=1}^my_j\alpha_jX_{j}+b=v_i+\textcolor{blue}{y_i\alpha_i^*X_iX_i+y_j\alpha_j^*X_jX_i+b}

也就是說
v i v j = u i u j + y j α j X j X j + y i α i X i X j y i α i X i X i y j α j X j X i v_i-v_j=u_i-u_j+y_j\alpha_jX_jX_j+y_i\alpha_iX_iX_j-y_i\alpha_iX_iX_i-y_j\alpha_jX_jX_i
= u i u j + y j α j K j j + y i α i K i j y i α i K i i y j α j K i j =u_i-u_j+y_j\alpha_j^*K_{jj}+y_i\alpha_i^*K_{ij}-y_i\alpha_i^*K_{ii}-y_j\alpha_j^*K_{ij}

因此等號右邊能夠繼續化簡
= y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + y j ( v i v j + y j y i ) =y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+y_j\big(v_i-v_j+y_j-y_i\big)
= y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + y j ( u i u j + y j α j K j j + y i α i K i j y i α i K i i y j α j K i j + y j y i ) =y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+y_j\big(u_i-u_j+y_j\alpha_j^*K_{jj}+y_i\alpha_i^*K_{ij}-y_i\alpha_i^*K_{ii}-y_j\alpha_j^*K_{ij}+y_j-y_i\big)
= y i y j α i K i i + α j K i i y i y j α i K i j α j K i j + α j K j j + s α i K i j s α i K i i α j K i j + y j ( ( u i u j ) ( y i y j ) ) =y_iy_j\alpha_i^*K_{ii}+\alpha_j^*K_{ii}-y_iy_j\alpha_i^*K_{ij}-\alpha_j^*K_{ij}+\alpha_j^*K_{jj}+s\alpha_i^*K_{ij}-s\alpha_i^*K_{ii}-\alpha_j^*K_{ij}+y_j\big((u_i-u_j)-(y_i-y_j)\big)
= α j ( K i i + K j j 2 K i j ) + y j ( ( u i u j ) ( y i y j ) ) =\alpha_j^*\big(K_{ii}+K_{jj}-2K_{ij}\big)+y_j\big((u_i-u_j)-(y_i-y_j)\big)

這時,等號的左右邊都有 ( K i i + K j j 2 K i j ) \big(K_{ii}+K_{jj}-2K_{ij}\big) ,對於取得極值點的 α j \alpha_j 能夠進一步化簡

η = K i i + K j j 2 K i j \eta=K_{ii}+K_{jj}-2K_{ij}
E i = u i y i E_i=u_i-y_i

η α j = α j η + y j ( E i E j ) \eta\alpha_j=\alpha_j^*\eta+y_j(E_i-E_j)
因此 α j = α j + y j ( E i E j ) η \alpha_j=\alpha_j^*+\frac{y_j(E_i-E_j)}{\eta}

這是在無約束時,使得 g ( α i , α j ) g(\alpha_i,\alpha_j) 最小的點,咱們令其爲 α j b e s t \alpha_j^{best} 但因爲 α j \alpha_j 還存在不等式約束
{ α j [ 0 , α i + α j ] y i y j = 1 α j [ max { 0 , α i α j } , + ) y i y j = 1 \begin{cases} \alpha_j \in [0,\alpha_i+\alpha_j] & y_iy_j=1\\ \alpha_j\in [\max\{0,\alpha_i - \alpha_j\},+\infin)& y_iy_j=-1 \end{cases}

因此再根據約束,進一步考慮最終迭代後 α i \alpha_i的值
對應的一共有三種狀況

狀況一 狀況二 狀況三
在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述

最終迭代後 α j n e w \alpha_j^{new} 的值爲
α j n e w = { L if  α j b e s t < L α j b e s t if  L α j b e s t H H if  α j b e s t > H \alpha_j^{new}=\left\{ \begin{aligned} &L & \quad\text{if }\alpha_j^{best}<L\\ &\alpha_j^{best} &\quad\text{if }L\leqslant\alpha_j^{best}\leqslant H \\ &H &\quad\text{if }\alpha_j^{best}>H \end{aligned} \right.

3-2-3-3-3 肯定 α i \alpha_i 的值

由於 α i n e w y i + α j n e w y j = α i y i + α j y j \alpha_i^{new}y_i+\alpha_j^{new}y_j=\alpha_i^*y_i+\alpha_j^*y_j
因此迭代後
α i n e w = α i + s ( α j α j n e w ) \alpha_i^{new}=\alpha_i^*+s(\alpha_j^*-\alpha_j^{new})

3-2-3-3-4 更新b

若是 α 1 > 0 \alpha_1>0
k = 1 m y k α k X k X 1 + b 1 n e w = y 1 \sum\limits_{k=1}^my_k\alpha_kX_kX_1+b_1^{new}=y_1
k = 3 m y k α k X k X 1 + α 1 n e w y 1 K 11 + α 2 n e w y 2 K 21 + b 1 n e w = y 1 \sum\limits_{k=3}^my_k\alpha_kX_kX_1+\alpha_1^{new}y_1K_{11}+\alpha_2^{new}y_2K_{21}+b_1^{new}=y_1
因此 b 1 n e w = y 1 k = 3 m y k α k X k X 1 α 1 n e w y 1 K 11 α 2 n e w y 2 K 21 b_1^{new}=y_1-\sum\limits_{k=3}^my_k\alpha_kX_kX_1-\alpha_1^{new}y_1K_{11}-\alpha_2^{new}y_2K_{21}

未更新的 E 1 = k = 3 m y k α k K k 1 + α 1 y 1 K 11 + α 2 y 2 K 21 + b y 1 E_1=\sum\limits_{k=3}^my_k\alpha_kK_{k1}+\alpha_1^{*}y_1K_{11}+\alpha_2^{*}y_2K_{21}+b^{*}-y_1
因此可得 y 1 k = 3 m y k α k K k 1 = E 1 + α 1 y 1 K 11 + α 2 y 2 K 21 + b y_1-\sum\limits_{k=3}^my_k\alpha_kK_{k1}=-E_1+\alpha_1^{*}y_1K_{11}+\alpha_2^{*}y_2K_{21}+b^*


b 1 n e w = E 1 + α 1 y 1 K 11 + α 2 y 2 K 21 + b α 1 n e w y 1 K 11 α 2 n e w y 2 K 21 b_1^{new}=-E_1+\alpha_1^{*}y_1K_{11}+\alpha_2^{*}y_2K_{21}+b^*-\alpha_1^{new}y_1K_{11}-\alpha_2^{new}y_2K_{21}
= b E 1 + y 1 K 11 ( α 1 α 1 n e w ) + y 2 K 21 ( α 2 α 2 n e w ) =b^*-E_1+y_1K_{11}(\alpha_1^*-\alpha_1^{new})+y_2K_{21}(\alpha_2^*-\alpha_2^{new})

同理可得
b 2 n e w = b E 2 + y 1 K 12 ( α 1 α 1 n e w ) + y 2 K 22 ( α 2 α 2 n e w ) b_2^{new}=b^*-E_2+y_1K_{12}(\alpha_1^*-\alpha_1^{new})+y_2K_{22}(\alpha_2^*-\alpha_2^{new})

最終 b n e w b^{new} 的取值爲
b n e w = b 1 n e w + b 2 n e w 2 b^{new}=\frac{b_1^{new}+b_2^{new}}{2}
對b的更新還不是十分肯定,先暫時按這樣的方式實現下代碼

3-2-3-3-5 更新 E k E_k

每次完成兩個變量的優化以後,還必須更新對應的 E k E_k ,並將他們保存在列表中, E k E_k 值的更新要用到 b n e w b_{new}
E k n e w = i = 1 m y i α i K i k + b n e w y k E_k^{new}=\sum\limits_{i=1}^my_i\alpha_iK_{ik}+b^{new}-y_k

3-2-3-4 一些證實細節

3-2-3-4-1 SVM對偶問題的任意一個子問題都是凸優化問題(拋物線開口向上)

用到的方法利用是Hessian矩陣判斷

子問題的Hessian矩陣爲
[ Q i i Q i j Q j i Q j j ] \begin{bmatrix} Q_{ii} & Q_{ij}\\ Q_{ji} & Q_{jj} \end{bmatrix}
能夠寫成以下矩陣乘積的形式
[ y i X i T y i X j T ] [ y i X i y j X j ] = A T A \begin{bmatrix} y_iX_i^T \\ y_iX_j^T \end{bmatrix} \begin{bmatrix} y_iX_i & y_jX_j \end{bmatrix}=A^TA
任意的向量x
x T A T A x = ( A x ) T ( A x ) 0 x^TA^TAx=(Ax)^T(Ax)\geqslant0
因此Hessian矩陣半正定,所以目標函數必定爲凸函數

3-2-3-4-2 SVM算法收斂性的證實

由於不管迭代時,兩個變量的初始值時多少,經過上面的子問題求解算法獲得的是在可行域內的最小值,所以每次更新完這兩個變量後,都能保證目標函數的值小於或者等於初始值,即函數值降低。同時SVM要求解的對偶問題是凸優化問題,有全局最小解,因此SMO算法能保證收斂。

3-2-3-5 優化變量的選擇

使用KKT條件,挑選出違反KKT條件的樣本,進行優化。

根據前面的推導,在最優勢處必須知足
{ α i > 0 y i ( w T x ( i ) + b ) = 1 α i = 0 y i ( w T x ( i ) + b ) 1 \begin{cases} \alpha_i>0 & y_i(w^Tx^{(i)}+b)=1\\ \alpha_i=0 & y_i(w^Tx^{(i)}+b)\geqslant1 \end{cases}

其中 w w α \alpha 來表示

u i = j = 1 m y j α j X j X i + b u_i=\sum\limits_{j=1}^my_j\alpha_jX_j\cdot X_i+b
因此在最優勢處必須知足

{ α i > 0 y i u i = 1 α i = 0 y i u i 1 \begin{cases} \alpha_i>0 & y_iu_i=1\\ \alpha_i=0 & y_iu_i\geqslant1 \end{cases}

根據上式,依此檢查全部樣本,若是違反了上面的條件,則須要優化。
優先優化 α i > 0 \alpha_i>0

第二個變量的選擇,選擇使 E i E j |E_i-E_j| 最大化的值。
其中 E i = u i y i E_i=u_i-y_i

爲何選 E i E j |E_i-E_j|

相關文章
相關標籤/搜索