乾貨|詳解LinearSVM

SVM(二)LinearSVM

不少人(包括我)第一次據說 SVM 時都以爲它是個很是厲害的東西,但其實 SVM 自己「只是」一個線性模型。算法

只有在應用了核方法後,SVM 纔會「升級」成爲一個非線性模型網絡

不過因爲廣泛提及 SVM 時咱們都默認它帶核方法,因此咱們仍是隨大流、稱 SVM 的原始版本爲 LinearSVM。ide

不過即便「只是」線性模型,這個「只是」也是要打雙引號的——它依舊強大,且在許許多多的問題上甚至要比帶核方法的 SVM 要好(好比文本分類)函數

1

感知機回顧

在進入正題以前,咱們先回顧一下感知機,由於 LinearSVM 往簡單來講其實就只是改了感知機的損失函數而已,並且改完以後還很像學習

感知機模型只有和這兩個參數乾貨|詳解LinearSVM,它們決定了一張超平面乾貨|詳解LinearSVM優化

。感知機最終目的是使得乾貨|詳解LinearSVM,其中D是訓練數據集、y只能取正負一訓練方法則是梯度降低,其中梯度公式爲:
乾貨|詳解LinearSVM翻譯

咱們在實際實現時,採用了「極大梯度降低法」(亦即每次只選出使得損失函數最大的樣本點來進行梯度降低)(注:這不是被普遍認可的稱謂,只是本文的一個代稱):
乾貨|詳解LinearSVM3d

而後有理論證實,只要數據集線性可分,這樣下去就必定能收斂blog

2

感知機問題與LinearSVM的解決方案

由感知機損失函數的形式可知,感知機只要求樣本被正確分類,而不要求樣本被「很好地正確分類」。數學

這就致使感知機弄出來的超平面(一般又稱「決策面」)常常會「看上去很不舒服」:
乾貨|詳解LinearSVM

之因此看上去很不舒服,是由於決策面離兩坨樣本都太近了。從直觀上來講,咱們但願獲得的是這樣的決策面:
乾貨|詳解LinearSVM
那麼應該如何將這種理想的決策面的狀態翻譯成機器可以學習的東西呢?直觀來講,就是讓決策面離正負樣本點的間隔都儘量大;而這個「間隔」翻譯成數學語言,其實就是簡單的:
乾貨|詳解LinearSVM

在有了樣本點到決策面的間隔後,數據集到決策面的間隔也就好定義了:
乾貨|詳解LinearSVM

因此咱們如今的目的就轉化爲:

  • 讓全部樣本點都被正確分類:乾貨|詳解LinearSVM
  • 讓決策面離正負樣本點的間隔都儘量大:乾貨|詳解LinearSVM
    注意到 乾貨|詳解LinearSVM 的值在乾貨|詳解LinearSVM 同時擴大 k 倍時不會改變,因此咱們徹底能夠假設:
    乾貨|詳解LinearSVM

可是這會致使另外一個問題:當數據集線性不可分時,上述優化問題是一定無解的,這就會致使模型震盪(換句話說,乾貨|詳解LinearSVM這個約束太「硬」了)。

因此爲了讓模型在線性不可分的數據上仍有不錯的表現,從直觀來講,咱們應該「放鬆」對咱們模型的限制(讓咱們模型的約束「軟」一點):
乾貨|詳解LinearSVM

注意咱們感知機的損失函數爲乾貨|詳解LinearSVM,因而綜上所述能夠看出,LinearSVM 在形式上和感知機的差異只在於損失函數、且這兩個損失函數確實長得很像

3

LinearSVM的訓練

雖然比較簡單,可是調優 LinearSVM 的訓練這個過程是至關有啓發性的事情。

仍然是那句老話:麻雀雖小,五臟俱全。咱們會先展現「極大梯度降低法」的有效性,而後會展現極大梯度降低法存在的問題,最後則會介紹如何應用 Mini-Batch 梯度降低法(MBGD)來進行訓練】

爲了使用梯度降低法,咱們須要先求導。咱們已知:
乾貨|詳解LinearSVM

咱們徹底能夠照搬感知機裏的代碼來完成實現(因爲思路基本一致,這裏就略去註釋了):
乾貨|詳解LinearSVM

下面這張動圖是該 LinearSVM 的訓練過程:
乾貨|詳解LinearSVM

