iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 28

【Day 28】支援向量機(Support Vector Machine, SVM)(上)

今天要介紹的是支援向量機(Support Vector Machine, SVM),它有兩個特色,而這兩個特色加起來,也就是Hinge Loss加上Kernel Trick就是SVM。

Hinge Loss

首先我們透過這張圖來複習一下Binary Classification,而步驟二一開始列出的loss function是不可微分的,導致要在步驟三做optimization找到一個最好的function是有困難的,所以我們就把 https://chart.googleapis.com/chart?cht=tx&chl=%5Cdelta 用另一個approximate的loss來表示。

Hinge Loss是一個很特別的式子,寫成 https://chart.googleapis.com/chart?cht=tx&chl=max(0%2C%201%20-%20%5Chat%20y%5Enf(x)),如果 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En%20%3D%201,就代表只要 https://chart.googleapis.com/chart?cht=tx&chl=f(x)%20%3E%201,Loss就會等於0,而 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En%20%3D%20-1,就代表 https://chart.googleapis.com/chart?cht=tx&chl=f(x)%20%3C%20-1,Loss就會等於0。

Hinge Loss跟Cross Entropy最大的不同來自於他們對待已經做得好的example的態度,如果我們把 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En 的值從1挪到2,對於Cross Entropy來說,你可以得到Loss的下降,所以Cross Entropy會想要好還要更好,它就有動機讓 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5En 的值更大來讓Loss減少。但是對Hinge Loss來說,它就只需要及格就好,也就是只需要你的值大過margin就可以了。

Linear SVM

Linear SVM就代表我們的funciton是linear的,式子如下圖所示,而Loss function在SVM裡面的特色就是它採用了Hinge Loss,通常我們還會再加上Regularization的term,這兩個都是convex的function,所以這個Loss function就是一個convex的function。

而Logistic Regressino跟Linear SVM的差別只在於Loss function的不同,用Hinge Loss就是Linear SVM,用Cross Entropy就是Logistic Regression,

Linear SVM - gradient descent

有一個用Gradient Descent來訓練SVM的方法叫做Picasso,那就是跟之前一樣做Gradient Descent,經過計算得到下圖的式子,就可以更新參數了。

Linear SVM - another formulation

我們現在把Hinge Loss換成是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En,而我們是要minimize這個Loss function,也就是要選擇一個最小的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En,這樣子下圖兩個紅色框框中的式子就會是相等的。也就是說,SVM告訴我們 https://chart.googleapis.com/chart?cht=tx&chl=%5Chat%20y%5Enhttps://chart.googleapis.com/chart?cht=tx&chl=f(x) 要同號的,它們相乘以後要大於等於一個margin 1,但是這個margin是soft的,有時候沒辦法滿足這個margin,所以可以把你的margin稍微放寬,把它減掉一個 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En,這個 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En 會放寬你的margin,所以我們稱之為slack variable,要注意的是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cepsilon%5En 不能是負的,它必須要大於等於0。

這個formulation是一個Quadratic Programming(QP)的problem,所以你就可以帶一個Quadratic Programming的solver把它解出來,當然前面我們也有講到可以用Gradient Descent來解它。


參考資料

李宏毅老師 - ML Lecture 20


上一篇
【Day 27】遷移學習(Transfer Learning)(下)
下一篇
【Day 29】支援向量機(Support Vector Machine, SVM)(下)
系列文
30天搞懂機器學習是否搞錯了什麼30

尚未有邦友留言

立即登入留言