CS229 SVM 推導和使用心得

這兩天要用到SVR的幾何解釋,特地又翻了CS229 lecture3的筆記。特此記錄一下我理解的思路。

  • 從logistic regression引入,說明我們應該更關注於離separating hyperplane近的點,進而引入了margin的概念。

 

  • 我們想讓margin儘量的大,但最直接的functional margin可以通過縮放ω和b來任意控制。這裏我們當然可以固定ω 2-norm=1,但暫時先不這樣做。
  • 爲此,我們引入了geometric margin。functional magrin就是直接的 ωT*x+b,geometric margin就不那麼直接,大概有以下幾點:
  1. 向量OA-向量BA=向量OB
  2. 向量OA=point A,向量BA=geometric_margin*ω的法向量。而ω的法向量=ω/ω 2-norm
  3. 1,2得到point B,又因爲B在separating hyperplane上,所以 將point B帶入ωT*x+b=0
  4. 將3帶入的式子略加轉換,就得到一個關於geometric margin的等式。
  5. 進一步還以發現,geometric margin = functional margin/ ω 2-norm

  • 下一步就是maximize minimum geometric margin,但由於約束條件2是非凸的。所以,將優化目標由maximize minimum geometric margin改變爲maximize minimum functional margin/ω 2-norm。這裏需要注意一點,第一個約束項的右式從geometric margin變成了functional margin,其原因在於約束項本來就該是functional margin,只是當ω 2-norm是1的時候,functional margin與geometric margin相等且優化目標是geometric margin,纔在約束項中使用的geometric margin。所以當ω 2-norm不爲1時,換回來纔是對的。

 

  • 現在約束2被去掉了,但優化目標又成了非凸的。爲此,我們直接指定優化目標中的functional margin=1。之前我們不固定ω 2-norm=1就是爲了這裏讓functional margin=1
  • 同時呢,functional margin=1後,也可以把取1/ω 2-norm的最小倒一下,得到:

 

  • lagrange duality
  • 先說說lagrange:將含有n個變量和k個約束條件的約束優化問題轉化爲含有(n+k)個變量的無約束優化問題

  • 然後是dual problem:這裏的max是對α和β而言,min則是對ω而言。所謂dual,就是將求解ω和α,β的先後次序對換。一個預設的結論是max min<=min max。另外補充一點是,所謂maximize就是求α和β偏導帶入式子。

  • KTT條件就是對約束項,對lagrange multipliers,對ω的相等或不等條件。

 

  • 將lagrange duality應用在SVM上。先構造lagrange,然後求對偶問題。先求minimize即ω,b的偏導=0,再求maximum即α的偏導=0,即可分別求得ω和b關於α的的等式,以及α的值。
  • αi只有當對應point爲support vector時不爲0,原因在解釋lagrange duality已經說了。
  • 將α帶入ω關於α的等式來求得ω,再根據下式計算出b。

將wTx+b轉化爲內積的表示。這種內積形式的計算量並不大,因爲前面說了,只有support vector對應的α不爲0.

 

  • feature mapping & kernel:

使用featuring mapping代替original feature來訓練和預測SVM模型(最後加上的備註:當然這裏的訓練同樣不是直接使用Φ(x)來計算,而是像上圖這樣,將<xi,x>替換成kernel<xi,x>)。但這樣的計算複雜度太高了,先是算出Φ(x)和Φ(z),再計算 Φ(x)T* Φ(z)。爲了簡化計算,我們引入了kernel。對於下面這中構造的kernel

,對應的Φ(x)如下

證明如下:

爲了便於理解,我還手算了n=2的情況,可以看到,使用kernel和直接用Φ(x)的結果是一樣的,而計算量急劇減少:

可以看到,實際上kernel並不侷限在SVM上,但凡這個算法會用到<x,z>這樣的內積形式,都可以使用Kernel<x,z>替代。

但這裏我有點疑惑,kernel爲什麼會有效。從feature mapping的角度,確實維度比以前大非常多,但是從kernel的角度來看,不過是把內積的結果平方而已,區區一個平方又有什麼用呢?唯一能說服我一點的解釋是,從feature mapping來看,映射到高維的內積,類似於計算兩者的input feature的餘弦相似度;而在kernel的角度看,內積的結果在平方後差異會變得更顯著。這種將擴大內積差異的效果是,內積結果大的重要性被提升,而內積小的重要性下降。也就是說,不但在整個訓練集中只有support vector對預測有效,對不同的預測值來說,support vector的重要性也變得不同,這樣也是可以理解的,離預測點相近的support vector和預測點內積也大,同時參考的意義也大,kernel就放大了這種效果。此外如RBF無不如此,都會擴大內積的差異。至於所謂低維不可分映射至高維就可分了,從kernel的角度看,我無法說服自己,平方一下就從低維變成高維了?

 

  • 不可分情況

我們可以看到,SV對separating hyperplane的影響非常大。所以SVM對噪聲的容忍度是非常小,爲此,我們添加了鬆弛係數,允許部分點在margin之內,但同時呢,要在優化目標需要加上正則項。公式就變成了這樣

 

  • Coordinate ascent & SMO

所謂Coordinate ascent如下圖,就是固定所有其它α,只優化αi。

但是呢,在SVM中,由於KTT條件的,所以固定αi外所有參數,那麼αi也固定了。所以,在SVM要略微修改Coordinate ascent,同時改變兩個參數αi和αj。如何挑選兩個參數需要用到啓發式算法,來獲得全局的最大提升。其餘不變。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章