雖然看上去不錯,但仍然存在着問題:

  • 訓練過程其實很是不穩定
  • 從直觀上來講,因爲 LinearSVM 的損失函數比感知機要更復雜,因此相應的函數形狀也會更復雜。這意味着當數據集稍微差一點的時候,直接單純地應用極大梯度降低法可能會致使一些問題——好比說模型會卡在某個很奇怪的地方沒法自拔(什麼鬼)
    經過將正負樣本點的「中心」從原點 (0, 0)(默認值)挪到 (5, 5)(亦即破壞了必定的對稱性)並將正負樣本點之間的距離拉近一點,咱們能夠復現這個問題:
    乾貨|詳解LinearSVM

原理我不敢亂說,這裏只提供一個牽強附會的直觀解釋:

  • 每次只取使得損失函數極大的一個樣本進行梯度降低模型在某個地方可能來來回回都只受那麼幾個樣本的影響死循環(什麼鬼!)
    專業的理論就留待專業的觀衆老爺補充吧

而後解決方案的話,主要仍是從改進隨機梯度降低(SGD)的思路入手(由於極大梯度降低法其實就是 SGD 的特殊形式)。

咱們知道 SGD 的「升級版」是 MBGD、亦即拿隨機 Mini-Batch 代替隨機抽樣,咱們這裏也徹底能夠依樣畫葫蘆。

如下是對應代碼(只顯示出了核心部分):
乾貨|詳解LinearSVM

這樣的話,一般而言會比 SGD 要好

可是問題仍然是存在的:那就是它們所運用的梯度降低法都只是樸素的 Vanilla Update,這會致使當數據的 scale 很大時模型對參數極爲敏感、從而致使持續的震盪(所謂的 scale 比較大,能夠理解爲「規模很大」,或者直白一點——以二維數據爲例的話——就是橫縱座標的數值很大)。

下面這張動圖或許能提供一些直觀:
乾貨|詳解LinearSVM

Again,原理我不敢亂說,因此只提供一個有可能對(更有可能錯)(喂)的直觀解釋:

  • scale太大梯度很大蹦躂得很歡(什麼鬼!)
    專業的理論就留待專業的觀衆老爺補充吧

解決方案的話,一個很直接的想法就是進行數據歸一化:乾貨|詳解LinearSVM

。事實證實這樣作了以後,最基本的極大梯度降低法也能解決上文出現過的全部問題了

而後一個稍微「偷懶」一點的作法就是,用更好的梯度降低算法來代替樸素的 Vanilla Update。

好比說 Adam 的訓練過程將以下(這張動圖被知乎弄得有點崩……將就着看吧:

乾貨|詳解LinearSVM

4

相關數學理論

咱們還沒有解決的問題有三個,但這些問題基本都挺直觀的,因此大致上不深究也沒問題(趴:
乾貨|詳解LinearSVM

這三個問題有必定遞進關係,咱們一個個來看

1)間隔的定義

咱們在定義點到平面(超平面)的間隔時,通常都是這樣作的:

  • 將(垂直)投影到上
  • 設投影點爲,則定義
    乾貨|詳解LinearSVM
    乾貨|詳解LinearSVM
    注意這裏咱們容許(當樣本被錯分類時的)間隔爲負數,因此間隔其實嚴格來講並非通常意義上的距離

那麼爲了找到垂直投影,咱們得先找到垂直於超平面的方向。不難看出就是垂直於的,由於對乾貨|詳解LinearSVM

(兩式相減便可),從而垂直於向量,從而也就垂直於乾貨|詳解LinearSVM
乾貨|詳解LinearSVM
那麼結合以前那張圖,不可貴知咱們能夠設乾貨|詳解LinearSVM(這裏的乾貨|詳解LinearSVM可正可負),因而就有(注意由乾貨|詳解LinearSVM乾貨|詳解LinearSVM
乾貨|詳解LinearSVM

從而
乾貨|詳解LinearSVM

注意這麼定義的間隔有一個大問題:當乾貨|詳解LinearSVM同時增大乾貨|詳解LinearSVM倍時,新獲得的超平面乾貨|詳解LinearSVM其實等價於原超平面乾貨|詳解LinearSVM
乾貨|詳解LinearSVM

但此時乾貨|詳解LinearSVM卻會直接增大乾貨|詳解LinearSVM倍。極端的狀況就是,當乾貨|詳解LinearSVM同時增大無窮倍時,超平面沒變,間隔卻也跟着增大了無窮倍,這固然是不合理的

因此咱們須要把 scale 的影響給抹去,常見的作法就是作某種意義上的歸一化:
乾貨|詳解LinearSVM

(注意:因爲 scale 的影響已被抹去,因此也就跟着被抹去了;同時由乾貨|詳解LinearSVM知,咱們須要在抹去的同時、給乾貨|詳解LinearSVM套一個絕對值)

不難看出上式可改寫爲:
乾貨|詳解LinearSVM

這正是咱們想要的結果

2)優化問題的轉化的合理性

咱們已知原問題爲
乾貨|詳解LinearSVM

且由 1)知,式中的乾貨|詳解LinearSVM其實就是(沒有抹去 scale 的影響的)間隔。因此想要放鬆對模型的限制的話,很天然的想法就是讓這個間隔沒必要必定要不小於 一、而是隻要不小於乾貨|詳解LinearSVM就行,其中乾貨|詳解LinearSVM是個不小於 0 的數。

正如前文所說,只放鬆限制的話確定不行、還得給這個放鬆一些懲罰,因此就在損失函數中加一個乾貨|詳解LinearSVM便可,其中C是個大於 0 的常數、能夠理解爲對放鬆的懲罰力度

綜上所述,優化問題便可合理地轉化爲:
乾貨|詳解LinearSVM

3)優化問題的等價性

爲方便,稱優化問題:
乾貨|詳解LinearSVM

爲問題一;稱:

乾貨|詳解LinearSVM
爲問題二,則咱們須要證實問題一與問題二等價

先來看問題一怎麼轉爲問題二。事實上不可貴知:
乾貨|詳解LinearSVM

注意問題一是針對和進行優化的,且當和固定時,爲使乾貨|詳解LinearSVM最小,必有:

乾貨|詳解LinearSVM
亦即乾貨|詳解LinearSVM。此時損失函數即爲乾貨|詳解LinearSVM,換句話說,咱們就把問題一轉爲了問題二

再來看問題二怎麼轉爲問題一。事實上,直接令乾貨|詳解LinearSVM,就有:

  • 模型的損失爲乾貨|詳解LinearSVM
  • 模型的約束爲乾貨|詳解LinearSVM
    亦即轉爲了問題一

4)LinearSVM 的對偶問題

原始問題
乾貨|詳解LinearSVM

的對偶問題爲
乾貨|詳解LinearSVM

經過拉格朗日乘子法能夠比較簡單地完成證實。不可貴知原始問題相應的拉格朗日函數爲:
乾貨|詳解LinearSVM

其中乾貨|詳解LinearSVM,因而原始問題爲

乾貨|詳解LinearSVM
從而對偶問題爲
乾貨|詳解LinearSVM

因而咱們須要求偏導並令它們爲 0:
乾貨|詳解LinearSVM

注意這些約束中乾貨|詳解LinearSVM除了乾貨|詳解LinearSVM以外沒有其它約束,乾貨|詳解LinearSVM的約束能夠轉爲乾貨|詳解LinearSVM。而後把這些東西代入拉格朗日函數乾貨|詳解LinearSVM、便可獲得:

乾貨|詳解LinearSVM
因而對偶問題爲
乾貨|詳解LinearSVM

亦即
乾貨|詳解LinearSVM

能夠看到在對偶形式中,樣本僅之內積的形式(乾貨|詳解LinearSVM)出現,這就使得核方法的引入變得簡單而天然

5)Extra

做爲結尾,我來敘述一些上文用到過的、可是沒有給出具體名字的概念(假設樣本爲乾貨|詳解LinearSVM,超平面爲乾貨|詳解LinearSVM

  • 樣本到超平面的函數間隔爲:乾貨|詳解LinearSVM
  • 樣本到超平面的幾何間隔爲:乾貨|詳解LinearSVM
  • 優化問題
    乾貨|詳解LinearSVM
    的求解過程常稱爲硬間隔最大化,求解出來的超平面則常稱爲最大硬間隔分離超平面
  • 優化問題
    乾貨|詳解LinearSVM

的求解過程常稱爲軟間隔最大化,求解出來的超平面則常稱爲最大軟間隔分離超平面
而後最後的最後,請容許我不加證實地給出兩個結論(由於結論直觀且證實太長……):

  • 若數據集線性可分,則最大硬間隔分離超平面存在且惟一
  • 若數據集線性不可分,則最大軟間隔分離超平面的解存在但不惟一,其中:
  • 法向量乾貨|詳解LinearSVM)惟一
  • 偏置量(乾貨|詳解LinearSVM)可能不惟一(感謝評論區@shuyu cheng 指出)
    下一篇文章咱們則會介紹核方法,並會介紹如何將它應用到感知機和 SVM 上

但願觀衆老爺們可以喜歡~

推薦閱讀:
精選乾貨|近半年乾貨目錄彙總
天然語言處理中CNN模型幾種常見的Max Pooling操做
乾貨|很是詳細的神經網絡入門解釋
乾貨|詳解LinearSVM
乾貨|詳解LinearSVM

相關文章
相關標籤/搜索