遵循統一的機器學習框架理解SVM
一、前言
- 我的博客僅記錄我的觀點和思考程序,歡迎大家指出我思考的盲點,更希望大家能有自己的理解,
- 本文參考了李宏毅教授講解SVM的課程和李航大大的統計學習方法,
二、理解
統一的機器學習框架(MLA):
1.模型(Model)
2.策略(Loss)
3.演算法(Algorithm)
按照如上所說框架,SVM最核心的就是使用了 Hinge Loss 和 核方法 ,
SVM: Hinge Loss + Kernel Method
Model
給定資料集 \((x^1,\hat{y}^1),(x^2,\hat{y}^2)...(x^n,\hat{y}^n)\),其中\(\hat{y}^i\in\{1,-1\}\),且線性函式:
\[f(x)=w^Tx+b \]
\[y=\begin{cases} 1,\quad &f(x)>0\\ -1, &f(x)<0 \end{cases}\]
同時:
當 \(\hat{y}=1\) 時,\(f(x)\)越大越好; \(\hat{y}=-1\) 時,\(f(x)\)越小越好,
綜合來說即:\(\hat{y}f(x)\) 越大越好,
Loss
結構風險最小化:經驗風險+正則項
經驗風險
上面說到我們希望 \(\hat{y}f(x)\) 越大越好,也就是當 \(\hat{y}f(x)\) 越大時,損失應該越小(Large Value, Small Loss),
1.考慮使用 \(sigmoid + cross\ entropy\) 的損失函式:
\[\hat{y}=\begin{cases} +1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(\sigma(f(x)))\\ -1,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-\sigma(f(x))) \end{cases}\]
考慮到 \(1-\sigma(f(x))=1-\frac{1}{1+exp(-f(x))}=\frac{1}{1+exp(f(x))}=\sigma(-f(x))\)
\[Loss = -ln(\sigma(\hat{y}f(x)))=ln(1+exp(-\hat{y}f(x))) \]
這個就是西瓜書中的對率損失,
2.使用Hinge Loss損失函式:
使用對率損失時,希望\(\hat{y}f(x)\)越大越好,好上加好,永無止境的那種,
換一種角度看,假如我們希望 \(\hat{y}f(x)\) 做的足夠好就可以了,也就是說當 \(\hat{y}f(x)>1\) 時,我們認為它已經做的足夠好了,此時損失就為0了,
題外話:Hinge Loss就好像橫向學習,很多時候我們需要學習很多領域的知識,此時大概知道、了解就行;對率損失就像縱向學習,在自己的領域需要鉆研,好上加好,
\[Loss = max(0,1-\hat{y}f(x)) \]
正則項
\[\frac{1}{2}||w||^2 \]
綜上所述,最終的損失函式:
\[Loss = \frac{1}{2}\lambda||w||^2 + \sum_{i=1}^n max(0,1-\hat{y}^i f(x^i)) \]
注意到Loss中正則項是凸函式,經驗損失項也是凸函式,直接用梯度下降法就可以求解,
Algorithm
梯度下降法
\[\frac{\partial L}{\partial w} = \lambda w+ \sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i x^i \]
\[\frac{\partial L}{\partial b} = \sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i \]
其中\(\delta(\hat{y}^i f(x^i) < 1)\)是指示函式,
\[w^{k+1}=w^k-\eta(\lambda w^k+ \sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i x^i) \]
\[b^{k+1}=b^k-\eta(\sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i) \]
總結
到目前位置所做的事就是:對于一組給定的資料,找到一個超平面劃分它們,進行分類,且要求盡可能做的好(策略是HingeLoss),考慮到在當前維度或者空間可能做的不是很好(可分性不是很好),可以把這些資料點變換空間或者升維,在另一個空間具有更好的可分性,這樣可以把當前任務做的更好,
\[z = \phi(x) \]
z表示對x進行變換后的形式(可以是高維空間,也可以是低維空間),此時再使用上面所說的方法
\[Loss = \frac{1}{2}\lambda||w||^2 + \sum_{i=1}^n max(0,1-\hat{y}^i f(z^i)) \]
\[Loss = \frac{1}{2}\lambda||w||^2 + \sum_{i=1}^n max(0,1-\hat{y}^i f(\phi(x^i))) \]
不足之處:對x進行變換后得到z,首先我們需要計算得到z,再進行后續的計算,當升維后z的維度很大,此時雖然可分性增加了,但是計算量會大大增加,而且對于特殊情況,比如z是無限維時,z根本就無法計算出來,由此引出核方法,
擴展
- 對于一個深度神經網路做二分類任務,一般我們使用交叉熵作為損失函式,假如把損失函式替換為hingeloss,則就是深度學習版的SVM,
- 把深度神經網路的前n-1層看作一個特征變換層,最后一層看作分類層,與我們總結中說的就非常相似了,把 \(x\) 進行轉換,再進行分類,不同點在于:我們所說的SVM這個變換的函式是我們定義的,是確定的,而Deep Learning里的轉換函式是不定的,是通過資料學出來的,
總的來說,SVM和深度學習分類任務遵循統一的思想,從本質上來說沒必要區分它們,
三、對偶形式
寫出對偶形式的目的是:將 \(w,b\) 表示為資料點的線性組合,這樣可以把 \(\phi(x^i)\phi(x^j)\) 這種在高維空間的計算轉換成成 \(\kappa(x^i,x^j)\) 在低維空間計算,再通過核函式直接得到最終的值的方式,
隱含的思想是:我并不需要了解中間的程序(升維后的值),只需要得到他們之間的關系就行(核函式),核函式 \(\kappa\) 就表示了這種關系,
根據 \(w,b\) 的求解公式的特性,當 \(w^0=0,b^0=0\) 時,容易看出 \(w,b\) 是給定資料點的線性組合(Linear Combination)
\[w = \sum_{i=1}^n \alpha_i \hat{y}^i x^i \]
\[b = \sum_{i=1}^n \beta_i \hat{y}^i \]
\[\alpha_i= \eta\{(1-\eta \lambda)^k \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->0}+(1-\eta \lambda)^{k-1} \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->1}+...\\+(1-\eta \lambda)^0 \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->k}\} \]
\[\beta_i= \eta\{\delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->0}+ \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->1}+...\\+ \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->k}\} \]
這里要區別于感知機,因為在此處有正則項,\(\lambda > 0\),假如 \(\lambda=0\) 時,則 \(\alpha_i=\beta_i\)
此時:
\[f(x) = w^Tx+b= (\sum_{i=1}^n \alpha_i \hat{y}^i x^i)^{T}x+\sum_{i=1}^n \beta_i \hat{y}^i \]
\[f(x) = w^Tx+b= (\sum_{i=1}^n \alpha_i \hat{y}^i z^i)^{T}z+\sum_{i=1}^n \beta_i \hat{y}^i \]
\[f(x) = w^Tx+b= \sum_{i=1}^n \alpha_i \hat{y}^i \kappa (z^i,z)+\sum_{i=1}^n \beta_i \hat{y}^i \]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/73666.html
標籤:其他
上一篇:如何免費使用GPU跑深度學習代碼
