支援向量機(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}^{s}\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)