ML Lecture 20: Support Vector Machine
- 先以+1和-1表示兩個分類
- ˆy1...ˆyn 表示第一筆資料到第n筆資料的label,值為+1或-1
- 我們期望 ˆyn 與 f(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)) 這件事等同於
- ϵn≥0
- ϵn≥1−ˆ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
- wi←wi−η∑ncn(w)xni
- cn(w)=∂l(f(xn,ˆyn))∂f(xn)=−δ(ˆynf(xn)<1)ˆyn
也就是 w←w−η∑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(xn⋅x)
我們又可以把 xn⋅x 寫成 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)=[x12√2x1x2x22]
- K(x,z)=ϕ(x)⋅ϕ(z)=[x12√2x1x2x22]⋅[z12√2z1z2z22]=x12z12+2x1x2z1z2+x22z22 這是土法煉鋼的算法
- 我們可以把上面那個 K(x,z) 的結果轉換成 (x1z1+x2z2)2=(x⋅z)2,這樣可以省下許多計算
- 個人理解:假設 x 為 nx 維的 vector;ϕ(x) 為 nϕ 維的 vector,則計算 ϕ(x) 和 ϕ(z) 都需要 nϕ 次計算、計算 ϕ(x)⋅ϕ(z) 需要 nϕ 次計算。因此一共至少要進行 O(nϕ) 次計算
- 而直接計算 (x⋅z)2 則只需要 nx 次計算
舉例 2
- 把 x 的部分串成一個 vector 就是 ϕ(x)
- 把 z 的部分串成一個 vector 就是 ϕ(z)
舉例 3 - Radial Basis Function Kernel
如果把 exp(−12||x−z||2) 視為一個 kernel K(x,z),則 feature transform 的維度會是無窮大,為什麼?
- exp(−12||x||2) 只和 x 有關,因此我們用 Cx 表示它;同理,我們用 Cz 來表示 exp(−12||z||2)
- 把 CxCzexp(x⋅z) 用泰勒展開會得到後面那行的結果 (可以視為無窮多維的 feature inner product)
RBF kernel因為是投射到無窮多維,所以比較容易overfitting
舉例 4 - Sigmoid Kernel
Sigmoid kernel K(x,z)=tanh(x⋅z) 就像是單層 hidden layer 的 NN,而 neuron 的數目相當於 support vector 的數目
自訂 kernel function
也可以自訂kernel function,用類似similarity方式定義
- 當 x 是 structured object,很難設計一個 ϕ(x),很適用 kernel function
- 而 是否可以視為兩個 feature transform 的 inner product 可以用 Mercer's theory 檢查。