機器學習入門筆記:(4.3)SMO算法

前言

之前的博客中,已經介紹了SVM的原理:

機器學習入門學習筆記:(4.1)SVM算法

機器學習入門學習筆記:(4.2)核函數和軟間隔

最後我們得到的優化問題如下:

maxαi=1mαi12i=1mj=1mαiαjyiyjxixj,s.t.i=1mαiyi=00αiC,i=1,2,...,m

這個問題的解就是一系列的 α ,這些 α 會使得上面的式子有最大值。

這個式子是引入了軟間隔後的支持向量機的問題,再進一步,用上核函數,就可以表示爲:

maxαi=1mαi12i=1mj=1mαiαjyiyjK(xi,xj),s.t.i=1mαiyi=00αiC,i=1,2,...,m

一般來說,我們都不是很喜歡求最大值的問題,而是求最小值,所以將上面的問題換成求最小值的形式:
minα12i=1mj=1mαiαjyiyjK(xi,xj)i=1mαi,s.t.i=1mαiyi=00αiC,i=1,2,...,m

我們之後的討論都會圍繞着這個問題進行。

SMO算法

爲了解決二次規劃問題,人們提出許多高效的算法。其中比較典型的一個就是SMO(Sequential Minimal Optimization)算法。SMO算法由Microsoft Research的John C. Platt在1998年提出,併成爲最快的二次規劃優化算法,特別針對線性SVM和數據稀疏時性能更優。關於SMO最好的資料就是他本人寫的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。

(摘自支持向量機(五)SMO算法

SMO 概念

SMO的基本思路就是:先固定 αi 之外的所有參數,然後求 αi 的極值。但是問題中存在約束條件: mi=1αiyi=0 。如果固定了 αi 之外的其他變量,則 αi 也會被固定,可以由其他的變量導出。於是,一次只留一個參數,固定其餘參數的方法在這裏是不適用的,但是這個思想卻給了我們不錯的啓發。那麼,SMO可以每次選擇兩個變量 αi αj ,並固定其他參數。這樣,在參數初始化之後,SMO不斷迭代重複下面的步驟,直至收斂:

  • 選取一對新的 αi αj ;
  • 固定 αi αj 之外的參數,求解前面的優化問題,獲取更新後的 αi αj

假設選取的兩個變量爲 α1 α2 ,那麼由於其餘參數均被固定,目標函數最後也只與 α1 α2 有關。

由約束條件 mi=1αiyi=0 有: α1y1+α2y2=C ,其中 C 爲常數。

爲簡化表示,我們用 Kij 表示 K(xi,xj)

對原始問題進行化簡:

minα12i=1mj=1mαiαjyiyjK(xi,xj)i=1mαi

=minαi=1m[αiα1yiy1K(xi,x1)+αiα2yiy2K(xi,x2)+j=3mαiαjyiyjK(xi,xj)]α1α2i=3mαi

=minα12[α21y21K(x1,x1)+α1α2y1y2K(x1,x2)+j=3mα1αjy1yjK(x1,xj)]+12[α2α1y2y1K(x2,x1)+α22y22K(x2,x2)+j=3mα2αjy2yjK(x2,xj)]+12i=3m[αiα1yiy1K(xi,x1)+αiα2yiy2K(xi,x2)+j=3mαiαjyiyjK(xi,xj)]α1α2i=3mαi

=minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+i=3mj=3mαiαjyiyjK(xi,xj)+2α1y1v1+2α2y2v2]α1α2i=3mαi

(其中,因爲核函數滿足 K12=K21 ,所以直接合在一起了;爲了便於表示,令 vi=mj=3yjαjkij

由於除了 α1 α2 之外的 αi,i=3,4,...,m 都被固定了,所以都是常數。

=minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]α1α2+C

其中 C 是任意常數。

解的範圍

現在的結果是有關 α1 α2 的表達式,爲了進一步化簡我們還可以將 α1 α2 表示。但是在此之前,還有一個問題,那就是 α1 α2 的取值範圍是多少?儘管有了約束條件 mi=1αiyi=0 ,但是在 y1 y2 取不同值時,也會有不同的約束關係產生。

這裏寫圖片描述

(摘自John C. Platt的論文)

前面推出的 α1 α2 的約束關係爲: α1y1+α2y2=C

我們還有些已知的條件:

0αC

y1 y2 都是輸出的標籤,爲 ±1 ,顯然: y21=y22=1

