斯坦福CS229機器學習課程筆記五:支持向量機 Support Vector Machines


SVM被許多人認為是有監督學習中最好的算法,去年的這個時候我就在嘗試學習。不過,面對長長的公式和拗口的中文翻譯最終放棄了。時隔一年,看到Andrew講解SVM,總算對它有了較為完整的認識,總體思路是這樣的:1.介紹間隔的概念並重新定義符號;2.分別介紹functional margins與geometric margins;3.由此引出最大間隔分類器,同時將最優化問題轉化為凸函數的優化問題;4.補充了拉格朗日對偶性的知識;5.利用拉格朗日對偶性,推導最大間隔分類器最優化的對偶問題,即SVM的最優化公式,並指明公式中的內積;6.由內積引出核函數的重要性——當特征向量維度極高時利用核函數大大縮短計算時間;7.利用正則化解決線性不可分與異常點的問題;8.介紹SMO算法以高效地解SVM。

最大間隔分類器

1.假設、模型、符號

我們先假設所有數據都是線性可分的(之后會去除這個假設),通過下圖直觀地感受一下這個分類器。

雖然A、B、C三個點被分到了同一類,但我們認為點A的分類是最有把握的,因為它距離分類線最遠(即間隔最大)。因此,這個分類器最基礎的部分就是如何計算間隔。不過,在介紹間隔之前我們先看一下模型及其符號:

可以看到它和邏輯回歸的模型很像,不過g(z)由邏輯函數變為了一個分段函數。另外,輸出變量由{1,0}變為了{1,-1},θTx變為了wTx+b,這些改動都是為了最后推導公司可以更加優雅。

2.functional margins

由最大間隔分類器的模型我們知道:wTx+b>0 ==> y=1;wTx+b<0 ==> y=-1;而wTx+b=0則被成為分隔超平面(separating hyperplane)。
當wTx+b>0時,wTx+b越大分類為1的置信度越高;當wTx+b<0時,wTx+b越小,分類為-1的可信度也越高。因此,每個樣本的functional margins被定義為:

這樣,當每個樣本都被正確分類時,functional margins的值將總是大於0,並且這個值越大代表分類的可信度越高。值得注意的是,我們可以對參數w和b同時放大/縮小任意相同的倍數,雖然不會影響分類的結果,但是functional margins的值卻會發生變化。
整個訓練集的functional margins則被定義為:

3.geometric margins


如圖所示,geometric margins就是數據點到分隔超平面的垂直距離,計算過程這里就忽略了,其中比較關鍵的一步是:分隔超平面wTx+b=0的法向量就是w,需要自己證明。最終,每個樣本的geometric margins公式為:

由這個公式首先我們可以得到geometric margins與functional margins的關系:

相較於functional margins,即使對w和b同時放大/縮小任意相同的倍數,geometric margins的值也不會改變。這一點很重要,會在之后的公式推導中用到。
整個訓練集的geometric margins為:

4.最大間隔分類器的最優化問題

我們的目標是找到能使geometric margins最大化的分隔超平面,轉化為最優化問題就是:

由於||w||是一個非凸函數,將導致難以求解,因此我們需進行一些轉化,首先,由之前的結論“隨意同時縮放w和b不會改變geometric margins的大小”,我們可以讓functional margins為1

原始的最優化目標就變成了最大化1/||w||,也相當於最小化||w||2,因此就轉化為了凸優化問題:

可以用二次規划的軟件求解。

拉格朗日對偶性

這一部分主要是最優化理論的內容,其核心思想是可以通過拉格朗日對偶性將原始最優化問題轉化為它的對偶問題(這樣做的目的是因為對偶問題可以提升求解的效率),我也只是勉強看懂推導的過程,因此只會簡單地羅列公式:

1.原始最優化問題


這個問題對應的廣義拉格朗日公式為:

將原始問題進行適當的變形:

2.對偶最優化問題


和原始最優化問題相比,對偶最優化問題只是顛倒了max和min的順序,並且我們有:

3.KKT conditions

為了讓d*=p*,即可以通過求對偶問題來解決原始優化問題,需要滿足以下假設:

在這個假設下,一定會存在w*、α*、β*使得w*是原始問題的解並且α*、β*是對偶問題的解。此外,還有一些有用的關系會成立,它們被稱為:Karush-Kuhn-Tucker (KKT) conditions:

其中αi*gi(w)=0被稱為KKT dual complementarity condition。它暗示了只有當gi(w)=0時才有可能有αi>0,這是SVM只有很少數support vectors的原因;在之后的SMO算法的收斂驗證中也會用到這個條件。

SVM

讓我們回到前面討論的最大間隔分類器:

利用拉格朗日對偶性,求解最大間隔分類器最優化問題的對偶問題,就是SVM了,讓我們來進行推導:
首先,將限制條件轉化為可使用廣義拉格朗日的標准形式:

回憶一下KKT dual complementarity condition,只有當gi(w)=0時才可能有αi>0,同時gi(w)=0對應着距離分隔超平面最近的點(回顧推導最大間隔分類器最優化公式的過程),即下圖中虛線穿過的三個點:

而這三個點就是SVM中的SV:support vector。
將目前的最優化問題構造為拉格朗日的形式:
 (1)
接下來求解對偶問題,通過使偏導數為0,求在固定α,不固定w與b的條件下求最小化的L(w, b, α),即θD:

將(2)與(3)帶入(1)中,可得:

最終,SVM對應的最優化問題為:

求得α后,我們可以通過α得到模型中需要的參數w與b:

也可以直接用α求得模型的線性組合結果:

那么問題來了,為什么我們要這么“折騰”地用拉格朗日對偶性把原本清晰的最大間隔分類的優化問題轉化成SVM的這個樣子?其中一個很大原因就是接下來要說的核函數。

Kernels

有時我們希望將低維的向量特征映射到高維以增加分類的准確性,比如添加二次、三次項到模型中:

因為算法可以被完全地表達為特征向量內積的形式<x, z>,所以只要將映射后的內積<Φ(x), Φ(z)>替換掉原本的內積即可。給定一個特征映射規則Φ,我們將kernel定義為:

當輸入空間的維度非常高時(甚至是無限維度),我們可以核函數來大大縮減計算量,比如:

由此我們可以看到計算<Φ(x), Φ(z)>需要O(n2)的時長,而直接計算K(x,z)只需要O(n)的時長,當維度極高時,這個優勢將極為明顯!接下來看幾個常用的kernels:

特征映射函數Φ甚至可以映射到無限維,比如Gaussian kernel:

當然,不是隨便寫一個函數就能作為核函數,核函數成立的條件是:
任意樣本{x(1),…,x(m)},(m<∞)對應的核矩陣,是一個對稱半正定矩陣。核矩陣的定義是:Kij = K(x(i), x(j))
此外,核函數不是SVM專用的,只要能將目標函數能完全地用內積的形式來表示,都可使用核函數來高效地計算高維向量空間的分類結果(Andrew在課上提到過邏輯回歸也可寫成這種形式)。而核函數的威力也是巨大的,比如Andrew提到了兩個例子:手寫數字識別,與蛋白質分類,在SVM算法中應用高斯核或者(xTz+c)d都可以獲得和人工神經網絡相媲美的結果。

核函數還有一個意義是:將低維度線性不可分的數據通過核函數映射到高維空間,以使得數據能夠通過線性超平面進行划分,即輸出了非線性決策邊界。但有時仍然會存在一些異常值,我們將通過添加懲罰的方法進行改善。

L1 norm soft margin SVM

截止到目前為止,我們都認為數據集是線性可分的,但現實中並不一定成立;另外,當數據集中存在異常點,將嚴重影響分類器的性能,如下圖所示:

為了解決上述兩個問題,我們將優化問題調整為:

注:當ξ>1時,即可允許分類是錯誤的,然后我們將ξ作為懲罰添加到目標函數中。
再次使用拉格朗日對偶性,我們得到對偶問題為:

令人驚喜的是,在添加了L1正則化項之后,只是在對偶問題中對αi的限制中增加了一個αi≤C。需要注意的是:b*的計算需要被改變(詳見Platt的paper
KKT dual-complementarity conditions將變為:

現在,就只剩下求解對偶問題了。

SMO算法

首先了解坐標上升算法 Coordinate ascent:

其核心思想是一次只在一個維度上使得函數最大化,所以它的循環次數可能會比較多,但是循環內部的計算會比較簡單。
現在考慮我們的對偶問題:

對於這個問題,我們無法直接使用坐標上升:

因此,我們將坐標上升修改為,每次選定兩個坐標:

判斷收斂的方法是,KKT conditions是否滿足tolerance參數。(詳見Fast Training of Support Vector Machines using Sequential Minimal Optimization
每一步求最大值的方法為:

我們可以得到:W是關於α2的一個二次函數。而二次函數求導獲得最大值是很簡單的,再考慮上邊界的限制后,α2的新值為:

而α1的最優值可以由α2計算獲得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM