支持向量機(Support Vecor Machine,以下簡稱SVM)雖然誕生只有短短的二十多年,但是自一誕生便由於它良好的分類性能席卷了機器學習領域,並牢牢壓制了神經網絡領域好多年。如果不考慮集成學習的算法,不考慮特定的訓練數據集,在分類算法中的表現SVM說是排第一估計是沒有什么異議的。
SVM是一個二元分類算法,線性分類和非線性分類都支持。經過演進,現在也可以支持多元分類,同時經過擴展,也能應用於回歸問題。本系列文章就對SVM的原理做一個總結。本篇的重點是SVM用於線性分類時模型和損失函數優化的一個總結。
1. 回顧感知機模型
在感知機原理小結中,我們講到了感知機的分類原理,感知機的模型就是嘗試找到一條直線,能夠把二元數據隔離開。放到三維空間或者更高維的空間,感知機的模型就是嘗試找到一個超平面,能夠把所有的二元類別隔離開。對於這個分離的超平面,我們定義為$w^Tx + b = 0$,如下圖。在超平面$w^Tx + b = 0$上方的我們定義為$y=1$,在超平面$w^Tx + b = 0$下方的我們定義為$y=-1$。可以看出滿足這個條件的超平面並不止一個。那么我們可能會嘗試思考,這么多的可以分類的超平面,哪個是最好的呢?或者說哪個是泛化能力最強的呢?
接着我們看感知機模型的損失函數優化,它的思想是讓所有誤分類的點(定義為M)到超平面的距離和最小,即最小化下式:$$\sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b)\big / ||w||_2$$
當\(w和b\)成比例的增加,比如,當分子的\(w和b\)擴大N倍時,分母的L2范數也會擴大N倍。也就是說,分子和分母有固定的倍數關系。那么我們可以固定分子或者分母為1,然后求另一個即分子自己或者分母的倒數的最小化作為損失函數,這樣可以簡化我們的損失函數。在感知機模型中,我們采用的是保留分子,固定分母$||w||_2 = 1$,即最終感知機模型的損失函數為:$$\sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b)$$
如果我們不是固定分母,改為固定分子,作為分類模型有沒有改進呢?
這些問題在我們引入SVM后會詳細解釋。
2. 函數間隔與幾何間隔
在正式介紹SVM的模型和損失函數之前,我們還需要先了解下函數間隔和幾何間隔的知識。
在分離超平面固定為$w^Tx + b = 0$的時候,$|w^Tx + b |$表示點x到超平面的相對距離。通過觀察$w^Tx + b $和y是否同號,我們判斷分類是否正確,這些知識我們在感知機模型里都有講到。這里我們引入函數間隔的概念,定義函數間隔$\gamma^{'}$為:$$\gamma^{'} = y(w^Tx + b)$$
可以看到,它就是感知機模型里面的誤分類點到超平面距離的分子。對於訓練集中m個樣本點對應的m個函數間隔的最小值,就是整個訓練集的函數間隔。
函數間隔並不能正常反應點到超平面的距離,在感知機模型里我們也提到,當分子成比例的增長時,分母也是成倍增長。為了統一度量,我們需要對法向量$w$加上約束條件,這樣我們就得到了幾何間隔$\gamma$,定義為:$$\gamma = \frac{y(w^Tx + b)}{||w||_2} = \frac{\gamma^{'}}{||w||_2}$$
幾何間隔才是點到超平面的真正距離,感知機模型里用到的距離就是幾何距離。
3. 支持向量
在感知機模型中,我們可以找到多個可以分類的超平面將數據分開,並且優化時希望所有的點都被准確分類。但是實際上離超平面很遠的點已經被正確分類,它對超平面的位置沒有影響。我們最關心是那些離超平面很近的點,這些點很容易被誤分類。如果我們可以讓離超平面比較近的點盡可能的遠離超平面,最大化幾何間隔,那么我們的分類效果會更好一些。SVM的思想起源正起於此。
如下圖所示,分離超平面為$w^Tx + b = 0$,如果所有的樣本不光可以被超平面分開,還和超平面保持一定的函數距離(下圖函數距離為1),那么這樣的分類超平面是比感知機的分類超平面優的。可以證明,這樣的超平面只有一個。和超平面平行的保持一定的函數距離的這兩個超平面對應的向量,我們定義為支持向量,如下圖虛線所示。
支持向量到超平面的距離為$1/||w||_2$,兩個支持向量之間的距離為$2/||w||_2$。
4. SVM模型目標函數與優化
SVM的模型是讓所有點到超平面的距離大於一定的距離,也就是所有的分類點要在各自類別的支持向量兩邊。用數學式子表示為:$$max \;\; \gamma = \frac{y(w^Tx + b)}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) = \gamma^{'(i)} \geq \gamma^{'} (i =1,2,...m)$$
一般我們都取函數間隔$\gamma^{'}$為1,這樣我們的優化函數定義為:$$max \;\; \frac{1}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m)$$
也就是說,我們要在約束條件$y_i(w^Tx_i + b) \geq 1 (i =1,2,...m)$下,最大化$\frac{1)}{||w||_2}$。可以看出,這個感知機的優化方式不同,感知機是固定分母優化分子,而SVM是固定分子優化分母,同時加上了支持向量的限制。
由於$\frac{1}{||w||_2}$的最大化等同於$\frac{1}{2}||w||_2^2$的最小化。這樣SVM的優化函數等價於:$$min \;\; \frac{1}{2}||w||_2^2 \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m)$$
由於目標函數$\frac{1}{2}||w||_2^2$是凸函數,同時約束條件不等式是仿射的,根據凸優化理論,我們可以通過拉格朗日函數將我們的優化目標轉化為無約束的優化函數,這和最大熵模型原理小結中講到了目標函數的優化方法一樣。具體的,優化函數轉化為:$$L(w,b,\alpha) = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \; 滿足\alpha_i \geq 0$$
由於引入了朗格朗日乘子,我們的優化目標變成:$$\underbrace{min}_{w,b}\; \underbrace{max}_{\alpha_i \geq 0} L(w,b,\alpha)$$
和最大熵模型一樣的,我們的這個優化函數滿足KKT條件,也就是說,我們可以通過拉格朗日對偶將我們的優化問題轉化為等價的對偶問題來求解。如果對凸優化和拉格朗日對偶不熟悉,建議閱讀鮑德的《凸優化》。
也就是說,現在我們要求的是:$$\underbrace{max}_{\alpha_i \geq 0} \;\underbrace{min}_{w,b}\; L(w,b,\alpha)$$
從上式中,我們可以先求優化函數對於$w和b$的極小值。接着再求拉格朗日乘子$\alpha$的極大值。
首先我們來求$L(w,b,\alpha)$基於$w和b$的極小值,即$\underbrace{min}_{w,b}\; L(w,b,\alpha)$。這個極值我們可以通過對$w和b$分別求偏導數得到:$$\frac{\partial L}{\partial w} = 0 \;\Rightarrow w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i $$ $$\frac{\partial L}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0$$
從上兩式子可以看出,我們已經求得了$w和\alpha$的關系,只要我們后面接着能夠求出優化函數極大化對應的$\alpha$,就可以求出我們的$w$了,至於b,由於上兩式已經沒有b,所以最后的b可以有多個。
好了,既然我們已經求出$w和\alpha$的關系,就可以帶入優化函數$L(w,b,\alpha)$消去$w$了。我們定義:$$\psi(\alpha) = \underbrace{min}_{w,b}\; L(w,b,\alpha)$$
現在我們來看將$w$替換為$\alpha$的表達式以后的優化函數$\psi(\alpha)$的表達式:
$$ \begin{align} \psi(\alpha) & = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \\& = \frac{1}{2}w^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \end{align}$$
其中,(1)式到(2)式用到了范數的定義$||w||_2^2 =w^Tw$, (2)式到(3)式用到了上面的$w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i$, (3)式到(4)式把和樣本無關的$w^T$提前,(4)式到(5)式合並了同類項,(5)式到(6)式把和樣本無關的$b$提前,(6)式到(7)式繼續用到$w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i$,(7)式到(8)式用到了向量的轉置。由於常量的轉置是其本身,所有只有向量$x_i$被轉置,(8)式到(9)式用到了上面的$\sum\limits_{i=1}^{m}\alpha_iy_i = 0$,(9)式到(10)式使用了$(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…$的乘法運算法則,(10)式到(11)式僅僅是位置的調整。
從上面可以看出,通過對$w,b$極小化以后,我們的優化函數$\psi(\alpha)$僅僅只有$\alpha$向量做參數。只要我們能夠極大化$\psi(\alpha)$,就可以求出此時對應的$\alpha$,進而求出$w,b$.
對$\psi(\alpha)$求極大化的數學表達式如下:$$ \underbrace{max}_{\alpha} -\frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) + \sum\limits_{i=1}^{m} \alpha_i $$ $$s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$ \alpha_i \geq 0 \; i=1,2,...m $$
可以去掉負號,即為等價的極小化問題如下:
$$\underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) - \sum\limits_{i=1}^{m} \alpha_i $$ $$s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$ \alpha_i \geq 0 \; i=1,2,...m $$
只要我們可以求出上式極小化時對應的$\alpha$向量就可以求出$w和b$了。具體怎么極小化上式得到對應的$\alpha$,一般需要用到SMO算法,這個算法比較復雜,我們后面會專門來講。在這里,我們假設通過SMO算法,我們得到了對應的$\alpha$的值$\alpha^{*}$。
那么我們根據$w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i$,可以求出對應的$w$的值$$w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i$$
求b則稍微麻煩一點。注意到,對於任意支持向量$(x_x, y_s)$,都有$$y_s(w^Tx_s+b) = y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1 $$
假設我們有S個支持向量,則對應我們求出S個$b^{*}$,理論上這些$b^{*}$都可以作為最終的結果, 但是我們一般采用一種更健壯的辦法,即求出所有支持向量所對應的$b_s^{*}$,然后將其平均值作為最后的結果。注意到對於嚴格線性可分的SVM,$b$的值是有唯一解的,也就是這里求出的所有$b^{*}$都是一樣的,這里我們仍然這么寫是為了和后面加入軟間隔后的SVM的算法描述一致。
怎么得到支持向量呢?根據KKT條件中的對偶互補條件$\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1) = 0$,如果$\alpha_i>0$則有$y_i(w^Tx_i + b) =1$ 即點在支持向量上,否則如果$\alpha_i=0$則有$y_i(w^Tx_i + b) \geq 1$,即樣本在支持向量上或者已經被正確分類。
5. 線性可分SVM的算法過程
這里我們對線性可分SVM的算法過程做一個總結。
輸入是線性可分的m個樣本${(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}$,其中x為n維特征向量。y為二元輸出,值為1,或者-1.
輸出是分離超平面的參數$w^{*}和b^{*}$和分類決策函數。
算法過程如下:
1)構造約束優化問題$$\underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) - \sum\limits_{i=1}^{m} \alpha_i $$ $$s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$ \alpha_i \geq 0 \; i=1,2,...m $$
2)用SMO算法求出上式最小時對應的$\alpha$向量的值$\alpha^{*}$向量.
3) 計算$w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i$
4) 找出所有的S個支持向量,即滿足$\alpha_s > 0對應的樣本(x_s,y_s)$,通過 $y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1$,計算出每個支持向量$(x_x, y_s)$對應的$b_s^{*}$,計算出這些$b_s^{*} = y_s - \sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s$. 所有的$b_s^{*}$對應的平均值即為最終的$b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}$
這樣最終的分類超平面為:$w^{*} \bullet x + b^{*} = 0 $,最終的分類決策函數為:$f(x) = sign(w^{*} \bullet x + b^{*})$
線性可分SVM的學習方法對於非線性的數據集是沒有辦法使用的, 有時候不能線性可分的原因是線性數據集里面多了少量的異常點,由於這些異常點導致了數據集不能線性可分, 那么怎么可以處理這些異常點使數據集依然可以用線性可分的思想呢? 我們在下一節的線性SVM的軟間隔最大化里繼續講。
(歡迎轉載,轉載請注明出處。歡迎溝通交流: liujianping-ok@163.com)