1. 程式人生 > >SVM(Support Vector Machin) 支援向量機 詳解

SVM(Support Vector Machin) 支援向量機 詳解

吳恩達的課程中跟國內的一些教程中分析問題的思路還是有些不同的,吳恩達的課程從簡單的LR開始讓我們先去理解優化目標,一步步的引導我們去理解SVM,然後揭開他神祕的面紗,便於理解,是很不錯的課程。我學習的國內課程是直接重點講解,講到SVM核心內容。在這裡我總結下自己學習SVM的一些想法(目標函式的優化,對偶問題,smo求解,其他核函式,SVM迴歸,最大間隔等)方便以後檢視。

引言

SVM 一個支援向量機用於構造一個超平面,或再高或無限維空間,其可以用於分類,迴歸,或其它任務中設定的超平面的。直觀地,可以做一個良好的分離。如下圖,能將訓練樣本劃分的超平面可能有很多,但是我們從直觀上去看,應該去找兩類訓練樣本最中間的那個(粗體直線)因為這條直線劃分超平面對訓練樣本的容忍性最好。例如:可能訓練集外的樣本比圖中的樣本更加接近分類邊界,這時中間的線將表現得最好,這個劃分超平面所產生的分類結果是最魯棒的,對未知的樣本的泛化能力最強。

                                                          

最大間隔與支援向量 

我們現在的任務是求得這個最魯棒的超平面。

我們首先可以假設超平面的線性方程如下:

                                                                              

 其中決定超平面的因子有w和b:向量 w 為法向量,決定了超平面的方向,b 為位移項,決定了超平面與原點之間的距離。空間中的點距離超平面的距離為:

                                                                        

 假設超平面可以將樣本正確分類,則有:

  • 若 y = 1   
  • 若 y = -1 

我們現在不僅僅要求所有樣本點可以正確分類而且要求泛化能力增強,所有樣本儘量去遠離超平面去達到更好地分類效果。跟上面粗體直線一樣。 所以我們要使距離超平面最近的幾個樣本點使如下假設成立:

                                                                   

 則這幾個樣本到超平面距離和的(被稱為間隔)最小值為:

                                                                               

 

                                                   

 我們就是要把這個間隔最大化。也就是要找到滿足

                                                              

中的約束引數w 和 b,使得γ最大。其中可等價於:

                                                           

這個就是支援向量機的基本形態。需要注意的是這個間隔貌似之和w向量有關,其實事實上是b通過約束隱式的影響著w的取值,進而對間隔產生影響。

最優化

接下來我們不談SVM,談一下優化演算法,因為SVM會用到,在此總結下。最優化問題有三種:

無約束條件優化:

該問題很好解,根據 Fermat 定理,直接找到使目標函式得 0 的點即可 即 ∇xf(x)=0∇xf(x)=0 ,如果沒有解析解的話,可以使用梯度下降或牛頓方法等迭代的手段來使 x 沿負梯度方向逐步逼近極小值點。詳見 最優化—梯度下降法.

等式約束條件優化:

當目標函式加上等式約束條件後,問題就變成如下形式:

                                                                 

約束條件會將解的範圍限定在一個可行域,此時不一定能找到使得為 0 的點,只需找到在可行域內使得最小的值即可,常用的方法即為拉格朗日乘子法,該方法首先引入 Lagrange Multiplier,構建 Lagrangian 如下:

                                                                   

求解方法如下:首先對 Lagrangian  關於 α 與 x 求 :

                                                                      

 

令導數為 0 ,求得 x 、 α 的值後,將 x 帶入 f(x) 即為在約束條件 hi(x) 下的可行解。這樣做的意義是什麼呢? 接下來看一個直觀的示例,對於二維情況下的目標函式是 f(x,y),在平面中畫出 f(x,y) 的等高線,如下圖的虛線所示, 並只給出一個約束等式 h(x,y)=0,如下圖的綠線所示,目標函式 f(x,y)與約束 g(x,y) 只有三種情況,相交、相切或者沒有交集,沒交集肯定不是解,只有相交或者相切可能是解,但相交得到的一定不是最優值,因為相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函式的交點的值更大或者更小,這就意味著只有等高線與目標函式的曲線相切的時候,才可能得到可行解

                                                 .

 

