天天看點

Andrew Ng機器學習公開課筆記 -- 支援向量機

網易公開課,第6,7,8課 

先繼續前面對線性分類器的讨論, 

通過機器學習算法找到的線性分類的線,不是唯一的,對于一個訓練集一般都會有很多線可以把兩類分開,這裡的問題是我們需要找到best的那條線

首先需要定義margin, 

直覺上來講,best的那條線,應該是在可以正确分類的前提下,離所有的樣本點越遠越好,why? 

因為越靠近分類線,表示該點越容易被分錯,比如圖中的c點,此時y=1,但是隻要分類線略微調整一下角度,就有可能被分為y=-1 

但對于a點,就可以非常confident的被分為y=1 

是以分類線越遠離樣本點,表示我們的分類越confident

Andrew Ng機器學習公開課筆記 -- 支援向量機

那麼如果定義“遠”這個概念? 

functional margin 

圖中的分類線為,wx+b=0 

那麼點離這條線越遠,有wx+b>>0或<<0,比如a點 

是以functional margin定義為,前面加上y保證距離非負 

Andrew Ng機器學習公開課筆記 -- 支援向量機

可以看出當點離線越遠時,這個margin會越大,表示分類越confident 

并且margin>0時,證明這個點的分類是正确的 

因為比如訓練集中y=1,而由線性分類器wx+b得到的結果-0.8,這樣表示分錯了,margin一定是<0的

對于訓練集中m的樣本,有 

Andrew Ng機器學習公開課筆記 -- 支援向量機

即,整體的margin由最近的那個決定 

如果要用functional margin來尋找best分類線, 

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

geometric margins 

再來看另外一種margin,從幾何角度更加直覺的表示“遠” 

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

可以看到a和分類線垂直相交于b,b是滿足wx+b=0的等式的 

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

于是有, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

求得, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

考慮y=-1的情況,最終得到如下, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

可以看到,如果||w|| = 1,那麼functional margin 等于geometric margin 

那麼對于geometric margin,無論w,b的取值都不會改變margin的值,其實就是對functional margin做了norm化

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

the optimal margin classifier

先簡單看看凸優化的概念

凸優化問題 用一個比較通俗的方式了解  為什麼要凸優化?  這種優化是一定可以找到全局最優的,因為不存在局部最優,隻有一個最優點  是以對于梯度下降或其他的最優化算法而言,在非凸的情況下,很可能找到的隻是個局部最優 很好了解,對于二維的情況比較形象,作為例子  集合中任意兩點的連線都在集合中 
Andrew Ng機器學習公開課筆記 -- 支援向量機
函數圖上任意兩點的連線都在above這個圖(這個應該取決于上凸或下凸,都below也一樣)  換個說法,就是他的epigraph是個凸集,其中epigraph就是the set of points on or above the graph of the function 
Andrew Ng機器學習公開課筆記 -- 支援向量機
凸優化問題的定義 在凸集上尋找凸函數的全局最值的過程稱為凸優化  即,目标函數(objective function)是凸函數,可行集(feasible set)為凸集 為何目标函數需要是凸函數?  這個比較容易了解,不是凸函數會有多個局部最優,如下圖,不一定可以找到全局最優 
Andrew Ng機器學習公開課筆記 -- 支援向量機
為何可行集需要為凸集?  稍微難了解一些,看下圖  雖然目标函數為凸函數,但是如果可行集非凸集,一樣無法找到全局最優 
Andrew Ng機器學習公開課筆記 -- 支援向量機

接着看這個問題,根據上面的說法,要找到最優的classifier就是要找到geometric margin最大的那個超平面

Andrew Ng機器學習公開課筆記 -- 支援向量機

這裡假設||w||=1,是以function margin等同于geometric margin,這裡用的是function margin的公式

Andrew Ng機器學習公開課筆記 -- 支援向量機

這個優化的問題是,限制||w||=1會導緻非凸集,想想為什麼?

是以要去掉這個限制,得到

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

繼續,由于function margin通過w,b的縮放可以是任意值, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

于是就有, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

為什麼要加上平方,因為二次函數是典型的凸函數,是以這樣就把非凸函數轉換為凸函數

最終得到,

Andrew Ng機器學習公開課筆記 -- 支援向量機

這是一個凸優化問題,可以用最優化工具去解

lagrange duality

先偏下題,說下拉格朗日乘數法,為什麼要說這個? 

因為我們在上面看到這種極值問題是帶限制條件的,這種極值問題如何解?好像有些困難

拉格朗日乘數法就是用來解決這種極值問題的,将一個有n 個變量與k 個限制條件的最優化問題轉換為一個有n + k個變量的方程組的極值問題 

定義, 對于如下的極值問題,求最小化的f(w),同時需要滿足i個限制條件h(w)

Andrew Ng機器學習公開課筆記 -- 支援向量機

利用拉格朗日數乘法,變成如下的極值問題

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

最終,求這個方程組 

Andrew Ng機器學習公開課筆記 -- 支援向量機

解出w和拉格朗日算子β,求出f(w)的極值

再看看wiki上的例子,好了解一些

假設有函數:,要求其極值(最大值/最小值),且滿足條件

Andrew Ng機器學習公開課筆記 -- 支援向量機

看圖,畫出f(x,y)的等高線,和限制條件g(x,y)=c的路徑,會有多處相交 

但隻有當等高線和限制條件線相切的時候, 才是極值點 

因為如果是相交,你想象沿着g(x,y)=c繼續前進,一定可以到達比現在f值更高或更低的點 

那麼求相切點,就是求解f和g的偏導為0的方程組

說到這裡,還不夠,因為你發現上面的限制條件是不等式。。。 

于是繼續看更通用化的拉格朗日數乘法

Andrew Ng機器學習公開課筆記 -- 支援向量機

既有等式,也有不等式的限制,稱為generalized lagrangian

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

這裡先引入primal optimization problem

Andrew Ng機器學習公開課筆記 -- 支援向量機

這個啥意思?

Andrew Ng機器學習公開課筆記 -- 支援向量機

即, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

是以,primal optimization problem就等價于最開始的minf(), 并且primal optimization problem是沒有限制條件的,因為已經隐含了限制條件 

min的那個一定不是無窮大,是以一定是滿足限制條件的

Andrew Ng機器學習公開課筆記 -- 支援向量機

再引入dual optimization problem

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

而且可以看到和prime問題不一樣的隻是交換了min和max的順序

并且簡單可以證明,

Andrew Ng機器學習公開課筆記 -- 支援向量機

這不是l的特殊特性,而是對于任意函數maxmin都是小于等于minmax的,可以随便找個試試呵呵

并且在特定的條件下,

Andrew Ng機器學習公開課筆記 -- 支援向量機

這樣我們就可以解dual問題來替代prime問題

為何這麼麻煩?要引入dual問題,因為後面會看到dual問題有比較有用的特性,求解會比較簡單

前面說了,隻有在特定條件下,才可以用dual問題替代prime問題 

那麼這條件是什麼?這些條件先列在這裡,不了解沒事

suppose f and the gi’s are convex, and the hi’s are affine. 

Andrew Ng機器學習公開課筆記 -- 支援向量機

suppose further that the constraints gi are (strictly) feasible; this means that there exists some w so that gi(w) < 0 for all i.

意思應該是,存在w可以讓g限制成立的,即g是嚴格可行的

under our above assumptions, there must exist w∗, α∗, β∗ so that w∗ is the solution to the primal problem, α∗, β∗ are the solution to the dual problem, and moreover p∗ = d∗ = l(w∗, α∗, β∗). moreover, w∗, α∗ and β∗ satisfy the karush-kuhn-tucker (kkt) conditions, which are as follows: 

滿足上面的假設後,就一定存在w∗, α∗, β∗滿足p∗ = d∗ = l(w∗, α∗, β∗),并且這時的w∗, α∗ and β∗ 還滿足kkt條件,

Andrew Ng機器學習公開課筆記 -- 支援向量機

并且,隻要任意w∗, α∗ and β∗滿足kkt條件,那麼它們就是prime和dual問題的解 

注意其中的(5), 稱為kkt dual complementarity condition 

要滿足這個條件,α和g至少有一個為0,當α>0時,g=0,這時稱“gi(w) ≤ 0” constraint is active,因為此時g限制由不等式變為等式 

在後面可以看到這意味着什麼?g=0時是限制的邊界,對于svm就是那些support vector

optimal margin classifiers – continuing

談論了那麼多晦澀的東西,不要忘了目的,我們的目的是要求解optimal margin 問題,是以現在繼續

前面說了optimal margin問題描述為, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

其中,g限制表示為, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

那麼什麼時候g=0?當functional margin為1(前面描述optimal margin問題的時候,已經假設funtional margin為1) 

是以隻有靠近超平面最近的點的functional margin為1,即g=0,而其他訓練點的functional margin都>1 

該圖中隻有3個點滿足這個條件,這些點稱為support vector,隻有他們會影響到分類超平面 

實作在訓練集中隻有很少的一部分資料點是support vector,而其他的絕大部分點其實都是對分類沒有影響的

Andrew Ng機器學習公開課筆記 -- 支援向量機

前面說了半天prime問題和dual問題,就是為了可以用解dual問題來替代解prime問題 

Andrew Ng機器學習公開課筆記 -- 支援向量機

好,下面就來求解optimal margin的dual問題, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

和上面讨論的廣義拉格朗日相比,注意符号上的兩個變化, 

w變量—>w,b兩個變量 

隻有α,而沒有β,因為隻有不等式限制而沒有等式限制

對于dual問題,先求

Andrew Ng機器學習公開課筆記 -- 支援向量機

這裡就是對于w,b求l的min,做法就是求偏導為0的方程組 

首先對w求偏導, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

得到如下式子,這樣我們在解出dual問題後,可以通過α,進一步算出w 

Andrew Ng機器學習公開課筆記 -- 支援向量機

接着對b求偏導,得到下面的式子

Andrew Ng機器學習公開課筆記 -- 支援向量機

現在把9,10,代入8,得到

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

于是有,第一個限制本來就有,第二個限制是對b求偏導得到的結果

Andrew Ng機器學習公開課筆記 -- 支援向量機

you should also be able to verify that the conditions required for p∗ =d∗ and the kkt conditions (equations 3–7) to hold are indeed satisfied in our optimization problem. 

你可以verify我們這個問題是滿足kkt條件的,是以可以解出這個dual問題來代替原來的prime問題 

先不談如何求解上面的極值問題(後面會介紹具體算法),我們先談談如果解出α,如何解出prime問題的w和b

w前面已經說過了,通過等式9就可以解出 

那麼如何解出b,

Andrew Ng機器學習公開課筆記 -- 支援向量機

其實了解就是, 找出-1和1中靠超平面最近的點,即支援向量,用他們的b的均值作為b* 

因為w定了,即超平面的方向定了,剩下的就是平移,平移到正負支援向量的中間位置為最佳

再想的多點,求出w,b後,我們的支援向量機就已經ready了,下面可以對新的資料點進行分類 

Andrew Ng機器學習公開課筆記 -- 支援向量機

這裡也把9代入, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

你可能覺得多此一舉,這樣每次分類都要把訓練集都周遊一遍 

其實無論是使用dual優化問題或是這裡,都是為了避免直接計算x,而是代替的計算x的内積,因為後面談到kernel,對于高維或無限維資料直接計算x是不可行的,而我們可以使用kernel函數來近似計算x的内積,這是後話

而且其實,這裡的計算量并不大,因為前面介紹了,α隻有支援向量是不為0的,而支援向量是很少的一部分

kernels

先談談feature mapping,

Andrew Ng機器學習公開課筆記 -- 支援向量機

其實将低維資料映射到高維資料的主要原因是,因為一些在低次元線性不可分的資料,到了高次元就是線性可分的了 

沒找到合适的圖,想想在二維上看不可分的,到3維或更高維,也許就比較容易用一個超平面劃分,這是合理的

這裡我們稱,"original” input value(比如x)為input attributes 

Andrew Ng機器學習公開課筆記 -- 支援向量機

we will also let φ denote the feature mapping, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

在将低次元的x mapping到高次元的φ(x)後,隻需要把φ(x)代入之前dual problem的式子求解就ok

但問題在于,之前dual problem的<x,z>是比較容易算的,但是高次元或無限維的<φ(x), φ(z)>是很難算出的,是以這裡無法直接算

是以kernel函數出場,

Andrew Ng機器學習公開課筆記 -- 支援向量機

我們可以通過計算kernel函數來替代計算<φ(x), φ(z)>,kernel函數是通過x,z直接算出的 

是以往往都是直接使用kernel函數去替換<x,z>,将svm映射到高維,而其中具體的φ()你不用關心(因為計算φ本身就是很expensive的),你隻要知道這個kernel函數确實對應于某一個φ()就可以

polynomial kernel

我們先看一個簡單的kernel函數的例子,稱為polynomial kernel(多項式核)

Andrew Ng機器學習公開課筆記 -- 支援向量機

這個kernel是可以推導出φ()的, 

Andrew Ng機器學習公開課筆記 -- 支援向量機

可以看出最終的結果是,φ将x mapping成xx,如下(假設n=3)

Andrew Ng機器學習公開課筆記 -- 支援向量機
Andrew Ng機器學習公開課筆記 -- 支援向量機

而計算k函數,複雜度就隻有o(n)

推廣一下,加上常數項

Andrew Ng機器學習公開課筆記 -- 支援向量機

這個推導出的φ為,n=3

Andrew Ng機器學習公開課筆記 -- 支援向量機

再推廣一下,

Andrew Ng機器學習公開課筆記 -- 支援向量機

雖然上面都找到了φ, 其實你根本不用關心φ是什麼, 或者到底mapping到多高的次元

gaussian kernel

在來看另外一種kernel函數, 

來想一想内積的含義,當兩個向量越相近的時候,内積值是越大的,而越遠的時候,内積值是越小的 

是以我們可以把kernel函數,看成是用來衡量兩個向量有多相似

于是給出下面的kernel函數,這個函數由于描述x,z的相似度是合理的

Andrew Ng機器學習公開課筆記 -- 支援向量機

(this kernel is called the gaussian kernel, and corresponds to an infinite dimensional feature mapping φ.)

這個kernel函數對于的φ是個無限維的映射,你不用關心到底是什麼

好到這裡,自然有個問題?我随便找個函數就可以做kernel函數嗎 

如果判定一個kernel函數是否valid?即can we tell if there is some feature mapping φ so that k(x, z) = φ(x)tφ(z) for all x, z? 

當然上面這個不太好操作,因為找到φ本身就是很困難的

下面就來證明一個判定方法,

假設,k is indeed a valid kernel corresponding to some feature mapping φ.

Andrew Ng機器學習公開課筆記 -- 支援向量機

我們可以得到一個m-by-m的kernel matrix k,其中 

Andrew Ng機器學習公開課筆記 -- 支援向量機

這裡如果k是個valid的kernel函數,那麼有 

Andrew Ng機器學習公開課筆記 -- 支援向量機

于是可以證明,k是個半正定矩陣 (positive semi-definite) 

(這個沒有找到比較通俗易懂的解釋方式,隻知道定義是對于任何非0向量z,都有ztkz>=0,那麼k稱為半正定矩陣。誰可以通俗的解釋一下) 

Andrew Ng機器學習公開課筆記 -- 支援向量機

這裡隻證明必要條件,即k函數是valid kernel函數,那麼k矩陣一定是半正定矩陣,其實這是個充分必要條件,即mercer kernel的定義

Andrew Ng機器學習公開課筆記 -- 支援向量機

是以有了這個定理,就比較友善了,你不用去找是否有對應的φ,隻需要判定k矩陣是否為半正定矩陣即可

下面ng講了個很典型的使用svm kernel的例子,

for instance, consider the digit recognition problem, in which given an image (16x16 pixels) of a handwritten digit (0-9), we have to figure out 

which digit it was.

就是根據16×16的像素點,來判斷是否是0~9的數字 

傳統的方法是,神經網絡本證明是解這個問題的最好的算法 

可是這裡用polynomial kernel or the gaussian kernel,svm也得到了很好的效果,和神經網絡的結果一樣好 

這是很讓人吃驚的,因為初始輸入隻是256維的向量,并且沒有任何prior knowledge的情況下,可以得到和精心定制的神經網絡一樣好的效果

ng還講了另外一個例子,即初始輸入的維素不固定的情況下,例如輸入字元串的長度不固定,如何産生固定的維數的輸入,參考講義吧呵呵

這裡看到kernel在svm裡面的應用已經非常清晰了,但是其實kernel不是隻是可以用于svm 

其實它是個通用的方法,隻要學習算法可以隻含有輸入的内積,那麼都可以使用kernel trick來替換它 

for instance, this kernel trick can be applied with the perceptron to to derive a kernel perceptron algorithm.

regularization and the non-separable case

讨論異常點,或離群點,比如下圖,是否值得為了左上角那個點,将劃分線調整成右邊這樣 

從圖上直覺的看,應該不值得,右邊的劃分線遠沒有左邊的合理,而且那個資料點很有可能是個異常點,可以忽略掉

Andrew Ng機器學習公開課筆記 -- 支援向量機

we reformulate our optimization (using ℓ1 regularization) as follows:

Andrew Ng機器學習公開課筆記 -- 支援向量機

其實就是加上修正值ξi,使得某些點的functional margin可以小于1,即容忍一些異常點

同時在目标函數上有做了相應的修正,

the parameter c controls the relative weighting between the twin goals of making the ||w||2 small (which we saw earlier makes the margin large) and of ensuring that most examples have functional margin at least 1.

列出拉格朗日,

Andrew Ng機器學習公開課筆記 -- 支援向量機

最終得到的dual problem是,

Andrew Ng機器學習公開課筆記 -- 支援向量機

和之前的相比,隻是α的取值範圍有了變化,現在還要<=c

對于這個dual problem的kkt dual-complementarity conditions變化為,

Andrew Ng機器學習公開課筆記 -- 支援向量機

the smo algorithm by john platt

前面都是給出了dual problem,可是沒有說怎麼解,現在就來談如何解svm的dual problem

coordinate ascent (descent)

坐标上升或下降,取決于求max或min 

想法很簡單,求解m維的最優問題

Andrew Ng機器學習公開課筆記 -- 支援向量機

算法,不停疊代,每次疊代都是隻改變某一個次元來做最優化,其他次元保持不變

Andrew Ng機器學習公開課筆記 -- 支援向量機

這個算法從圖上看起來就像這樣,

Andrew Ng機器學習公開課筆記 -- 支援向量機

前面學過梯度下降和牛頓法,有啥差別 

牛頓,收斂很快,但每次收斂的代價比較大 

坐标上升,收斂比較慢,但是每次收斂的代價都很小 

梯度下降,不适合高維,因為每次疊代都需要算出梯度,需要考慮所有次元

smo (sequential minimal optimization)

我們先再列出前面的dual優化問題,看看用坐标上升是否可解

Andrew Ng機器學習公開課筆記 -- 支援向量機

注意到19這個限制,這個限制注定無法使用坐标上升

因為你如果隻改變一個α值,就無法繼續保證整個等式為0

Andrew Ng機器學習公開課筆記 -- 支援向量機

因為在固定其他的α時,α1的值也是固定的

是以提出smo算法,

想法也簡單,既然單獨改一個不行,我同時改兩個α,就有可能仍然保持等式為0

Andrew Ng機器學習公開課筆記 -- 支援向量機

the key reason that smo is an efficient algorithm is that the update to αi, αj can be computed very efficiently. 

下面就來看看smo如何在每次疊代中高效的求的局部最優的α1和α2

上面的19可以改寫成,

Andrew Ng機器學習公開課筆記 -- 支援向量機

由于這個值是個常量,因為你要保持除α1和α2以外的都不變,是以寫成

Andrew Ng機器學習公開課筆記 -- 支援向量機

現在把α1和α2的限制用圖表示出來,要保持限制就隻能在這條線上移動,并且要滿足<c 

是以a2的取值在[l,h]

Andrew Ng機器學習公開課筆記 -- 支援向量機

繼續變換20,得到

Andrew Ng機器學習公開課筆記 -- 支援向量機

代入目标函數,我們先求出α2,然後根據上面的式子算出α1

Andrew Ng機器學習公開課筆記 -- 支援向量機

treating α3, . . . , αm as constants, you should be able to verify that this is just some quadratic function in α2.

因為a3到am都是常數,你試着代入原來的w(), 會發現一定是得到α2的二次函數

即是這樣的形式,

Andrew Ng機器學習公開課筆記 -- 支援向量機

這個求極值,大家都應該沒問題,很簡單

問題是這樣求出的極值點不一定在[l,h]的範圍内

是以有,在範圍内最好,不在範圍内的話,也需要clip到範圍内

Andrew Ng機器學習公開課筆記 -- 支援向量機

there’re a couple more details that are quite easy but that we’ll leave you to read about yourself in platt’s paper: one is the choice of the heuristics used to select the next αi, αj to update; the other is how to update b as the smo algorithm is run.

本文章摘自部落格園,原文釋出日期:2014-04-24 

繼續閱讀