深入淺出SVM(支持向量機)

支持向量機是機器學習領域中經典的分類算法之一,最早由Corinna Cortes, Vladimir Vapnik於1995年提出。對原論文感興趣的讀者可下載此論文Support-Vector Network

簡介

分類學習的最基本思想就是基於給定的訓練集DD,在樣本空間中尋找一個劃分超平面,將不同類別的樣本分開。假如有一樣本集D={(x1,y1),(x2,y2),,(xm,ym)}D = \{(x_1, y_1), (x_2, y_2), \dots, (x_m, y_m) \},它的劃分超平面可能存在很多個,如下圖所示。那我們應該選取哪一個呢?

svm1

直觀上看,我們應該選取正中間的劃分超平面,即圖中的綠色超平面。因爲該劃分超平面對訓練樣本的數據擾動“容忍性”最好,即魯棒性最好,泛化能力最強。而且的確有理論證明,擁有最大間隔的劃分超平面泛化能力最強,如下圖所示(摘自常虹老師的《Support Vector Machine》)。其中,間隔就是距離劃分超平面最近的點與劃分超平面間的距離。

svm2

在樣本空間中,劃分超平面可通過如下線性方程描述,

wTx+b=0\bf{w}^{T}\bf{x} + b = 0

其中,w=(w1,w2,,wn)\bf{w} = (w_1, w_2, \dots, w_n)是法向量,決定了超平面的方向。bb是位移項,決定了超平面與源點間的截距。因此,樣本空間中任意點xx到劃分超平面的距離即爲,

d=wT+bwd = \frac{|\bf{w}^{T} + b|}{||\bf{w}||}

假定超平面能將訓練樣本正確分類,即對於 (xi,yi)D\forall\ (x_i, y_i) \in D,如果yi=1y_i = 1,則wTx+b>0\bf{w}^{T}\bf{x} + b > 0,相反則有wTx+b<0\bf{w}^{T}\bf{x} + b < 0,即有

{wTxi+b1,yi=1wTxi+b1,yi=1 \left\{ \begin{aligned} \bf{w}^{T}\bf{x_i} + b \ge 1 &, y_i = 1 \\ \bf{w}^{T}\bf{x_i} + b \le 1 &, y_i = -1 \\ \end{aligned} \right.

可能有讀者疑問,之前不是以0爲樣本劃分的分界點嗎?這裏又爲何改爲1了?其實,如果超平面能正確劃分樣本,那麼總存在縮放能使得上式成立。

此外,我們將使上式等號成立的點稱爲支持向量,兩個異類的支持向量到超平面的距離之和,

γ=2w\gamma = \frac{2}{||\bf{w}||}

即爲我們前面所說的間隔。因此,爲找到最大間隔的劃分超平面以使得模型泛化能力最強,我們需要,

max2ws.t.yi(wTxi+b)1,i=1,2,,m \begin{aligned} &max \quad \frac{2}{||\bf{w}||} \\ &s.t. \quad y_i(\bf{w}^{T}x_i + b) \ge 1, i = 1, 2, \dots, m \end{aligned}

不難看出,最大化2w\frac{2}{||\bf{w}||}等價於最小化w2||\bf{w}||^{2}(後面,我會解釋爲什麼需要這樣改寫)。因此,上式可改寫爲,

min12w2s.t.yi(wTxi+b)1,i=1,2,,m \begin{aligned} &min \quad \frac{1}{2}||\bf{w}||^{2}\\ &s.t. \quad y_i(\bf{w}^{T}x_i + b) \ge 1, i = 1, 2, \dots, m \end{aligned}

這就是支持向量機的原型。

算法推導

前面說到,爲獲得最優劃分超平面,我們需要求解下式,
min12w2s.t.yi(wTxi+b)1,i=1,2,,m \begin{aligned} &min \quad \frac{1}{2}||\bf{w}||^{2} \\ &\begin{aligned} s.t. \quad &y_i(\bf{w}^{T}x_i + b) \ge 1, i = 1, 2, \dots, m \end{aligned} \end{aligned}

這是一個典型的二次優化問題。與一般的優化問題相比,二次優化是較難解決的。然而,“穩住,我們能贏!”。因爲,我們有拉格朗日大神!(再次拜服拉格朗日老前輩)。利用大名鼎鼎的拉格朗日乘子法,我們可以輕鬆解決這類問題。對拉格朗日問題感興趣的同學,可以觀看我的另一篇博客——原來拉格朗日乘子法這麼簡單!

因此,根據拉格朗日乘子法,我們有,

L(w,b,λ)=12w2+i=1mλi(1yi(wTxi+b)) L(\mathbf{w}, b, \mathbf{\lambda}) = \frac{1}{2}||\mathbf{w}||^{2} + \sum_{i = 1}^{m}\lambda_i(1 - y_i(\mathbf{w}^{T}\mathbf{x}_i + b))

其中,λ=(λ1,λ2,,λm),λi0\mathbf{\lambda} = (\lambda_1, \lambda_2, \dots, \lambda_m), \lambda_i \ge 0是對應的拉格朗日乘子。令L(w,b,λ)L(\mathbf{w}, b, \mathbf{\lambda})w\mathbf{w}bb求偏導,併爲零,得,

w=i=1mλiyixi0=i=1mλiyi \begin{aligned} \mathbf{w} &= \sum_{i = 1}^{m}\lambda_iy_i\mathbf{x}_i \\ 0 &= \sum_{i = 1}^{m}\lambda_iy_i \\ \end{aligned}

將上式代入拉格朗日函數,可得,

maxλi=1mλi12i=1mj=1mλiλjyiyjxiTxjs.t.i=1mλiyi=0λi0,i=1,2,,m \begin{aligned} &\max\limits_{\mathbf{\lambda}} \quad \sum_{i = 1}^{m}\lambda_i - \frac{1}{2}\sum_{i = 1}^{m}\sum_{j = 1}^{m} \lambda_i \lambda_j y_i y_j \mathbf{x}_i^{T} \mathbf{x}_j \\ &\begin{aligned} s.t. \qquad &\sum_{i = 1}^{m}\lambda_iy_i = 0 \\ &\lambda_i \ge 0, i = 1, 2, \dots, m \\ \end{aligned} \end{aligned}

因此,求解出λ\mathbf{\lambda}之後,即可得到模型,

f(x)=wTx+b=i=1mλiyix+b \begin{aligned} f(\mathbf{x}) &= \mathbf{w}^{T}\mathbf{x} + b \\ &= \sum_{i=1}^{m} \lambda_iy_i \mathbf{x} + b \\ \end{aligned}

而在求解過程中,根據拉格朗日乘子法,我們不難發現上述過程滿足KKT條件

{λi0yif(xi)10λi(yif(xi)1)=0 \left\{ \begin{aligned} \lambda_i &\ge 0 \\ y_if(\mathbf{x}_i) - 1 & \ge 0 \\ \lambda_i(y_if(\mathbf{x}_i) - 1) &= 0\\ \end{aligned} \right.

因此,對於任意樣本(xi,yi)(\mathbf{x}_i, y_i),總有λi=0\lambda_i = 0或者yif(xi)=1y_if(\mathbf{x}_i) = 1。若λi=0\lambda_i = 0,則對應樣本不會在求和過程中出現,即不會對最終的劃分超平面產生影響;若λi>0\lambda_i > 0,則必有yif(xi)=1y_if(\mathbf{x}_i) = 1,則對應樣本位於最大間隔邊界上,即是一個支持向量。這顯示出支持向量機的一個重要性質:最終的劃分超平面只與支持向量有關,大部分的樣本都無需保留。

於是,我們可以這一性質,求解出

b=1SVxiSV(yiwTxi)b = \frac{1}{|SV|}\sum_{\mathbf{x}_i \in SV}(y_i - \mathbf{w}^{T}\mathbf{x}_i)

可是,又如何求解出λ\lambda呢?如果λ\lambda未知,我們是無法求解出模型f(x)f(\mathbf{x})的。幸好,人們利用問題本身的特性,設計了很多高效算法,SMO算法是其中著名的一個代表。

SMO算法的思路很簡單——在參數初始化之後,重複以下兩個步驟直至收斂:

  • 選取一對需更新的變量λi\lambda_iλj;\lambda_j;
  • 固定λi\lambda_iλj\lambda_j之外的參數,求解對偶函數獲得更新後的λi\lambda_iλj.\lambda_j.

至此,支持向量機的基本思路已經闡述完畢,是不是很簡單啊,一目瞭然!

軟間隔與正則化

在前面的討論中,我們假設存在一個超平面能將所有樣本正確劃分。然而,在現實生活中,很難找到能正確劃分全部樣本的超平面,如下圖所示(摘自周志華老師的《機器學習》)。

svm3

緩解該問題的方法一個方法就是允許支持向量機在一些樣本上出錯,即引入鬆弛變量ξ\xi

yi(wTxi+b)1ξiy_i(\mathbf{w}^{T}\mathbf{x}_i + b) \ge 1 - \xi_i

而這就是我們所說的軟間隔。顯而易見,硬間隔要求對所有樣本劃分正確。當然,在最大化間隔的同時,不滿足約束的樣本應儘可能地少。於是,優化目標改寫爲,

minw,b,ξi12w2+Ci=1mξis.t.yi(wTxi+b)1ξi,ξi0,i=1,2,,m \begin{aligned} &\min\limits_{\mathbf{w}, b, \xi_i} \quad \frac{1}{2}||w||^{2} + C\sum_{i = 1}^{m}\xi_i \\ &\begin{aligned} s.t. \quad & y_i(\mathbf{w}^{T}\mathbf{x}_i + b) \ge 1 - \xi_i, \\ & \xi_i \ge 0, i = 1, 2, \dots, m \\ \end{aligned} \end{aligned}

這裏,CC正則化因子,用於平衡邊界最大化和訓練誤差最小化。

因此,有拉格朗日函數,

L(w,b,λ,μ)=12w2+Ciξi+i=1mλi[1ξiyi(wTx+b)]iμiξiL(\mathbf{w}, b, \mathbf{\lambda}, \mathbf{\mu}) = \frac{1}{2}||\mathbf{w}||^{2} + C\sum_{i}\xi_i + \sum_{i = 1}^{m}\lambda_i[1 - \xi_i - y_i(\mathbf{w}^{T}\mathbf{x} + b)] - \sum_i \mu_i \xi_i

這裏,λi0,μ0\mathbf{\lambda}_i \ge 0, \mathbf{\mu} \ge 0都是拉格朗日乘子。於是,我們利用拉格朗日乘子法求解,

maxλi=1mλi12i=1mj=1mλiλjyiyjxiTxjs.t.i=1mλiyi=00λiC,i=1,2,,m \begin{aligned} &\max\limits_{\lambda} \quad \sum_{i = 1}^{m}\lambda_i - \frac{1}{2}\sum_{i = 1}^{m}\sum_{j = 1}^{m}\lambda_i \lambda_j y_i y_j \mathbf{x}_i^{T}\mathbf{x}_j \\ &\begin{aligned} s.t. \qquad &\sum_{i = 1}^{m}\lambda_iy_i = 0 \\ & 0 \le \lambda_i \le C, i = 1, 2, \dots, m\\ \end{aligned} \end{aligned}

不難看出,我們只需按照之前的步驟,即可求解軟間隔的支持向量機。

核函數

細心的讀者不難看出,本篇博客前面的討論中,都假設樣本是線性可分的。然而在現實任務中,原始樣本空間也許並不存在一個能正確劃分樣本的超平面,即原始樣本空間不是線性可分的,如下圖所示。

svm4

幸運的是,有理論證明,如果原始空間是有限維的,那麼一定存在一個高維特徵空間使樣本可分。因此,對於這樣的問題,可將原始樣本空間映射到更高維的特徵空間,使得樣本在這個特徵空間線性可分,如下圖所示(摘自周志華老師的《機器學習》)。

svm5

ϕ(x)\phi(\mathbf{x})表示x\mathbf{x}映射後的特徵向量。於是,在特徵空間中劃分超平面爲,

f(x)=wTϕ(x)+bf(\mathbf{x}) = \mathbf{w}^{T}\phi(\mathbf{x}) + b

同樣地,有優化函數,

minw,b12w2+Ci=1mξis.t.yi(wTϕ(x)+b)1ξiξi0,i=1,2,,m \begin{aligned} &\min\limits_{\mathbf{w, b}} \quad \frac{1}{2}||\mathbf{w}||^{2} + C\sum_{i = 1}^{m}\xi_i\\ &\begin{aligned} s.t. \quad &y_i(\mathbf{w}^{T}\phi(\mathbf{x}) + b) \ge 1- \xi_i \\ &\xi_i \ge 0, i = 1, 2, \dots, m \end{aligned} \end{aligned}

對偶問題即爲

maxλi=1mλi12i=1mj=1mλiλjyiyjϕ(xi)Tϕ(xj)s.t.i=1mλiyi=00λiC,i=1,2,,m \begin{aligned} &\max\limits_{\lambda} \quad \sum_{i = 1}^{m}\lambda_i - \frac{1}{2}\sum_{i = 1}^{m}\sum_{j = 1}^{m}\lambda_i \lambda_j y_i y_j \phi(\mathbf{x}_i)^{T}\phi(\mathbf{x}_j) \\ &\begin{aligned} s.t. \qquad &\sum_{i = 1}^{m}\lambda_iy_i = 0 \\ & 0 \le \lambda_i \le C, i = 1, 2, \dots, m\\ \end{aligned} \end{aligned}

不難看出,上式的求解涉及到ϕ(xiT)ϕ(xj)\phi(\mathbf{x}_i^{T})\phi(\mathbf{x}_j)的計算。然而由於特徵空間維度很高,導致直接計算
ϕ(xi)Tϕ(xj)\phi(\mathbf{x}_i)^{T}\phi(\mathbf{x}_j)十分困難。而核函數的出現解決了這一問題,

k(xi,xj)=ϕ(xi)Tϕ(xj)k(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^{T}\phi(\mathbf{x^{'}}_j)

因此,有

maxλi=1mλi12i=1mj=1mλiλjyiyjk(xi,xj)s.t.i=1mλiyi=00λiC,i=1,2,,m \begin{aligned} &\max\limits_{\lambda} \quad \sum_{i = 1}^{m}\lambda_i - \frac{1}{2}\sum_{i = 1}^{m}\sum_{j = 1}^{m}\lambda_i \lambda_j y_i y_j k(\mathbf{x}_i, \mathbf{x}_j) \\ &\begin{aligned} s.t. \qquad &\sum_{i = 1}^{m}\lambda_iy_i = 0 \\ & 0 \le \lambda_i \le C, i = 1, 2, \dots, m\\ \end{aligned} \end{aligned}

求解後,即可得到

f(x)=wTx+b=i=1mλiyiϕ(xi)Tϕ(x)+b=i=1mλiyik(x,xi)+b \begin{aligned} f(x) &= \mathbf{w}^{T}\mathbf{x} + b \\ &= \sum_{i = 1}^{m}\lambda_iy_i\phi(\mathbf{x_i})^{T}\phi(\mathbf{x}) + b\\ &= \sum_{i = 1}^{m}\lambda_iy_ik(\mathbf{x}, \mathbf{x}_i) + b\\ \end{aligned}

可見,核函數巧妙地解決了高維空間的特徵向量內積計算的難題,爲支持向量機解決非線性可分的問題提供瞭解決方案。而常用的核函數有以下幾種:

  • 線性核函數

k(xi,xj)=xiTxjk(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^{T}\mathbf{x}_j

  • 多項式核函數

k(xi,xj)=(xiTxj+1)dk(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i^{T}\mathbf{x}_j + 1)^{d}

  • RBF核函數

k(xi,xj)=exp(xiTxj2s2)k(\mathbf{x}_i, \mathbf{x}_j) = exp(-\frac{||\mathbf{x}_i^{T} - \mathbf{x}_j||}{2\bf{s}^{2}})

  • Sigmoid核函數

k(xi,xj)=tanh(2xiTxj+1)k(\mathbf{x}_i, \mathbf{x}_j) = tanh(2\mathbf{x}_i^{T}\mathbf{x}_j + 1)

不過,可能有讀者對核函數仍抱有疑惑——它是如何找到對應的特徵空間。以多項式核函數爲例,假設d=2d = 2,原始空間的維度D=2D = 2,則

k(xi,xj)=(xiTxj+1)2=(x1x1+x2x2+1)2=1+2x1x1+2x2x2+2x1x2x1x2+(x1)2(x1)2+(x2)2(x2)2 \begin{aligned} k(\mathbf{x}_i, \mathbf{x}_j) &= (\mathbf{x}_i^{T}\mathbf{x}_j + 1)^{2} \\ &= (\mathbf{x}_1\mathbf{x}^{'}_1 + \mathbf{x}_2\mathbf{x}^{'}_2 + 1)^{2} \\ &= 1 + 2\mathbf{x}_1\mathbf{x}^{'}_1 + 2\mathbf{x}_2\mathbf{x}^{'}_2 + 2\mathbf{x}_1\mathbf{x}_2\mathbf{x}^{'}_1\mathbf{x}^{'}_2 + (\mathbf{x}_1)^{2}(\mathbf{x}_1^{'})^{2} + (\mathbf{x}_2)^{2}(\mathbf{x}_2^{'})^{2}\\ \end{aligned}

因此,對應的特徵向量爲,

ϕ(x)=(1,2x1,2x2,2x1x2,(x1)2,(x2)2)T\phi(\mathbf{x}) = (1, \sqrt{2}\mathbf{x}_1, \sqrt{2}\mathbf{x}_2, \sqrt{2}\mathbf{x}_1\mathbf{x}_2, (\mathbf{x}_1)^{2}, (\mathbf{x}_2)^{2})^{T}

至此,核函數的基本概念已經爲大家闡述完畢。

總結

支持向量機是一種對數據進行二元分類,其決策邊界是對學習樣本求解的最大邊距超平面。其優缺點如下:

  • 優點

    • 支持向量機泛化能力強,可以證明支持向量機的泛化誤差,

    Em[P(Error)]Em[# of SVs]mE_m[P(Error)] \le \frac{E_m[\# \ of\ SVs]}{m}

    • 支持向量機很好地通過利用空間映射的思想和核函數的技巧解決了非線性分類問題,避免了維災難難題;
    • 支持向量機擁有很好的魯棒性。其最終模型“拋棄”了大量的冗餘樣本,只與支持向量有關,而後者只佔有很小的比例。
  • 缺點

    • 支持向量機的時間複雜度爲O(N3)O(N^{3}),空間複雜度爲O(N2)O(N^{2})。因此,在樣本數量很大時,支持向量機的分類效果不好;

參考文獻

周志華,《機器學習》

常虹,《Support Vector Machines》

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