支持向量機數學推導

引言

SVM的數學推導真的是我一生的痛,看看覺得很懂,但是過了3秒,就在糾結,爲什麼可以這樣換算?今天早上在看集成學習的時候,講課的老師一直說SVM、SVM、SVM。。。嗯,沒錯,我又開始回想SVM的數學推導過程,然後,我的一個早上就這樣沒了。
這次趁着剛看完印象深刻,我想將剛釐清的思路寫下來。僅包括如何推出最優化問題,後面的推導我打算等看完凸優化課程再記錄,推導過程參考林軒田老師教授的《機器學習技法》內容。

回顧線性分類

線性分類的分類器表達式爲\[ \begin{equation} h(x) = sgn(w^Tx + b) \end{equation} \]
林老師之前講線性分類時用的是PLA算法,即根據當前分類器是否將所有的點分類正確\((h(x)==y)\)。如果有一個點分類錯誤,那麼朝着這個點或偏離這個點更新。算法一直迭代直到所有的點正確分類爲止。PLA算法得到的分類器不唯一,僅憑線的初始位置這一個因素便能影響最終的分類器。

但是我們知道最想要的分類器長什麼樣子。我們希望這個分類器足夠"胖",也就是說,這根線變胖的時候,邊上的點越遲碰到它越好。

顯然,看了上面的表述,我們應該知道決定這個超平面長什麼樣子的數據點只有那麼幾個,就是那些離超平面更近的點。下面開始將這個問題表述爲一個最優化問題。

最優化問題的推導

我們想要尋找的超平面是\[ \begin{equation} w^Tx + b = 0 \end{equation} \]
對於所有的正例,希望\(w^Tx_i + b > 0\);反之,\(w^Tx_i + b < 0\)。其中,w和b是我們要求的參數。

1.0版本問題

最初的問題可以表述爲
\[ \begin{equation} \mathop{max}\limits_{w,b} \ \ \ margin(w,b) \\ s.t. \ \ \ 分類器將每一個數據點都分類正確 \\ \ \ \ \ \ \ \ \ margin(w,b) = \mathop{min}\limits_{i=1,2,...,n}distance(x_i, w, b) \end{equation} \]

1.1版本問題

我們定義標籤\(y=+1/-1\),分別代表正例和負例。那麼分類器將每一個數據點都分類正確這件事情相當於\(y_i(w^Tx_i+b) > 0\),更新一下問題表述:
\[ \begin{equation} \mathop{max}\limits_{w,b} \ \ \ margin(w,b) \\ s.t. \ \ \ y_i(w^Tx_i+b) > 0 \\ \ \ \ \ \ \ \ \ margin(w,b) = \mathop{min}\limits_{i=1,2,...,n}distance(x_i, w, b) \end{equation} \]

2.0版本問題

\(distance\)代表每一個數據點到超平面的距離,在這裏希望能將它用參數表示出來。假設超平面上的有一個數據點\(x^1\),它是個向量。那麼對於它來說,顯然有\[ \begin{equation} w^Tx^1 + b = 0 \end{equation} \]
現在超平面外有一點\(x^*\),也是向量形式。那麼\((x^*-x_1)\)是兩個向量的相減形式,記爲\(p\)。超平面的法向量爲\(w\),將\(p\)\(w\)上投影的向量的模就是空間上點\(x^*\)到超平面的距離。用線性代數學過的知識表述,先求投影向量:\[ \begin{equation} \frac{w^Tp}{w^Tw}w = \frac{w^T(x^*-x_1)}{w^Tw}w=\frac{w^Tx^*-w^Tx_1}{w^Tw}w \end{equation} \]
又由(5)式,上述的式子再可以表述爲
\[ \begin{equation} \frac{w^T(x^*-x_1)}{w^Tw}w=\frac{w^Tx^*+b}{w^Tw}w \end{equation} \]
好的,已經求出投影向量,接下來求投影向量的模。\(\frac{w^Tx^*+b}{w^Tw}\)是個標量,換言之,求(7)這個向量的模得到:
\[ \begin{equation} \frac{|w^Tx^*+b|}{w^Tw}\left\|w\right\| \end{equation} \]
\(w^Tw\)=\(\left\|w\right\|^2\),因此最終可以寫成:\[ \begin{equation} distance(x^*,w,b) = \frac{|w^Tx^*+b|}{\left\|w\right\|} \end{equation} \]
接下來更新問題表述:
\[ \begin{equation} \mathop{max}\limits_{w,b} \ \ \ margin(w,b) \\ s.t. \ \ \ y_i(w^Tx_i+b) > 0 \\ \ \ \ \ \ \ \ \ margin(w,b) = \mathop{min}\limits_{i=1,2,...,n}\frac{|w^Tx_i+b|}{\left\|w\right\|} \end{equation} \]

2.1版本問題

其中,\(y_i(w^Tx_i+b) > 0\)\(|w^Tx_i+b|\)又是等價的,所以問題可以精簡爲:\[ \begin{equation} \mathop{max}\limits_{w,b} \ \ \ margin(w,b) \\ s.t. \ \ \ margin(w,b) = \mathop{min}\limits_{i=1,2,...,n}\frac{y_i(w^Tx_i+b)}{\left\|w\right\|} \end{equation} \]