如上圖所示,分兩種情況討論:

  1. 如果 y1y2 ,則 y1 y2 一定異號,那麼約束關係變爲: α1α2=k k 是任意常數。 k 具體是多少我們並不關心,但是我們知道 α1 α2 的取值都落在途中的直線上。 k 無非就是一個截距,隨着 k 的變化,這根直線在方框內會上下移動,交點也變,但是一定要在方框範圍內,所以邊界一定會落在方框與直線的交點上。假設幾種可能的情況就不難推算出 α 的範圍了假設只考慮 α2 的範圍,設 L α2 可能的最小取值, H α2 可能的最大取值。

    L=max(0,k),H=min(C,Ck)L=max(0,α2α1),H=min(C,C+α2α1)

  2. 如果 y1=y2 ,則 y1 y2 一定同號,那麼約束關係變爲: α1+α2=k k 是任意常數。與前面同樣分析。只考慮 α2 的範圍,設 L α2 可能的最小取值, H α2 可能的最大取值。根據圖中所示,可以得到如下關係:

    L=max(0,kC),H=min(C,k)L=max(0,α1+α2C),H=min(C,α1+α2)

通過上面的討論,我們得到了 α2 的可能取值範圍: Lα2H

  1. y1y2 時, L=max(0,α2α1),H=min(C,C+α2α1)
  2. y1=y2 時, L=max(0,α1+α2C),H=min(C,α1+α2)

同理, α1 的範圍與 α2 是一樣的。這個範圍先保留,後面再用。

求解優化問題

轉化爲一元函數求極值點

接下來,將 α1 α2 表示。將約束關係: α1y1+α2y2=C 左右同時乘上 y1 得到:

α1=(ζα2y2)y1
,這裏的 ζ 是常數,爲了不跟原式子中的 C 混淆,換成 ζ 表示這個常數。

好了,我們已經將 α1 α2 表示出來了,可以代回到前面的問題中了:

minα12[α21y21K11+α22y22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]α1α2+Cvi=j=3myjαjkij

我們有 y21=y22=1 ,以及 α1=(ζα2y2)y1 ,代入化簡得到:

minα12[(ζα2y2)2k11+k22α22+2(ζα2y2)α2y2k12+2(ζα2y2)v1+2α2y2v2](ζα2y2)y1α2+C

常數可以去掉,不影響結果:

minα12[(ζα2y2)2k11+k22α22+2(ζα2y2)α2y2k12+2(ζα2y2)v1+2α2y2v2](ζα2y2)y1α2

上面的問題已經化成了單變量的優化問題了,使用常規套路,求偏導取0,即可解出 α2 的值。

對目標函數求偏導數:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21

令這個偏導數爲0可以求出新的 α2 ,利用

α1=(ζα2y2)y1
這個關係,又可以求出新的 α1 ,這兩新求出的值即爲我們使用SMO算法優化之後的結果。爲了與原始的 α1 α2 值區分,我們將這兩個新的值標記爲 α1 α2

修改後的幾個條件如下:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21=0

ζ=α1y1+α2y2=α1y1+α2y2

vi=j=3myjαjkij

爲了後面表示簡便,還要給出幾個關係:

如果把 vi 直接代入,結果太複雜了。還需要對 vi 做一些變換:

前面的博客中,我們已經推導過SVM的數學模型的最終結果: f(xi)=ωTx+b=mj=1αjyjK(xi,xj)+b

展開 f(x) 看看:

f(x1)=α1y1K11+α2y2K12+j=3mαjyjK1j+b=α1y1K11+α2y2K12+v1+b

f(x2)=α1y1K12+α2y2K22+j=3mαjyjK2j+b=α1y1K12+α2y2K22+v2+b

所以:

v1=f(x1)α1y1K11α2y2K12b

v2=f(x2)α1y1K12α2y2K22b

好了,條件基本都得到了,再列一下我們要用的條件:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21=0

ζ=α1y1+α2y2(=α1y1+α2y2)

v1=f(x1)α1y1K11α2y2K12b

v2=f(x2)α1y1K12α2y2K22b

