(寫在前面:機器學習入行快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.
即: yn (wTxn+b) > 0.
所以SVM問題可以表示為:
(2.)縮放(下面關於問題的縮放解釋,將使用周老師西瓜書中的解釋,個人感覺更加直觀一些。)
將 yn (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 和 wi 求偏導得:
然后將兩個等式帶回縮放后的式子,就得到了需要滿足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 = Σαn yn zn 所以,只有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)
更一般的形式寫為:
K2 (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$
(未完待續)