【7】SVM

1.前言

在神經網絡火之前,SVM是一種很強大很火的算法,只是神經網絡火了以後,SVM就逐漸“沒落”了,但這並不妨礙它在傳統算法裏的強大。在很多時候,他也是十分有用的。
fisher感知器一樣,SVM在分類任務中也是要找一個最優的超平面,讓這個超平面能夠分開不同類別的樣本,使總的錯誤率最小。只是三種算法求最優超平面的方法不一樣。最優的超平面也就意味着模型的泛化能力強。

對於SVM來說,求最優超平面的方法就是最大化分類間隔。因爲在空間中,能分開樣本的超平面不止一個,很可能是無數個,要找到最好(或者可以認爲最好)的那一個,SVM的做法就是,讓不同類別的樣本之間支持向量間隔最大。
加入我們分類這樣一個一維的數據:
在這裏插入圖片描述
我們的分界面爲橙色的豎線,顯然,雖然能夠把樣本分開,但是離其中一個類別太近了,這很可能導致模型泛化能力不強。

在這裏插入圖片描述
再比如,在上圖之中,幾條黑色直線都能將兩類樣本分開,但是,直觀來說,較粗的那一條顯然好一點,而另外幾條離某一類樣本太近了,泛化能力很可能不強。

2.間隔和支持向量(基本原理)

在空間中,任何一個超平面都可以使用下面的式子表示。
在這裏插入圖片描述
其中ω = (ω1,ω2,···,ωd)爲法向量,垂直於超平面,決定了超平面的方向;b爲偏移項,決定了超平面與原點之間的距離。
劃分超平面可以被法向量ω和位移b確定,將其記爲(ω,b)。樣本空間中任意點到超平面(ω,b)的距離可寫爲:
在這裏插入圖片描述
爲了更好的理解上面的公式,我們看三維空間中點(x1,y1,z1)到平面Ax+By+Cz+ D = 0的距離計算公式爲:
在這裏插入圖片描述
假設超平面(ω,b)能將訓練樣本正確分類,即對於(xi,yi)∈D,若yi = +1,則有ωTxi + b > 0;若yi = -1,則有 ωTxi + b < 0。

在這裏插入圖片描述
注意:上面的公式,我們讓ωTxi + b大於1而不是大於0纔算正樣本,小於-1而不是小於0纔算負樣本。這樣做對於之後的計算有好處。

如圖6.2所示,距離超平面最近的幾個訓練樣本點使式(6.3)成立,他們被稱爲“支持向量”(support vector),兩個異類支持向量到超平面的距離之和爲:
在這裏插入圖片描述
這就是“間隔”(margin)
在這裏插入圖片描述
預找到具有“最大間隔”的劃分超平面,也就是找到滿足式(6.3)中約束的參數ω和b,使得γ最大,即:
在這裏插入圖片描述
上面的間隔公式分子是常數,所以最大化間隔,只需要最小分母||ω||就行了。而爲了更簡便,我們再將最小化分母轉化爲最小化||ω||2。顯然,這是等價的。而且,這樣做(加一個平方)的好處是將原來的問題變爲一個凸函數來解決。
在這裏插入圖片描述
以上便是SVM的基本原理,是不是很簡單。

3.對偶問題

我們希望利用式(6.6)來得到最大間隔劃分超平面對應的模型:
在這裏插入圖片描述
雖然,我們使用平方把上面的問題變爲一個凸優化的問題了,便於我們使用已有的工具包求解,但是,我們還有更簡單高效的方法。
對式(6.6)使用拉格朗日乘子法(先不用考慮拉格朗日乘子法具體怎麼做的,只需要瞭解通過它,我們把原來的問題轉化爲另一個問題,這兩個問題是等價的)可得到其**“對偶問題”(dual problem)**。具體來說,就是對式(6.6)的每條約束添加拉格朗日乘子 αi ≥ 0,則該問題的拉格朗日函數可寫爲:
在這裏插入圖片描述
在這裏插入圖片描述
上面的推導過程如下:
在這裏插入圖片描述
將式(6.9)代入(6.8),即可將L(ω,b,α)中的ω和b消去,再考慮式(6.10)的約束,就得到式(6.6)的對偶問題:
在這裏插入圖片描述
在這裏插入圖片描述
上面帶入之後的推導過程如下:
在這裏插入圖片描述
其中要注意αi,yi均爲標量。

再重複一下我們的目的:
我們想要使間隔最大,即找一個w和b在滿足條件下使得||w||2最小,即找一組w,b,使得關於α的拉格朗日函數L的上界最小,即找一組α使得關於w和b的函數L的下屆最大。(至於原因,之後我會嘗試使用拉格朗日乘子法介紹一下)