因此給出結論:拉格朗日乘子法取得極值的必要條件是目標函式與約束函式相切,這時兩者的法向量是平行的,即

                                                                  

所以只要滿足上述等式,且滿足之前的約束即可得到解,聯立起來,正好得到就是拉格朗日乘子法。這裡只是直觀展示了一下拉格朗日乘子法的幾何推導 ,並沒有給出詳細的證明。

不等式條件約束優化:

當約束加上不等式之後,情況變得更加複雜,首先來看一個簡單的情況,給定如下不等式約束問題:         

                                                                             

對應的 Lagrangian 與圖形分別如下所示:

                                                                           

這時的可行解必須落在約束區域 g(x) 之內,下圖給出了目標函式的等高線與約束:

                                                           

 由圖可見可行解 x 只能在 g(x)<0 或者 g(x)=0 的區域裡取得:

  • 當可行解 x 落在 g(x)<0的區域內,此時直接極小化 f(x)即可;
  • 當可行解 x 落在 g(x)=0即邊界上,此時等價於等式約束優化問題.

當約束區域包含目標函式原有的的可行解時,此時加上約束可行解扔落在約束區域內部,對應 g(x)<0的情況,這時約束條件不起作用;當約束區域不包含目標函式原有的可行解時,此時加上約束後可行解落在邊界 g(x)=0 上。下圖分別描述了兩種情況,右圖表示加上約束可行解會落在約束區域的邊界上。                        

                                                      

以上兩種情況就是說,要麼可行解落在約束邊界上即得 g(x)=0 ,要麼可行解落在約束區域內部,此時約束不起作用,另 λ=0消去約束即可,所以無論哪種情況都會得到:

                                                                                    

還有一個問題是 λ 的取值,在等式約束優化中,約束函式與目標函式的梯度只要滿足平行即可,而在不等式約束中則不然,若 λ≠0,這便說明 可行解 x 是落在約束區域的邊界上的,這時可行解應儘量靠近無約束時的解,所以在約束邊界上,目標函式的負梯度方向應該遠離約束區域朝向無約束時的解,此時正好可得約束函式的梯度方向與目標函式的負梯度方向應相同:

                                                                          

上式需要滿足的要求是拉格朗日乘子 λ>0,這個問題可以舉一個形象的例子,假設你去爬山,目標是山頂,但有一個障礙擋住了通向山頂的路,所以只能沿著障礙爬到儘可能靠近山頂的位置,然後望著山頂嘆嘆氣,這裡山頂便是目標函式的可行解,障礙便是約束函式的邊界,此時的梯度方向一定是指向山頂的,與障礙的梯度同向,下圖描述了這種情況 :

                                                              

可見對於不等式約束,只要滿足一定的條件,依然可以使用拉格朗日乘子法解決,這裡的條件便是 KKT 條件。接下來給出形式化的 KKT 條件 首先給出形式化的不等式約束優化問題:

                                                                   

列出 Lagrangian 得到無約束優化問題:

                                                       

經過之前的分析,便得知加上不等式約束後可行解 xx 需要滿足的就是以下的 KKT 條件:

                                               

滿足 KKT 條件後極小化 Lagrangian 即可得到在不等式約束條件下的可行解。 KKT 條件看起來很多,其實很好理解:

  1. 拉格朗日取得可行解的必要條件;
  2. 這就是以上分析的一個比較有意思的約束,稱作鬆弛互補條件;
  3. 初始的約束條件;
  4. 不等式約束的 Lagrange Multiplier 需滿足的條件。
  5. 主要的KKT條件便是 3 和 4,只要滿足這倆個條件便可直接用拉格朗日乘子法, SVM 中的支援向量便是來自於此,需要注意的是 KKT 條件與對偶問題也有很大的聯絡。

優化內容參考  ooon 。

 對偶問題

