ML Lecture 20: Support Vector Machine

  • 先以+1和-1表示兩個分類
    • ˆy1...ˆyn 表示第一筆資料到第n筆資料的label,值為+1或-1
    • 我們期望 ˆynf(x)乘積越大 越好,因此 ˆynf(x) 越大,loss應該要越小
    • 理想狀況是:ˆynf(x) 為正,則loss=0,ˆynf(x)為負,則loss=1,但是這個loss function無法微分,不能做gradient descent
    • hinge loss: 只要 ˆynf(x)>1 loss就是0,否則 ˆynf(x) 越小,loss越大
      • hinge loss 比較不怕 outlier
      • 使用 hinge loss,當 ˆyn=1 時,只要 f(x)>1,loss就是0;當 ˆyn=1 時,只要 f(x)<1,loss 就是0

Linear SVM

  • hinge loss 是 convex function
  • regularization term 也是 convex function
  • 相加仍為 convex function,gradient descent做起來相當簡單
  • 與 logistic regression 唯一的差別是 loss function ,使用 cross entropy 就是 LR,使用 hinge loss 就是 linear SVM

  • 可以有deep structure

  • 也可以使用 gradient descent 解

gradient descent

結論:L(f)wi=nδ(ˆynf(xn)<1)ˆynxni

  • depends on 參數 wδ(ˆynf(xn)<1)ˆyn 可以用 cn(w) 來代替

Linear SVM - another formulation (我們熟悉的 SVM 樣貌)


注意上圖兩個紅框框裡面的式子代表不一樣的意義

  • 但是因為 loss function 要 minimize ϵn,下面的紅色框就和上面的紅色框相同了

損失函數 L(f)=nl(f(xn),ˆyn)+λ||w||2

  • l(f(xn),ˆyn) : hinge loss,即 max(0,1ˆynf(xn))
  • λ||w||2: regularization項

現在把 hinge loss 換成 ϵn,即

  • ϵn=max(0,1ˆynf(xn))
  • L(f)=nϵn+λ||w||2

而我們想 minimize loss 的時候,ϵn=max(0,1ˆynf(x)) 這件事等同於

  • ϵn0
  • ϵn1ˆynf(x)ˆynf(x)1ϵn

也就是說當我們無法達到 ˆynf(x)1 時,ϵn 可以放寬我們的標準(根據2式),故 ϵn又名 slack variable

Dual Representation

而最後解出來的 w 可以視為 data point 的 linear combination,即
w=nαnxn
WHY?
一般會使用 Lagrange Multiplier 解出之前提到的式子來證明,不過現在用 gradient descent 的觀點來看這件事
Gradient Descent 對於第i維的w,update

  • wiwiηncn(w)xni
    • cn(w)=l(f(xn,ˆyn))f(xn)=δ(ˆynf(xn)<1)ˆyn

也就是 wwηncn(w)xn

以 hinge loss 而言,大多數的 cn(w) 會等於0,也就是 w=nαnxn 中大多數的 αn 會等於0,只有幾個 data point 的係數不為0,而係數不為0的那些 xn ,就被稱為 support vector。 若w初始化為0,則最後得到的w會是 data point 的 linear combination。而使用 data point 的 linear combination 做為w的好處是,可以使用到 kernel method

kernel method

w=Xα, 所以 f(x)=wTx=αTXTx=nαn(xnx) 我們又可以把 xnx 寫成 K(xn,x) 因此 f(x)=nαnK(xn,x) f(x) 中,只有α是未知的,也就是說我們的目的是找出[α1,α2,...,αn]使得 loss function 最小

因此我們只需要知道 K(x,z) 是多少,並不需要知道 x 這個 vector 是長什麼樣子

Kernel Trick

當我們要把所有的 x transform 成 ϕ(x) 時,kernel trick 很有用 Q: K(x,z) 的定義就是兩個 vector 做完 feature transform ϕ 之後的內積 ϕ(x)ϕ(z) 嗎???

舉例 1

  • x=[x1x2]
  • ϕ(x)=[x122x1x2x22]
  • K(x,z)=ϕ(x)ϕ(z)=[x122x1x2x22][z122z1z2z22]=x12z12+2x1x2z1z2+x22z22 這是土法煉鋼的算法
  • 我們可以把上面那個 K(x,z) 的結果轉換成 (x1z1+x2z2)2=(xz)2,這樣可以省下許多計算
    • 個人理解:假設 xnx 維的 vector;ϕ(x)nϕ 維的 vector,則計算 ϕ(x)ϕ(z) 都需要 nϕ 次計算、計算 ϕ(x)ϕ(z) 需要 nϕ 次計算。因此一共至少要進行 O(nϕ) 次計算
    • 而直接計算 (xz)2 則只需要 nx 次計算

舉例 2

  • 把 x 的部分串成一個 vector 就是 ϕ(x)
  • 把 z 的部分串成一個 vector 就是 ϕ(z)

舉例 3 - Radial Basis Function Kernel

如果把 exp(12||xz||2) 視為一個 kernel K(x,z),則 feature transform 的維度會是無窮大,為什麼?

  • exp(12||x||2) 只和 x 有關,因此我們用 Cx 表示它;同理,我們用 Cz 來表示 exp(12||z||2)
  • CxCzexp(xz) 用泰勒展開會得到後面那行的結果 (可以視為無窮多維的 feature inner product)

RBF kernel因為是投射到無窮多維,所以比較容易overfitting

舉例 4 - Sigmoid Kernel

Sigmoid kernel K(x,z)=tanh(xz) 就像是單層 hidden layer 的 NN,而 neuron 的數目相當於 support vector 的數目

自訂 kernel function

也可以自訂kernel function,用類似similarity方式定義

  • 當 x 是 structured object,很難設計一個 ϕ(x),很適用 kernel function
  • 而 是否可以視為兩個 feature transform 的 inner product 可以用 Mercer's theory 檢查。

Deep Learning 和 SVM 的異同

results matching ""

    No results matching ""