解出α之後,求出w和b即可得到模型:
在這裏插入圖片描述
從對偶問題(6.11)接觸的αi是式(6.8)中的拉格朗日乘子,它恰對應着訓練樣本(xi,yi),注意到式(6.6)中有不等式約束,因此上述過程需滿足KKT(karush-Kuhn-Tucker)條件,即要求:
在這裏插入圖片描述
於是,對任意樣本(xi,yi)總有αi = 0或yif(xi)=1,若alphai=0,則該樣本不會在式(6.12)的求和中出現,也就不會對f(x)有任何影響;若αi>0,則必有yif(xi)=1,所對應的樣本點位於最大間隔邊界上,是一個支持向量。這顯示出支持向量機的一個重要性質:訓練完成後,大部分的訓練樣本都不需要保留,最終模型僅與支持向量有關

學過數學建模的都知道,對於式(6.11)的這樣的問題,就是一個規劃問題,而且是一個二次規劃的問題,既然如此,就可以通過常用的二次規劃算法求解。然而,該問題的規模正比於訓練樣本數,這會在實際任務中造成很大的開銷(比如最近做的一個比賽有幾百萬個樣本)。爲了避開這個障礙,人們通過利用問題本身的特性,提出了很多高效的算法,SMO(Sequential Minimal Optimization)是其中一個著名的代表[Platt, 1998]。

SMO的基本思路是:先固定αI之外的所有參數,然後求αI上的極值。由於存在約束Σi=1mαIyi = 0,若固定αi之外的其他變量。則αi可由其他變量導出。於是SMO每次選擇兩個變量αI和αj,並固定其他參數。這樣,在參數初始化後,SMO不斷執行如下兩個步驟直至收斂:

  • 選取一對需更新的變量αi和αj
  • 固定αi和·αj之外的參數,求解式(6.11)獲得更新後的alphai和·αj

4.核函數(非線性SVM)

上面的討論,都是基於數據是線性可分的情況,如果線性不可分呢?SVM就不能用了嗎?當然可以的
在這裏插入圖片描述
雖然,像上面這樣的數據是線性不可分的,無法用簡單的來解決,但是,還有其他基於SVM的方法可以解決這種問題。
比如,上面圖中的右圖,將原始數據從二維映射到三維,這要找到一個合適的映射函數,就可以在三維空間中將樣本分開。已經有人證明:如果原始空間是有限維,即維數有限,那麼一定存在一個高維特徵空間使樣本可分。

令φ(x)表示將x映射後的特徵向量,於是,在特徵空間中劃分超平面對應的模型可表示爲:
在這裏插入圖片描述
在這裏插入圖片描述
可以看出,非線性的SVM無非就是把x映射到Φ(x)。之後,x的一切運算都變爲φ(x)的運算。

求解式(6.21)涉及到計算φ(xiTφ(xj),這是樣本xi與xj映射到特徵空間之後的內積。由於特徵空間維數可能很高,甚至可能是無窮維,因此直接計算φ(xiTφ(xj)通常來說比較困難。爲了避開這個障礙,可以設想這樣一個函數:
在這裏插入圖片描述
即xi與xj在特徵空間的內積等於他們在原始樣本空間中通過函數κ(·,·)計算的結果。有了這樣的函數,我們就不必直接去計算高維甚至是無窮維特徵空間中的內積,於是式(6.21)可重寫爲:
在這裏插入圖片描述
這裏的函數κ(·,·)就是“核函數(kernel function)。式(6.24)顯示出模型最優解可通過訓練樣本的核函數展開,這一展式亦稱爲”支持向量展式“(dupport vector expansion)
顯然,若已知合適映射φ(·)的具體形式,則可寫出核函數κ(·,·)。但是,在現實中我們通常不知道合適的φ(·)到底是啥樣的。針對不同的問題,φ(·)也是不一樣的,需要就事論事。這就麻煩了。我們不知道核函數是否存在,也不知道什麼樣的函數纔是合適的核函數。爲了解決這個問題,提出了下面的定理。

**定理6.1 (核函數)**:令
定理6.1表明,只要一個對稱函數所對應的核矩陣半正定,它就能作爲核函數使用(可能不是最好的核函數,但是,確實是一個可以用的核函數)。事實上,對於一個半正定核矩陣總能找到一個與之對應的映射φ。換言之,任何一個核函數都隱式地定義了一個”再生核希爾伯特空間“的特徵空間。

通過上面的討論,我們希望樣本在特徵空間內線性可分,因此特徵空間的好壞對SVM的性能至關重要。需要注意的是,在不知道特徵映射的形式時,我們不知道什麼樣的核函數纔是合適的,而核函數也僅是隱式地定義了這個特徵空間。於是,”核函數選擇“成爲支持SVM的最大變數,若核函數選擇不合適,意味着樣本被映射到一個不合適的特徵空間,很可能導致性能不佳。

遺憾的是,我們卻是無法直接得出一個函數是不是合適的核函數,所以通常來說,我們會從幾個常用的核函數裏選擇來嘗試。下面是幾個常用的核函數:
在這裏插入圖片描述
其中,高斯核是使用最多的一個。
除了上面的幾個核函數,由於和函數的運算性質,我們還可以得到其他的核函數:
在這裏插入圖片描述
在這裏插入圖片描述

5.軟間隔與正則化

上面我們所討論的全部都是線性可分的情況(即便在樣本空間裏線性不可分,我們也是通過轉化到高維空間變爲線性可分),如果我們不轉到高維空間或者即便換到高維空間也沒有用呢?有時候,由於有錯誤的訓練樣本或者異常的樣本,適當的錯分反而會提高模型的泛化性能。更何況,線性可分這種情況在現實世界裏很少見。
所以,我們就需要另外一種方法來解決線性不可分的情況。

爲此,我們引入了”軟間隔“(soft margin)的概念,如圖所示:
在這裏插入圖片描述
具體來說,前面介紹的支持向量機形式是要求所有樣本均滿足式(6.3),即所有樣本都必須劃分正確,這被稱爲”硬間隔“(hard margin),而軟間隔則是允許某些樣本不滿足約束:
在這裏插入圖片描述
當然,在最大化間隔的同時,不滿足約束的樣本應該儘可能少,於是,優化目標可寫爲:
在這裏插入圖片描述
顯然,C爲無窮大時,式(6.29)迫使所有樣本均滿足約束(6.28),於是,式(6.29)等價於(6.6);當C取有限值時,式(6.29)允許有一些樣本不滿足約束。
然而,l0/1非凸,非連續,數學性質不太好。使得式(6.29)不易直接求解。於是,人們通常用一些函數來代替l0/1,稱爲”替代損失“(surrogate loss)。替代損失函數一般具有較好的數學性質,如他們通常是凸的連續函數且是l0/1的上界。下面是三種常用的替代損失函數:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這就是常用的”軟間隔支持向量機“

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
對於軟間隔的理解,限制我基本的思想即可。

6.支持向量機迴歸

我們知道,機器學習的兩大基本任務就是分類和迴歸,而一般來說,我們講一個模型,都會先介紹分類,但是模型不止可以做分類,都可以去做迴歸。SVM也一樣,這時,就是支持向量機迴歸(SVR)。
迴歸就是要擬合一條線來逼近已有的樣本點,使得樣本點到這個線的距離和最近。但是,SVR和普通的迴歸還有點區別,普通的迴歸是要預測值和真實值完全相同,這個樣本的損失才爲0.而SVR是隻要預測值和真實值之間的距離不大於一個值,就當作損失爲0.我們把這個值叫做:ε。所以,我們可以以擬合的線爲中心,在距離其2ε的範圍構建一個間隔帶,若樣本落入間隔帶,即被認爲預測正確。
在這裏插入圖片描述
於是,SVR問題可形式化爲:
在這裏插入圖片描述

這裏面,如果是普通的迴歸,只有後一項就行了,因爲後一項是不在誤差帶內的樣本點貢獻的。加了第一項,就還是SVM的主要思想,通過畫圖可知,兩個誤差帶邊緣分別爲:f(x)=ε和f(x)=-ε,他們之間的距離是2ε/||w||,最小化1/2||w||2,就是最大化兩個誤差帶邊緣的距離(ε只是表示WTX+b=0,這條線上下平移ε)。可以說是在固定上下平移量的同時,儘可能讓誤差帶寬,當然,同時還要考慮後面一項。(我是暫時這樣理解的,正確與否日後再求證)

其中,C爲正則化常數,le是圖6.7所示的ε-不敏感損失函數:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
上述過程需滿足KKT條件。即要求:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Appendix

一篇好文:學習SVM,這篇文章就夠了!

1.拉格朗日乘子法

(1)無約束求極值
如果要求一個函數的級值,我們直接求導或偏導就行了。但是如果是帶約束的優化問題呢?直接求導的話就忽略了約束,所以,如果有約束,不能直接對原函數進行求導。
(2)等式約束求極值
如果是等式約束,一般還比較好說。使用消元法把約束裏的某一個或幾個變量用其他變量表示,再代入需要求極值的函數裏,再按照普通的函數求極值就行了。

但是,有時候約束條件太複雜,很難進行消元甚至壓根不能消元。所以,還有另外一種方法:拉格朗日乘子法。

一片推薦的blog:馬同學

來源:知乎
在這裏插入圖片描述
在上圖中,函數f和約束g在某一點出相切,在這一點,兩個函數的梯度必然成比例。如下圖:
在這裏插入圖片描述
當然,λ可正可負。
如果從代數角度來看的話:
在這裏插入圖片描述
其中g(x,y(x))是y可以用x表示。利用鏈式法則分別把f和g對x求導之後,發現二者均有dy/dx。而兩個函數的dy/dx成比例λ。所以,可得出存在λ,滿足大括號裏的三個條件。

通過這三個條件,我們就可以解出函數的極值了。

例題

在這裏插入圖片描述
在這裏插入圖片描述

拉格朗日函數

更一般的,我們可以把上面的關係式寫成下面的形式:
在這裏插入圖片描述
這就是拉格朗日函數
上式中λk是約束的比例係數。一個約束就有一個λ。hk是第k個約束。

例題

例題及部分解題來源於:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件
在這裏插入圖片描述
從上題可以看出,兩種形式拉格朗日乘子法是一樣的。只不過使用拉格朗日函數更具有一般性。

但是,我們也看到了上面的方法只是針對等式約束的,如果是不等式約束怎麼辦?這就需要用到KKT條件了。

2.KKT條件(Kuhn-Tucker condition)

(3)不等式約束
首先,我們知道,雖然不等式約束有大於(等於)和小於(等於),但是,都可以轉化爲小於(等於)。所以,一個標準的約束優化問題可以寫爲:
在這裏插入圖片描述
這就是標準的優化問題,其對應的拉格朗日函數爲:
在這裏插入圖片描述
其中f(x)是原目標函數,hi(x)是第i個等式約束條件,λi是對應的約束係數,gi是不等式約束,ui是對應的約束係數。

所謂的KKT條件是說下面這些條件:
(1)拉格朗日函數L(X, λ, μ)對X求導爲零;

(2)h(x) =0; (等式約束)

(3)μ*g(x) = 0; (不等式約束)
(4)μ ≥0
(5)g≤0
    
 最主要的就是上面第三條,因爲第一和第二條就是普通的等式約束下的拉格朗日乘子法。
 本來g(x)<=0,如果滿足a*g(x)=0,那麼只能a=0或者g=0.
 
而後面的(3)到(5)即爲 KKT 條件。它的含義是這個優化問題的極值點一定滿足這組方程組。(不是極值點也可能會滿足,但是不會存在某個極值點不滿足的情況)它也是原來的優化問題取得極值的必要條件,解出來了極值點之後還是要代入驗證的。但是因爲約束比較多,情況比較複雜,KKT 條件並不是對於任何情況都是滿足的。
在這裏插入圖片描述

SVM這一章公式非常多,沒必要一下子就全部搞明白。可以先理解基本思想和方法。

3.對偶問題的再解釋

來源:知乎
上面我們已經介紹過對偶問題了,但是沒有詳細的解釋,這裏再說一下。

附錄1和2已經介紹了拉格朗日乘子法,看起來還是比較簡單的,但是,那些都是簡單的問題,可以直接求解出參數的值,如果函數關係非常複雜,根本求不出連x和y用λ表示都不可能,這時候,就需要使用對偶問題了。

還記得我們上面的問題嗎:
在這裏插入圖片描述
對於更一般化的優化問題:
在這裏插入圖片描述
對應的拉格朗日函數爲:
在這裏插入圖片描述
上式中,ci是一個不等式(小於等於)約束,對任意的x,ci都小於等於0.對於h,本來就是等式約束,所以對所有x,h都爲0。(假設所有的x都滿足約束,不存在不滿足約束的)
這樣一來,對於上式,其最大值是f(x)。
即定義這樣一個函數:
在這裏插入圖片描述

所以原始問題可以轉化爲:
在這裏插入圖片描述
有一個定理:

若原始問題和對偶問題都有最優值,則對偶問題最優值d∗ 原始問題最優值p∗
在這裏插入圖片描述
所以,我們就可以解決對偶問題,來間接求出原始問題。這也是爲什麼式(6.11)是max的原因了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章