軒田機器學習技法課程學習筆記1 — Linear Support Vector Machine

紅色石頭發表於2018-07-25

關於臺灣大學林軒田老師的《機器學習基石》課程,我們已經總結了16節課的筆記。這裡附上基石第一節課的部落格地址:

臺灣大學林軒田機器學習基石課程學習筆記1 — The Learning Problem

本系列同樣分成16節課,將會介紹《機器學習基石》的進階版《機器學習技法》,更深入地探討機器學習一些高階演算法和技巧。

1. Large-Margin Separating Hyperplane

回顧一下我們之前介紹了linear classification,對於線性可分的情況,我們可以使用PLA/pocket演算法在平面或者超平面上把正負類分開。

例如對平面2D這種情況,我們可以找到一條直線,能將正類和負類完全分開。但是,這樣的直線通常不止一條,如下圖所示。那麼,下圖中的三條分類線都能將資料分開,但是哪條線更好呢?

這三條直線都是由PLA/pocket演算法不斷修正錯誤點而最終產生的,整個確定直線形狀的過程是隨機的。單從分類效果上看,這三條直線都滿足要求,而且都滿足VC bound要求,模型複雜度\Omega(H)是一樣的,即具有一定的泛化能力。但是,如果要選擇的話,憑第一感覺,我們還是會選擇第三條直線,感覺它的分類效果更好一些。那這又是為什麼呢?

先給個簡單解釋,一般情況下,訓練樣本外的測量資料應該分佈在訓練樣本附近,但與訓練樣本的位置有一些偏差。若要保證對未知的測量資料也能進行正確分類,最好讓分類直線距離正類負類的點都有一定的距離。這樣能讓每個樣本點附近的圓形區域是“安全”的。圓形區域越大,表示分類直線對測量資料誤差的容忍性越高,越“安全”。

如上圖所示,左邊的點距離分類直線的最小距離很小,它的圓形區域很小。那麼,這種情況下,分類線對測量資料誤差的容忍性就很差,測量資料與樣本資料稍有偏差,很有可能就被誤分。而右邊的點距離分類直線的最小距離更大一些,其圓形區域也比較大。這種情況下,分類線對測量資料誤差的容忍性就相對來說大很多,不容易誤分。也就是說,左邊分類線和右邊分類線的最大區別是對這類測量誤差的容忍度不同。

那麼,如果每一筆訓練資料距離分類線越遠的話,就表示分型別可以忍受更多的測量誤差(noise)。我們之前在《機器學習基石》中介紹過,noise是造成overfitting的主要原因,而測量誤差也是一種noise。所以,如果分類線對測量誤差的容忍性越好的話,表示這是一條不錯的分類線。那麼,我們的目標就是找到這樣一條最“健壯”的線,即距離資料點越遠越好。

上面我們用圓形區域表示分類線能夠容忍多少誤差,也就相當於計算點到直線的距離。距離越大,表示直線越“胖”,越能容忍誤差;距離越小,表示直線越“瘦”,越不能容忍誤差。越胖越好(像楊貴妃那樣的哦~)。

如何定義分類線有多胖,就是看距離分類線最近的點與分類線的距離,我們把它用margin表示。分類線由權重w決定,目的就是找到使margin最大時對應的w值。整體來說,我們的目標就是找到這樣的分類線並滿足下列條件:

  • 分類正確,即y_nw^Tx_n>0
  • margin最大化

2. Standard Large-Margin Problem

要讓margin最大,即讓離分類線最近的點到分類線距離最大,我們先來看一下如何計算點到分類線的距離。

首先,我們將權重w(w_0,w_1,\cdots,w_d)中的w_0拿出來,用b表示。同時省去x_0項。這樣,hypothesis就變成了h(x)=sign(w^Tx+b)

下面,利用圖解的方式,詳細推導如何計算點到分類平面的距離:

如上圖所示,平面上有兩個點:x’和x”。因為這兩個點都在分類平面上,所以它們都滿足:

w^Tx’+b=0

w^Tx”+b=0

同時可以得到:w^Tx’=-bw^Tx”=-b,則有:

w^T(x”-x’)=w^Tx”-w^Tx’=-b-(-b)=0

(x”-x’)是平面上的任一向量,(x”-x’)與w內積為0,表示(x”-x’)垂直於w,那麼w就是平面的法向量。

現在,若要計算平面外一點x到該平面的距離,做法是隻要將向量(x-x’)投影到垂直於該平面的方向(即w方向)上就可以了。那麼,令(x”-x’)與w的夾角為\theta,距離就可以表示為:

distance(x,b,w)=|(x-x’)cos(\theta)|=|\ ||x-x’||\cdot \frac{(x-x’)w}{||x-x’||\cdot ||w||}|=\frac1{||w||}|w^Tx-w^Tx’|

代入w^Tx’=-b,可得:

distance(x,b,w)=\frac1{||w||}|w^Tx+b|

點到分類面(Separating Hyperplane)的距離已經算出來了。基於這個分類面,所有的點均滿足:y_n(w^Tx_n+b)>0,表示所有點都分類正確,則distance公式就可以變換成:

distance(x,b,w)=\frac1{||w||}y_n(w^Tx_n+b)

那麼,我們的目標形式就轉換為:

對上面的式子還不容易求解,我們繼續對它進行簡化。我們知道分類面w^Tx+b=03w^Tx+3b=0其實是一樣的。也就是說,對w和b進行同樣的縮放還會得到同一分類面。所以,為了簡化計算,我們令距離分類滿最近的點滿足y_n(w^Tx_n+b)=1。那我們所要求的margin就變成了:

margin(b,w)=\frac1{||w||}

這樣,目標形式就簡化為:

這裡可以省略條件:y_n(w^Tx_n+b)>0,因為滿足條件y_n(w^Tx_n+b)=1必然滿足大於零的條件。我們的目標就是根據這個條件,計算\frac1{||w||}的最大值。

剛剛我們講的距離分類滿最近的點滿足y_n(w^Tx_n+b)=1,也就是說對所有的點滿足y_n(w^Tx_n+b)\geq 1。另外,因為最小化問題我們最熟悉也最好解,所以可以把目標\frac1{||w||}最大化轉化為計算\frac12w^Tw的最小化問題。

如上圖所示,最終的條件就是y_n(w^Tx_n+b)\geq 1,而我們的目標就是最小化\frac12w^Tw值。

3. Support Vector Machine

現在,條件和目標變成:

現在,舉個例子,假如平面上有四個點,兩個正類,兩個負類:

不同點的座標加上條件y_n(w^Tx_n+b)\geq 1,可以得到:

最終,我們得到的條件是:

w_1\geq +1

w_2\leq -1

而我們的目標是:

min\ \frac12w^Tw=\frac12(w_1^2+w_2^2)\geq 1

目標最小值為1,即w_1=1,\ w_2=-1,\ b=-1,那麼這個例子就得到了最佳分類面的解,如圖所示,且margin(b,w)=\frac1{||w||}=\frac1{\sqrt2}。分類面的表示式為:

x_1-x_2-1=0

最終我們得到的矩的表示式為:

g_{SVM}(x)=sign(x_1-x_2-1)

Support Vector Machine(SVM)這個名字從何而來?為什麼把這種分類面解法稱為支援向量機呢?這是因為分類面僅僅由分類面的兩邊距離它最近的幾個點決定的,其它點對分類面沒有影響。決定分類面的幾個點稱之為支援向量(Support Vector),好比這些點“支撐”著分類面。而利用Support Vector得到最佳分類面的方法,稱之為支援向量機(Support Vector Machine)。

下面介紹SVM的一般求解方法。先寫下我們的條件和目標:

這是一個典型的二次規劃問題,即Quadratic Programming(QP)。因為SVM的目標是關於w的二次函式,條件是關於w和b的一次函式,所以,它的求解過程還是比較容易的,可以使用一些軟體(例如Matlab)自帶的二次規劃的庫函式來求解。下圖給出SVM與標準二次規劃問題的引數對應關係:

那麼,線性SVM演算法可以總結為三步:

  • 計算對應的二次規劃引數Q,p,A,c
  • 根據二次規劃庫函式,計算b,w

  • 將b和w代入g_{SVM},得到最佳分類面

這種方法稱為Linear Hard-Margin SVM Algorithm。如果是非線性的,例如包含x的高階項,那麼可以使用我們之前在《機器學習基石》課程中介紹的特徵轉換的方法,先作z_n=\Phi(x_n)的特徵變換,從非線性的x域對映到線性的z域空間,再利用Linear Hard-Margin SVM Algorithm求解即可。

4. Reasons behind Large-Margin Hyperplane

從視覺和直覺的角度,我們認為Large-Margin Hyperplane的分類效果更好。SVM的這種思想其實與我們之前介紹的機器學習非常重要的正則化regularization思想很類似。regularization的目標是將E_{in}最小化,條件是w^Tw\leq C;SVM的目標是w^Tw最小化,條件是y_n(w^Tx_n+b)\geq1,即保證了E_{in}=0。有趣的是,regularization與SVM的目標和限制條件分別對調了。其實,考慮的內容是類似的,效果也是相近的。SVM也可以說是一種weight-decay regularization,限制條件是E_{in}=0

從另一方面來看,Large-Margin會限制Dichotomies的個數。這從視覺上也很好理解,假如一條分類面越“胖”,即對應Large-Margin,那麼它可能shtter的點的個數就可能越少:

之前的《機器學習基石》課程中介紹過,Dichotomies與VC Dimension是緊密聯絡的。也就是說如果Dichotomies越少,那麼複雜度就越低,即有效的VC Dimension就越小,得到E_{out}\approx E_{in},泛化能力強。

下面我們從概念的角度推導一下為什麼dichotomies越少,VC Dimension就越少。首先我們考慮一下Large-Margin演演算法的VC Dimension,記為d_{vc}(A_{\rho})d_{vc}(A_{\rho})與資料有關,而我們之前介紹的d_{vc}與資料無關。

假如平面上有3個點分佈在單位圓上,如果Margin為0,即\rho=0,這條細細的直線可以很容易將圓上任意三點分開(shatter),就能得到它的d_{vc}=3。如果\rho>\frac{\sqrt3}{2},這條粗粗的線無論如何都不能將圓上的任一三點全完分開(no shatter),因為圓上必然至少存在兩個點的距離小於\sqrt3,那麼其對應d的d_{vc}<3

那麼,一般地,在d維空間,當資料點分佈在半徑為R的超球體內時,得到的d_{vc}(A_{\rho})滿足下列不等式:

之前介紹的Perceptrons的VC Dimension為d+1,這裡得到的結果是Large-Margin演演算法的d_{vc}(A_{\rho})\leq d+1。所以,由於Large-Margin,得到的dichotomies個數減少,從而VC Dimension也減少了。VC Dimension減少降低了模型複雜度,提高了泛化能力。

5. 總結

本節課主要介紹了線性支援向量機(Linear Support Vector Machine)。我們先從視覺角度出發,希望得到一個比較“胖”的分類面,即滿足所有的點距離分類面都儘可能遠。然後,我們透過一步步推導和簡化,最終把這個問題轉換為標準的二次規劃(QP)問題。二次規劃問題可以使用Matlab等軟體來進行求解,得到我們要求的w和b,確定分類面。這種方法背後的原理其實就是減少了dichotomies的種類,減少了有效的VC Dimension數量,從而讓機器學習的模型具有更好的泛化能力。

註明:

文章中所有的圖片均來自臺灣大學林軒田《機器學習技法》課程

更多AI資源請關注公眾號:AI有道(ID:redstonewill)

相關文章