3.0版本問題

這一步是最重要的變換了,整個推導過程我一直卡着的點就是這裏。我想用我所理解的說一下這個。

  1. 超平面\(w^Tx+b=0\)能將一個空間分爲兩個部分,將某個向量\(x_i\)代入\(w^Tx+b\)中若是得到\(>0\)或者\(<0\)說明\(x_i\)在超平面的某一側。
  2. 將超平面\(w^Tx+b=0\)的參數\(w,b\)同時縮放,比如都變大3倍或者都變小3倍,這個超平面是不會變的,它還是處於空間中的那個位置。這一點如果不理解可以在二維空間中劃一條線比如\(3x_1+2x_2-1=0\),對等式左右乘3得到新的等式仍然表述二維空間的那條線。
  3. 上面兩個都是前提。雖然對超平面\(w^Tx+b=0\)的參數\(w,b\)同時縮放了,超平面還是那個超平面,但是有一點卻改變了。就是將某個向量\(x_i\)代入\(w^Tx+b\)中計算得到的值。想象一下,這個超平面\(3x_1+2x_2-1=0\),現在有一個點(1,2)代入得到值6,但是如果將參數都放大3倍,再將點重新代入計算,得到的值也放大了3倍變爲18。
  4. 既然參數怎麼放大縮小超平面都不會變,那麼何不爲了方便計算,將\(w,b\)縮放到特定的值\(w^*,b^*\),使得對於那些數據點,有\[\begin{equation}\mathop{min}\limits_{i=1,2,...,n}y_i((w^*)^Tx_i+b^*)=1\end{equation}\]這是做得到的,假設數據點中距離超平面的最近的那個點爲\(x^*\),離超平面的距離爲\(l\)。只要將參數縮放\(l\)倍,不就滿足了(12)式。

這樣一來,原來的問題就表述爲:\[ \begin{equation} \mathop{max}\limits_{w^*,b^*} \ \ \ \frac{1}{\left\|w^*\right\|} \\ s.t. \ \ \ \mathop{min}\limits_{i=1,2,...,n} \ y_i((w^*)^Tx_i+b^*)=1 \end{equation} \]
爲了和原來的形式統一,還是寫爲\[ \begin{equation} \mathop{max}\limits_{w,b} \ \ \ \frac{1}{\left\|w\right\|} \\ s.t. \ \ \ \mathop{min}\limits_{i=1,2,...,n} \ y_i(w^Tx_i+b)=1 \end{equation} \]

4.0版本問題

這裏的約束條件還是有些不友好,能不能將\(min\)這個條件去掉。第一反應是用以下不等式來替換:\[ \begin{equation} for \ (x_i,y_i) \in D \ \ \ y_i(w^Tx_i+b)>=1 \end{equation} \]
遺憾的是,兩者並不是簡單的等價關係,或者說原來的約束條件是能推出(15)的,但是反過來並不行。比如,所有對於所有數據點\(\mathop{min}\limits_{i=1,2,...,n} \ y_i(w^Tx_i+b)=1.26\),它是滿足(15)的,但是推不出原來的約束條件。

但是,我們現在可以證明假如可以求出一組最優參數\(w,b\),它必然能滿足\(\mathop{min}\limits_{i=1,2,...,n} \ y_i(w^Tx_i+b)=1\)
這是爲什麼?
設已經求出的最優解爲\(w_1, b_1\),但是\(\mathop{min}\limits_{i=1,2,...,n} \ y_i(w_1^Tx_i+b_1)=1.26\)。我們可以很肯定的說這組必然不是最優解,因爲我們希望優化的目標爲\(\frac{1}{\left\|w\right\|}\),要令其最大。現在取這組最優解時得到目標值爲\(\frac{1}{\left\|w_1\right\|}\),但是\(\frac{1}{\left\|\frac{w_1}{1.26}\right\|}\)顯然比\(\frac{1}{\left\|w_1\right\|}\)更大,因此現在取到的\(w_1, b_1\)根本不是最優解。最優的參數必然能滿足\(\mathop{min}\limits_{i=1,2,...,n} \ y_i(w^Tx_i+b)=1\).
所以,我們可以放心地用(15)代替原來的約束條件。更新問題表述後變爲:\[ \begin{equation} \mathop{max}\limits_{w,b} \ \ \ \frac{1}{\left\|w\right\|} \\ s.t. \ \ \ \ y_i(w^Tx_i+b) \ >= \ 1 \end{equation} \]

4.1版本問題

爲了符合凸優化數學問題的通常形式,以及方便後續的計算,最終的問題表述爲:\[ \begin{equation} \mathop{min}\limits_{w,b} \ \ \ \ \frac{\left\|w\right\|^2}{2} \\ s.t. \ \ \ \ y_i(w^Tx_i+b) \ >= \ 1 \end{equation} \]

好了,我去看凸優化了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章