機器學習——SVM詳解(標准形式,對偶形式,Kernel及Soft Margin)


(寫在前面:機器學習入行快2年了,多多少少用過一些算法,但由於敲公式太過浪費時間,所以一直擱置了開一個機器學習系列的博客。但是現在畢竟是電子化的時代,也不可能每時每刻都帶着自己的記事本。如果可以掏出手機或iPad登陸網站就可以看到自己的一些筆記,才更有助於知識的鞏固。借此機會,重新整理各大算法,希望自己能有更深的認識,如果有可能,也大言不慚的說希望能夠幫助到需要幫助的朋友~)

 (本篇博客內容來自台大林軒田老師Coursera Machine Learning Technology視頻及周志華老師Machine Learning西瓜書,轉載請標明出處

 

 一。SVM之起源(Support Vector Machine)

對於一個線性可分的數據集,使用感知器模型(PLA)可以得到一個線性的分類器:linear classifier: h(x) = sign(wTx)

但是PLA生成分類器的過程(如下圖所示)是:

隨機(Randomness)選取一個錯誤分類的數據點,更新分類器的參數。

但是這樣的選擇非常具有隨機性,也就是說對於同一份數據集,每次用PLA算法訓練的分類器可能都不一樣,因此得到的分類器

可能如下圖所示:

     

上圖中的分類器都可能有PLA算法訓練出來,但哪個是最好的呢?明眼人一看可能會說:第三個 !沒錯。為什么這樣說呢?

因為,我們的數據集並不能總是保證是嚴格線性可分的,里面可能會有一些噪聲,如果選擇第一個或者第二個分類器的話,

隨便一丟丟噪聲分類器將會識別不出來!

所以說,如果距離分類超平面(hyperlane)最近的數據點的距離(margin)越大,該分類器的噪聲容忍度就越大,也就是越robust。

於是,我們的目標就變為了:在保證所有訓練數據分類正確的前提下,最大化距離分類超平面最小距離。

形式化的表示為:

 

二。SVM的標准形式之產生

有了上面的分析,下面我們就要來求任一點到分類超平面的距離,然后使最小距離最大化。

(1.)點到超平面的距離

假設超平面的方程為:wTx+ b = 0, 假設平面上的任意兩點:x' 和 x'' ,則兩點都滿足 wTx= -b;  wTx'' = -b;

w為超平面的法向量,  則有  wT (x'' x') = 0

那么,空間中的任意一點x到超平面的距離為x到超平面的一個向量到該超平面的單位法向量的投影,即:

所以,如果一個數據點與超平面的法向量同向,則乘積大於0;

         如果一個數據點與超平面的法向量反向,則乘積小於0.

即: y(wTxn+b) > 0.

所以SVM問題可以表示為:

 

(2.)縮放(下面關於問題的縮放解釋,將使用周老師西瓜書中的解釋,個人感覺更加直觀一些。)

將 y(wTxn+b) > 0 擴大一點,變為下圖的形式(原諒我發射暖黃(?)光線的小台燈)

這樣,margin = 2/||w||,而且只由邊界上的點確定,這些點酒稱為Support Vector.(這是個重要的結論,要牢記!!)

(3.)取倒數,將最大化問題變為最小化,得到如下SVM的標准形式:

 

 

三。使用QP解標准的SVM問題

通過以上的分析,我們得到了SVM的標准形式。那么,應該如何求解出參數w的最優解呢?

(1.)Gradient Decent?NoNoNo。因為這里是有s.t.條件的,無法找到一個下降的最優方向;

(2.)幸運的是,我們可以證明這個問題是convex凸函數

(3.)這類問題可以使用凸二次規划 quadratic programming(QP)的方法來求解。

求解方法如下:

QP的求解需要4個參數:Q(二次項系數), p(一次項系數), A(條件中的系數), c(條件中的常數)

將SVM的表達形式與之一一對應就可以了。得出四個系數之后,使用現在以后的計算包就可以輕而易舉的解決SVM問題。

如果原始的數據資料集不是線性可分的怎么辦?用Kernel Function將原始數據映射到線性空間中:zn = Φ(xn);

 (4.)與Regularization的對比:

對於正則化來說,目標是最小化Ein,但是擔心會overfitting,因此給出一定的限制條件;

對於SVM來說,目標是最小化wTw,但是限制是Ein = 0(或者稍微放松一下).

(兩者的限制和目標剛好相反)

 

四。Dual SVM

動機:對於一般的SVM來說,如果我們的初始數據集不是線性可分的,這時我們會需要核函數將數據相高維度映射一下。

(一般的核函數變換都是低維度-》高維度)那么如果對於一個映射之后的數據,如果它的維度非常大,將會對我們的SVM的QP求解造成很大的困難。因此我們的目標

是希望將SVM的形式轉化一下,在問題性質不變的前提小,使問題的求解仍然在原來的數據維度中。

(1.)Lagrange Multiplier(拉格朗日乘子法)

拉格朗日乘子法的思想是:將帶限制條件的優化問題用拉格朗日乘子整合到一起,然后將新加入的乘子也作為未知參數

然后將問題分別求偏導。

所以,用Lagrange Multiplier表示General SVM就是如下形式:

可能會有疑問,為什么可以將General SVM表示成拉格朗日乘子法呢?

這里給出一點直觀上的分析:

  • 目標是求w, b.  
    • 如果通過Lagrange Multiplier求得的w, b不滿足左邊General SVM的條件,則1-yn(wTzn+b)>0, 而αn>=0,所以最大化L函數將會導致α趨向無窮;
    • 如果通過Lagrange Multiplier求得的w, b不滿足左邊General SVM的條件,則1-yn(wTzn+b)<0,而αn>=0,所以最大化L函數將會導致α趨向0.
    • 兩者的目標是一致的!

對於L(b,w,α) = 1/2wTw + Σαn(1 - yn(wTzn+b)) 整體是一個二次函數,所以求一定條件下的最大值會非常麻煩,最好的辦法是轉化為求min。

下面的問題縮放的過程:

對上面圖片的解釋是:任意給出一個固定的α,則一堆α中最大的一定大於等於任意取出來的一個;

而對於取出的最好的一個α,所有的最大的中一定大於等於取出的這個最好的,所以,我們相當於將max, min換了一下位置。

將L(b, w, α)代入縮放后的式子:

對於上式,分別對b 和 w求偏導得:

然后將兩個等式帶回縮放后的式子,就得到了需要滿足KKT condition(Karush-Kuhn-Tucker的Dual SVM:

然后像求解General SVM問題一樣,用QP凸二次規划解Dual SVM問題,因此將系數對應過去就可以求的我們新加入的αn.(過程與General SVM的QP求解過程一致,這里不再贅述)

然后根據KKT條件的第三,第四個條件就可以求出w 與 b。

這里需要說明的一點:

  • 第四個條件:αn(1 - yn(wTzn+b)) = 0 中 要么αn = 0; 要么1 - yn(wTzn+b) = 0;
    • 再啰嗦一句:為什么會有這個條件呢?
      • 回到Lagrange Multiplier最初使用的地方:如果是不好的w, b,那么我們的式子會趨於無窮大;
      • 如果是好的w, b,那么我們的式子會趨於0,所有就得到了第四個條件的形式;
      • 這個條件是primal-inner optimal,是SVM本身就需要滿足的一個條件,也稱為complementary slackness條件。
    • 如果αn > 0,則我們才有辦法求出b,而這時有1 - yn(wTzn+b) = 0 !!
      • 1 - yn(wTzn+b) = 0(αn > 0)意味着我們使用的這些點剛剛好在邊界上(如那張黃黃的照片所示),就是support vector啊!

 

  • 滿足αn > 0 的那些點在boundary上,稱為support vector
  • w = Σαyz所以,只有support vector才會用來計算w;
  • b = yn - wTzn 所以,只有support vector才會用來計算b.

綜上,SVM可以看作是這樣一個問題:找出所有的support vector,然后用它們算出margin,其他的數據點一點都不重要。 

 

五。Kernel Support Vector Machine

對於一個線性不可分的資料,我們如果使用SVM作為分類器,則必須要使用Kernel function,將原來低維線性不可分的數據轉換為高維線性可分的數據,所以直接使用SVM的QP求解方法將不可避免

的使用轉換后的空間zn,如果zn維度特別高則會導致我們的計算非常復雜,因此想到使用Dual SVM來解決使用核函數的SVM來避免這種情況的發生。

那么,Dual SVM是如何避免在zn空間做計算的呢?

(1.)對於上面第四部分我們求出的QP求解的Dual SVM是如下形式:

可以看到,在求Q矩陣的時候需要zn與zn的內積,我們是否有比較簡單的方法可以將它簡化一下呢?

 (2.)假設我們使用二次轉換(多項式轉換)將原來的數據集的各種表示形式列出來:

如圖中紅框內所示,只要我們需要求zn與zn的內積,我們都可以轉化為在原來的數據空間中計算,所以對於二次轉換來說,

相當於將O(d2)的時間計算復雜度降為了O(d)。

 (3.)下面我們來看一下w與b的計算過程是否一樣可以簡化呢?

 

所以,但凡需要求zn與zn的內積,我們都將轉換到x空間中計算!!!

綜上,Dual SVM確實可以簡化含有核函數的QP計算過程。

下面開始導出Polynomial Kernel。

上面我們使用了Φ2 = (1, x1, x2, ...., x12....., xd2), 如果在一次項或者二次項前面加入一些系數,就得到了Polynomial Kernel。

Φ2 = (1, √2r x1, √2r x2, ...., r x12....., r xd2

更一般的形式寫為:

K(x, x') = 1 + 2r xTx' + r2(xTx')2 = (1 + rxTx')2

則General Polynomial Kernel SVM為:


  • 需要注意的是,在Polynomial Kernel中有3個參數:ζ , γ 和 Q,其中Q來控制SVM的復雜度。
  • 與之前模型不同的是,在SVM世界中做10次的多項式會簡單很多,確定ζ , γ就可以輕而易舉的計算;
  • 但大家也會擔心,太復雜的模型會不會overfitting?
    • 可能啊!但是SVM中有large margin的保證,會幫助我們稍微降低一下復雜度。

 

**************************我是分界線*****************************

 通過Dual SVM的分析,我們可以巧妙的將問題轉化一下,使之可以不用直接在高維度的z空間內做計算而是直接在原來的x空間內計算。

那么,我們不需要care x空間轉換后的z空間的維度是多少。可不可以將它轉換到一個無限維度的空間里呢?Of course!

假設對於只有一個維度的數據集x,我們使用高斯變換:

 在第三步我們使用指數函數在0處的泰勒展開式,就把數據集映射到了無限維度里面,然后導出了我們需要的kernel的形式。

 所以對於一般形式的Gaussian Kernel,我們加入一個γ作為控制高斯核SVM的參數,得到如下形式:

然后將Kernel代入SVM做決策的函數里面,就得到了:

 所以,Gaussian Kernel相當於將所有的Support Vector做高斯變換后的線性組合,

由於有這個性質,所以Gaussian Kernel也稱為Radial Basis Function(RBF) Kernel.

 但是使用Gaussian SVM特別需要注意γ的使用,因為大的γ會導致SVM更復雜,也就更容易overfitting,所以一定要慎用!

 

**************************我是分界線*****************************

比較Linear Kernel, Polynomial Kernel, Gaussian Kernel

  •  Linear Kernel:K(x, x') = xTx'
    • 優點是:
      • safe(一般不太會overfitting,所以線性的永遠是我們的首選方案);
      • fast,可以直接使用General SVM的QP方法來求解,比較迅速;
      • explainable,可解釋性較好,我們可以直接得到w, b,它們直接對應每個feature的權重。
    • 缺點是:
      • restrict:如果是線性不可分的資料就不太適用了!

 

  • Polynomial Kernel: K(x, x') = (ζ + γxTx')Q       
    • 優點是:
      • 我們可以通過控制Q的大小任意改變模型的復雜度,一定程度上解決線性不可分的問題;
    • 缺點是:
      • 含有三個參數,太多啦!

 

  • Gaussian Kernel:K(x, x') = exp(-γ ||x - x'||2
    • 優點是:
      • powerful:比線性的kernel更powerful;
      • bounded:比多項式核更好計算一點;
      • one  parameter only:只有一個參數
    • 缺點是:
      • mysterious:與線性核相反的是,可解釋性比較差(先將原始數據映射到一個無限維度中,然后找一個胖胖的邊界,將所有的數據點分隔開?)
      • too powerful!如果選擇了太大的γ,SVM希望將所有的數據都分開,將會導致產生太過復雜的模型而overfitting。

所以在實際應用中,一般是先使用線性的kernel,如果效果不好再使用gaussian kernel(小的γ)和多項式kernel(小的Q)。

 

**************************我是分界線*****************************

 如何自己來定義kernel呢?kernel應該滿足什么樣的條件呢?

首先回到kernel的意義上。

  • kernel具有什么含義呢?
    • 實際是內積,表示的是兩個數據點 x 和 x' 轉換到z空間后的相似性
  • 所以,什么樣的是valid kernel呢?需要滿足Mercer's consition:
    • symmetric
    • 核矩陣滿足半正定性(positive semi-definite)
    • 核矩陣是指:

所以,滿足了以上條件就可以定義自己的kernel function了~

 

六。Soft Margin Support Vector Machine

* 當訓練數據線性可分時,通過硬間隔最大化(hard margin maximization),學習一個線性的分類器,即線性可分支持向量機,又稱為硬間隔支持向量機;
* 當訓練數據近似線性可分時,通過軟間隔最大化(soft margin maximization),學習一個線性的分類器,即線性支持向量機,有稱為軟間隔支持向量機;
* 當訓練數據不可分時,通過使用kernel trick及軟間隔最大化,學習非線性支持向量機。

線性不可分

線性不可分意味着某些樣本點$(x_{i}, y_{i})$不能滿足函數間隔大於等於1的約束條件 -- $y_{i}(w^{T}x_{i}+b) \ge 1$. 所以對每個樣本點,引入一個松弛變量$\xi_{i} \ge 0$, 使函數間隔加上松弛變量大於等於1,這樣約束條件變為:
$y_{i}(w^{T}x_{i}+b) \ge 1 - \xi_{i}$,
同時,對於每個松弛變量$\xi_{i}$,要付出一個代價,目標函數由原來的$\frac{1}{2}\lVert w \rVert^{2}$變為:
$\frac{1}{2}\lVert w \rVert^{2} + C\sum_{i=1}^{N}\xi_{i}$
其中,C>0為懲罰參數。C越大表示對錯誤分類的懲罰力度越大,越小則表示懲罰力度越小。
目標函數表達的含義有:使$\frac{1}{2}\lVert w \rVert^{2}$盡量小即間隔盡量大,同時使誤分類點的個數盡量小。


Soft Margin SVM的標准形式
$min_{w, b, \xi}\frac{1}{2}\lVert w \rVert^{2} + C\sum_{i=1}^{N}\xi_{i}$
$s.t. y_{i}(w^{T}x_{i} + b) \ge 1 - \xi_{i}, i = 1,2,3...,N$
$s.t. \xi_{i} \ge 0$

 

 

 

 (未完待續)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM