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


網易公開課,第6,7,8課
notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf

SVM-支持向量機算法概述, 這篇講的挺好,可以參考

 

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

首先需要定義Margin,
直觀上來講,best的那條線,應該是在可以正確分類的前提下,離所有的樣本點越遠越好,why?
因為越靠近分類線,表示該點越容易被分錯,比如圖中的C點,此時y=1,但是只要分類線略微調整一下角度,就有可能被分為y=-1
但對於A點,就可以非常confident的被分為y=1
所以分類線越遠離樣本點,表示我們的分類越confident

image

 

那么如果定義“遠”這個概念?
functional margin
圖中的分類線為,wx+b=0
那么點離這條線越遠,有wx+b>>0或<<0,比如A點
所以functional margin定義為,前面加上y保證距離非負
image ,y取值{-1,1}
可以看出當點離線越遠時,這個margin會越大,表示分類越confident
並且margin>0時,證明這個點的分類是正確的
因為比如訓練集中y=1,而由線性分類器wx+b得到的結果-0.8,這樣表示分錯了,margin一定是<0的

對於訓練集中m的樣本,有
image
即,整體的margin由最近的那個決定
如果要用functional margin來尋找best分類線,
那么我就需要找到使得 image 最大的那條線

但使用functional margin有個問題,因為你可以看到image取決於w和b的值,你可以在不改變分類線的情況下,無限增加w和b的值,因為2x+1=0和4x+2=0是同一條線,但得到的functional margin卻不一樣

geometric margins
再來看另外一種margin,從幾何角度更加直觀的表示“遠”
即該點到線的垂直距離,比如圖中A到線的距離image
image 
現在問題是,如何可以求解出image
可以看到A和分類線垂直相交於B,B是滿足wx+b=0的等式的
所以我們通過A的x和image,推導出B的x,最終通過等式求出image

如果A的x為,image ,AB間距離為image
那么B的x為,image

於是有,
image 
求得,
image 
考慮y=-1的情況,最終得到如下,
image 
可以看到,如果||w|| = 1,那么functional margin 等於geometric margin
那么對於geometric margin,無論w,b的取值都不會改變margin的值,其實就是對functional margin做了norm化

同樣,對於訓練集image
image

 

The optimal margin classifier

先簡單看看凸優化的概念

凸優化問題

用一個比較通俗的方式理解
為什么要凸優化?
這種優化是一定可以找到全局最優的,因為不存在局部最優,只有一個最優點
所以對於梯度下降或其他的最優化算法而言,在非凸的情況下,很可能找到的只是個局部最優

凸集,http://en.wikipedia.org/wiki/Convex_set

很好理解,對於二維的情況比較形象,作為例子
集合中任意兩點的連線都在集合中
image image

凸函數,http://en.wikipedia.org/wiki/Convex_function

函數圖上任意兩點的連線都在above這個圖(這個應該取決於上凸或下凸,都below也一樣)
the line segment between any two points on the graph of the function lies above the graph

換個說法,就是他的epigraph是個凸集,其中epigraph就是the set of points on or above the graph of the function
its epigraph (the set of points on or above the graph of the function) is a convex set

image image
典型的凸函數,如quadratic function f(x)=x^2 and the exponential function f(x)=e^x for any real number x

凸優化問題的定義

在凸集上尋找凸函數的全局最值的過程稱為凸優化
即,目標函數(objective function)是凸函數,可行集(feasible set)為凸集

為何目標函數需要是凸函數?
這個比較容易理解,不是凸函數會有多個局部最優,如下圖,不一定可以找到全局最優
image

為何可行集需要為凸集?
稍微難理解一些,看下圖
雖然目標函數為凸函數,但是如果可行集非凸集,一樣無法找到全局最優
 image

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

即,最大化geometric margin image ,並且訓練集中所有樣本點的geometric margin都大於這個image (因為image)
這里假設||w||=1,所以function margin等同於geometric margin,這里用的是function margin的公式

image 

這個優化的問題是,約束||w||=1會導致非凸集,想想為什么?

所以要去掉這個約束,得到

image

其實改變就是將image替換成image ,因為約束||w||=1就是為了保證image=image,所以替換后就可以直接去掉這個約束

但這個優化仍然有問題,目標函數image 不是凸函數,因為是雙曲線,明顯非凸

繼續,由於function margin通過w,b的縮放可以是任意值,
所以增加約束,image ,這個約束是成立,因為無論image得到什么值,通過w,b都除以image,就可以使image

於是就有,
image ,使這個最大化,即最小化image

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

最終得到,

image

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

 

Lagrange duality

先偏下題,說下拉格朗日乘數法,為什么要說這個?
因為我們在上面看到這種極值問題是帶約束條件的,這種極值問題如何解?好像有些困難

拉格朗日乘數法就是用來解決這種極值問題的,將一個有n 個變量與k 個約束條件的最優化問題轉換為一個有n + k個變量的方程組的極值問題
參考http://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E6%95%B0

 

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

image

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

image

其中image 稱為Lagrange multipliers(拉格朗日算子)

最終,求這個方程組
image 
解出w和拉格朗日算子β,求出f(w)的極值

 

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

假設有函數:f(x, y),要求其極值(最大值/最小值),且滿足條件g\left( x,y \right) = c,

image

看圖,畫出f(x,y)的等高線,和約束條件g(x,y)=c的路徑,會有多處相交
但只有當等高線和約束條件線相切的時候, 才是極值點
因為如果是相交,你想象沿着g(x,y)=c繼續前進,一定可以到達比現在f值更高或更低的點
那么求相切點,就是求解f和g的偏導為0的方程組

 

說到這里,還不夠,因為你發現上面的約束條件是不等式。。。
於是繼續看更通用化的拉格朗日數乘法

image

既有等式,也有不等式的約束,稱為generalized Lagrangian

image 

其中,image

這里先引入primal optimization problem

image

這個啥意思?

這里注意觀察,當約束條件不滿足時,這個式子一定是無窮大,因為如果g>0或h不等於0,那么只需要無限增大image ,那么L的最大值一定是無限大, 而只要滿足約束條件, 那么L的最大值就是f

即,
image

所以,primal optimization problem就等價於最開始的minf(), 並且primal optimization problem是沒有約束條件的,因為已經隱含了約束條件
min的那個一定不是無窮大,所以一定是滿足約束條件的

image

 

再引入dual optimization problem

image

和prime問題不一樣,這里以image 為變量,而非w

image

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

並且簡單可以證明,

image

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

並且在特定的條件下,

image

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

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

 

前面說了,只有在特定條件下,才可以用dual問題替代prime問題
那么這條件是什么?這些條件先列在這里,不理解沒事

Suppose f and the gi’s are convex, and the hi’s are affine.
所有g函數為凸函數,而h函數為affine,所謂affine基本等同於linear,image ,只是多了截距b

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條件,

image

並且,只要任意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問題描述為,
image

其中,g約束表示為,
image 
那么什么時候g=0?當functional margin為1(前面描述optimal margin問題的時候,已經假設funtional margin為1)
所以只有靠近超平面最近的點的functional margin為1,即g=0,而其他訓練點的functional margin都>1
該圖中只有3個點滿足這個條件,這些點稱為support vector,只有他們會影響到分類超平面
實現在訓練集中只有很少的一部分數據點是support vector,而其他的絕大部分點其實都是對分類沒有影響的

image

前面說了半天prime問題和dual問題,就是為了可以用解dual問題來替代解prime問題
用dual問題的好處之一是,求解過程中只需要用到inner productimage ,而表示直接使用x,這個對使用kernel解決高維度問題很重要

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

和上面討論的廣義拉格朗日相比,注意符號上的兩個變化,
w變量—>w,b兩個變量
只有α,而沒有β,因為只有不等式約束而沒有等式約束

對於dual問題,先求

image
這里就是對於w,b求L的min,做法就是求偏導為0的方程組
首先對w求偏導,
image 
得到如下式子,這樣我們在解出dual問題后,可以通過α,進一步算出w
image

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

image

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

image

這就是image, 下一步就是繼續求極值,image

於是有,第一個約束本來就有,第二個約束是對b求偏導得到的結果

image

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,

image

其實理解就是, 找出-1和1中靠超平面最近的點,即支持向量,用他們的b的均值作為b*
因為w定了,即超平面的方向定了,剩下的就是平移,平移到正負支持向量的中間位置為最佳

 

再想的多點,求出w,b后,我們的支持向量機就已經ready了,下面可以對新的數據點進行分類
很簡單其實只要代入image ,-1或1來區分不同的類

這里也把9代入,
image

你可能覺得多此一舉,這樣每次分類都要把訓練集都遍歷一遍
其實無論是使用dual優化問題或是這里,都是為了避免直接計算x,而是代替的計算x的內積,因為后面談到kernel,對於高維或無限維數據直接計算x是不可行的,而我們可以使用kernel函數來近似計算x的內積,這是后話

而且其實,這里的計算量並不大,因為前面介紹了,α只有支持向量是不為0的,而支持向量是很少的一部分

 

 

Kernels

先談談feature mapping,

比如想根據房屋的面積來預測價格,設范圍面積為x,出於便於分類的考慮可能不光簡單的用x,而是用image 做為3個feature
其實將低維數據映射到高維數據的主要原因是,因為一些在低維度線性不可分的數據,到了高維度就是線性可分的了
沒找到合適的圖,想想在二維上看不可分的,到3維或更高維,也許就比較容易用一個超平面划分,這是合理的

這里我們稱,"original” input value(比如x)為input attributes
稱new quantities(image) 為input features

We will also let φ denote the feature mapping,
image

在將低維度的x mapping到高維度的φ(x)后,只需要把φ(x)代入之前dual problem的式子求解就ok

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

所以kernel函數出場,

image

我們可以通過計算kernel函數來替代計算<φ(x), φ(z)>,kernel函數是通過x,z直接算出的
所以往往都是直接使用kernel函數去替換<x,z>,將svm映射到高維,而其中具體的φ()你不用關心(因為計算φ本身就是很expensive的),你只要知道這個kernel函數確實對應於某一個φ()就可以

 

polynomial kernel

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

image

這個kernel是可以推導出φ()的,
image 
可以看出最終的結果是,φ將x mapping成xx,如下(假設n=3)

image

可見,如果這里如果直接計算image ,復雜度是image ,因為x的維度為3,映射到φ就是9
而計算K函數,復雜度就只有O(n)

推廣一下,加上常數項

image

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

image

再推廣一下,

image ,將x mapping到image ,雖然在image ,但是計算K仍然都是O(n)的
雖然上面都找到了φ, 其實你根本不用關心φ是什么, 或者到底mapping到多高的維度

 

Gaussian kernel

在來看另外一種kernel函數,
來想一想內積的含義,當兩個向量越相近的時候,內積值是越大的,而越遠的時候,內積值是越小的
所以我們可以把kernel函數,看成是用來衡量兩個向量有多相似

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

image

(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 φ.

對於 consider some finite set of m pointsimage

我們可以得到一個m-by-m的Kernel matrix K,其中
image ,這里符號用重了,K同時表示kernel函數和kernel矩陣

這里如果K是個valid的kernel函數,那么有
image

於是可以證明,K是個半正定矩陣 (positive semi-definite)
(這個沒有找到比較通俗易懂的解釋方式,只知道定義是對於任何非0向量z,都有zTKz>=0,那么K稱為半正定矩陣。誰可以通俗的解釋一下)
image

這里只證明必要條件,即K函數是valid kernel函數,那么K矩陣一定是半正定矩陣,其實這是個充分必要條件,即Mercer kernel的定義

image

所以有了這個定理,就比較方便了,你不用去找是否有對應的φ,只需要判定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

討論異常點,或離群點,比如下圖,是否值得為了左上角那個點,將划分線調整成右邊這樣
從圖上直觀的看,應該不值得,右邊的划分線遠沒有左邊的合理,而且那個數據點很有可能是個異常點,可以忽略掉

image

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

image

其實就是加上修正值ξ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.

列出拉格朗日,

image

最終得到的dual problem是,

image

和之前的相比,只是α的取值范圍有了變化,現在還要<=C

對於這個dual problem的KKT dual-complementarity conditions變化為,

image

這個說的更清楚點,http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988415.html

 

The SMO algorithm by John Platt

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

Coordinate ascent (descent)

坐標上升或下降,取決於求max或min
想法很簡單,求解m維的最優問題

image

算法,不停迭代,每次迭代都是只改變某一個維度來做最優化,其他維度保持不變

image

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

image

前面學過梯度下降和牛頓法,有啥區別
牛頓,收斂很快,但每次收斂的代價比較大
坐標上升,收斂比較慢,但是每次收斂的代價都很小
梯度下降,不適合高維,因為每次迭代都需要算出梯度,需要考慮所有維度

 

SMO (sequential minimal optimization)

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

image

注意到19這個約束,這個約束注定無法使用坐標上升

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

image

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

所以提出SMO算法,

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

image

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可以改寫成,

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

image

現在把α1和α2的約束用圖表示出來,要保持約束就只能在這條線上移動,並且要滿足<C
所以a2的取值在[L,H]

image

繼續變換20,得到

image

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

image

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

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

即是這樣的形式,

image

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

問題是這樣求出的極值點不一定在[L,H]的范圍內

所以有,在范圍內最好,不在范圍內的話,也需要clip到范圍內

image 

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.


免責聲明!

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



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