聯立,化簡得:(注: ζ=α1y1+α2y2 ,用舊的 α1 α2 ,因爲我們最後要表示出新的 α2

α2(K11+K222K12)=(K11+K222K12)α2+y2[y2y1+f(x1)f(x2)]

設預測值與真實值之差爲 Ei Ei=f(xi)yi

繼續化簡:

α2=α2+y2E1E2(K11+K222K12)

再記 η=(K11+K222K12)

α2=α2+y2E1E2η,η=(K11+K222K12)

注意, α2 是經過優化後求出的解, α2 是之前的值。

當然還有 α2 的範圍約束,前面我們已經推導了:

α2 的可能取值範圍: Lα2H

  1. y1y2 時, L=max(0,α2α1),H=min(C,C+α2α1)
  2. y1=y2 時, L=max(0,α1+α2C),H=min(C,C+α1+α2)

所以求出了優化後的 α2 後,還需要經過一個範圍的約束:

αnew2=H,α2>Hα2,Lα2HL,α2<L

求解 α1

知道了 α2 α1 就很容易了:

由約束條件: α1y1+α2y2=αnew1y1+αnew2y2=ζ 得到:

αnew1=α1+y1y2(α2αnew2)

取臨界情況

前面推導的結果:

α2=α2+y2E1E2η,η=(K11+K222K12)

大部分情況下,都有 η=(K11+K222K12)>0 ,但是在不滿足這個條件時, α2 需要取臨界值。

  1. η<0,當核函數K不滿足Mercer定理時,矩陣K非正定;
  2. η=0,樣本x1與x2輸入特徵相同;

也可以換個方式來理解:

原問題:

minα12[(ζα2y2)2k11+k22α22+2(ζα2y2)α2y2k12+2(ζα2y2)v1+2α2y2v2](ζα2y2)y1α2+C

其一階偏導數爲:

Φα2=α2(K11+K222K12)K11ζy2+K12ζy2y2v1+y2v2+y1y21

二階偏導數爲:

2Φα22=η=(K11+K222K12)

這個 η 就是原問題的二階偏導數,根據函數的性質來看:

  1. η<0 時,目標函數爲凸函數,沒有極小值,最小值會在邊界取得;
  2. η=0 時,目標函數爲單調函數,很明顯,最小值或者最大值都會在邊界上取得。

所以,當 η0 時,把 α2=L α2=H 分別代入 α1y1+α2y2=αnew1y1+αnew2y2=ζ 解出 α1=L1 α1=H1 ,其中令 s=y1y2

L1=α1+s(α2L)

H1=α1+s(α2H)

代回到目標函數中可以求出對應的兩個可能值 ΨL ΨH ,最後取兩者中更小的那個就是最小值了。

代入之前先看看目標函數:

Ψ=12[α21K11+α22K22+2α1α2y1y2k12+2α1y1v1+2α2y2v2]α1α2

因爲 v1 v2 的存在,展開後還是有些不太好看的。 vi=mj=3yjαjkij 這東西不好化簡,所以使用 vi 的另一種表示形式:

vi=f(xi)α1y1Ki1α2y2Ki2b

代入 Ψ 中:(注: y21=y22=1 )

Ψ=12α21K11+12α22K22+α1α2y1y2K12+α1y1(f(x1)α1y1K11α2y2K12b)+α2y2(f(x2)α1y1K12α2y2K22b)α1y21α2y22

Ψ=12α21K11+12α22K22+α1α2y1y2K12+α1(y1f(x1)α1K11α2y1y2K12y1by21)+α2(y2f(x2)α1y1y2K12α2K22by2y22)

下面令 Ψ=12α21K11+12α22K22+α1α2y1y2k12+α1f1+α2f2 ,則:

f1=y1f(x1)α1K11α2y1y2K12y1by21=y1(E1b)α1K11α2y1y2K12

f2=y2f(x2)α1y1y2K12α2K22by2y22=y2(E2b)α1y1y2K12α2K22

使用上面的這些式子,將 L1=α1+s(α2L) H1=α1+s(α2H) 以及 s=y1y2 代入可以得到如下結果:

這裏寫圖片描述

這裏是論文中的結果,我就偷懶不寫步驟了。前面推導的式子聯立就可以得到上面的6個式子。

計算 ω 和b

首先看 ω ,前面我們可以解出 α ,根據公式: ω=mi=1αiyixi 就可以求出來 ω

因爲除了 α1 α2 之外的 αi 都被固定了,所以優化前後都會有如下關係:

ω=α1y1x1+α2y2x2+i=3mαiyixi

ωnew=αnew1y1x1+αnew2y2x2+i=3mαiyixi

兩式做差即可求出新的 ω

ωnew=ω+y1x1(αnew1α1)+y2x2(αnew2α2)

然後是 b ,我們沒有直接的公式來計算,只能通過KKT條件間接求出來。

這裏寫圖片描述

(摘自Platt的論文)

這是原優化問題的KKT條件:

  1. αi=0 時,分類是正確的;
  2. 0αiC 時,這時的樣本點是支持向量,處在邊界上;
  3. αi=C 時,位於邊界之間。

參考上面的KKT條件進行分類討論:

  1. 如果 0<α1<C ,則 (x1,y1) 爲支持向量,滿足 yi(mi=1αiyiKi1+b1)=1

    αnew1y1K11+αnew2y2K21+i=3mαiyiKi1+bnew1=y1

    因爲: y1mi=3αiyiKi1=y1f(x1)+α1y1K11+α2y2K21+b

    所以:

    bnew1=y1f(x1)+α1y1K11+α2y2K21+bαnew1y1K11αnew2y2K21

    bnew1=E1y1K11(αnew1α1)y2K21(αnew2α2)+b

    其中 α1,α2,b 爲舊的值, αnew1,αnew2,bnew 爲優化後的值。

  2. 如果 0<α2<C ,則 (x2,y2) 爲支持向量,同理可以得到:

    b
相關文章
相關標籤/搜索