我們現在開始求解:

                                                         

來得到劃分超平面模型

                                                             

這個本身是一個凸二次規劃問題,可以用現成的優化計算包求解,但我們可以有更高效的方法。根據以上最優化講述的內容,我們可以對其使用拉格朗日乘子法得到其 對偶問題,具體來說,對式的每條約束新增拉格朗日乘子,則該問題的拉格朗日函式可寫為:

                                                         

其中  令的偏導為零可得

                                                                              

與上式聯立可把消去可以得到對偶問題:

                                                           

                                                                 

解出α後,求出w和b可以得到模型如下,(經過最優化的講解到這裡), 我們可以看出需要解不等式約束,所以需要滿足KKT條件,即如下要求:

                                                     

對於任意的樣本,總有或者是,若α=0,則該樣本將不會在上面左側式子的求和中出現,也就不會對f(x)有任何影響;若,則必有,所對應的樣本位於最大間隔邊界上,是一個支援向量。這裡顯示出支援向量機的一個重要的性質:訓練完成後,大部分的訓練樣本都不需要保留,最終的模型僅與支援向量有關。

SMO演算法:

在求解此二次規劃的問題時, 我們可以使用高效的SMO演算法,當然也不乏其他高效演算法。

SMO的基本思路是先固定之外的所有引數,然後求上的極值。由於存在約束,若固定之外的其他變數,則 可由其他變數匯出,於是SMO每次選擇兩個變數,並且固定其他引數,這樣在引數初始化後。SMO不斷執行如下兩個步驟直至收斂:

  • 選取一對需更新的變數
  • 固定以外的引數,求解下式獲取更新後的

                                                   

內容摘取西瓜書

核函式

在之前的討論中,我們假設訓練樣本都是線性可分的,即存在一個劃分超平面能將訓練樣本正確分類,但是在現實任務中,原始空間樣本也許不存在一個能正確劃分兩類樣本的超平面,例如:異或問題就不是線性可分的。

                 

對與這樣的問題,我們可以把原始資料對映到更高維的特徵空間,使得樣本在這個特徵空間內線性可分,如上圖。只要原始資料是有限維,那麼就一定存在一個高維特徵空間使其線性可分。那麼核函式就充當了這個角色,把原始特徵升維到高維特徵空間,使其線性可分。

核函式定義:通過某非線性變換 φ( x) ,將輸入空間對映到高維特徵空間。特徵空間的維數可能非常高。如果支援向量機的求解只用到內積運算,而在低維輸入空間又存在某個函式 K(x, x′) ,它恰好等於在高維空間中這個內積,即K( x, x′) =<φ( x) ⋅φ( x′) > 。那麼支援向量機就不用計算複雜的非線性變換,而由這個函式 K(x, x′) 直接得到非線性變換的內積,使大大簡化了計算。這樣的函式 K(x, x′) 稱為核函式。

則升維後模型可表示為:

 

常見的核函式還有:

另外他們也可以組合使用:

對於核函式在吳恩達的課程中講的更加易懂,可以先去看吳恩達的課程在來學習西瓜書內容。

                                                                                        

軟間隔與正則化

在現實的任務中我們很難確定合適的核函式,做到把所有的樣本正確的線性可分,也不好斷定這個貌似很好的線性可分的結果是不是過擬合造成的。我們就在優化目標中加入了一個引數去約束這些變化:

                                      

                                       

當C取有限值一個較小的數時,我們允許一些樣本去不滿足約束,這就被稱為軟間隔。當C 趨於正無窮大的時候我們對線性可分要求十分嚴格,就是硬間隔。

我們有時候也會對目標函式使用正則化。

                                                                   

通過正則化控制模型,使模型降低了過擬合的風險。

總結:在學習SVM時,先把原理大體搞清楚,再去看他的具體實現公式的推導,直接推導不容易理解的話可以先去學習吳恩達的課程,原理搞清楚了再做模型構建,另外SVR支援向量迴歸與分類相似在許多地方,目標函式會有所差別在西瓜書上也有詳細的說明。