線性支持向量機:一個名字奇怪但思想簡單的算法

原文連接:mp.weixin.qq.com/s/K1xjEaBMA…算法

本文是《機器學習寶典》第 9 篇,讀完本文你可以掌握機器學習中線性支持向量機模型。機器學習

在前一篇 邏輯迴歸 中已經知道邏輯迴歸可以完成二分類,這篇文章介紹另一個可以實現二分類的模型:支持向量機(support vector machine,SVM)。這個名字會讓初學者有很大的困惑,不理解到底什麼是所謂的"支持向量"。相信經過這篇文章後,你會明白這個名稱的含義。函數

從邏輯迴歸到支持向量機

咱們已經知道,將一個樣本中的各個特徵進行線性組合的結果是 \boldsymbol{\omega}^{T} \boldsymbol{x} + b ,它的取值範圍是 (- \infty,  +\infty) ,邏輯迴歸經過 sigmoid 函數 g(z) = \frac{1}{1 + e^{-z}} 將線性組合的結果映射到 (0, 1) ,映射後的結果認爲是 y=1 (正樣本)的機率。仔細觀察下邏輯迴歸的完整公式: f_{\boldsymbol{\omega}, b}(\boldsymbol{x}) = g(\boldsymbol{\omega}^{T} \boldsymbol{x} + b) = \frac{1}{1 + e^{-(\boldsymbol{\omega}^{T} \boldsymbol{x} + b)}},咱們可以發現,其實 f_{\boldsymbol{\omega}, b} 的結果只是與 \boldsymbol{\omega}^{T} \boldsymbol{x} + b 有關,sigmoid 函數 g(z) 的做用只是映射,若是 \boldsymbol{\omega}^{T} \boldsymbol{x} + b > 0,則 f_{\boldsymbol{\omega}, b}(\boldsymbol{x}) > 0.5,那麼就認爲該樣本目標 y=1;若是 \boldsymbol{\omega}^{T} \boldsymbol{x} + b < 0,則 f_{\boldsymbol{\omega}, b}(\boldsymbol{x}) < 0.5,那麼就認爲該樣本目標 y=0學習

回過頭仔細想下,邏輯迴歸實際上是使用所有訓練樣本去學習參數 \boldsymbol{\omega}, b,儘量使得學到的參數 \boldsymbol{\omega}, b 可以將正樣本的特徵的線性組合 \boldsymbol{\omega}^{T} \boldsymbol{x} + b 大於0,將負樣本的特徵的線性組合 \boldsymbol{\omega}^{T} \boldsymbol{x} + b 小於0。這麼作的緣由是由於邏輯迴歸藉助了 sigmoid 函數 g(z),這樣在它的的眼中,\boldsymbol{\omega}^{T} \boldsymbol{x} + b 越大於 0,屬於正樣本的機率就越高;越小於 0,屬於負樣本的機率就越高。優化

進一步,若是咱們將標籤 y = 0y = 1 替換成 y = -1y = 1 ,同時映射函數 g(z) 不是 sigmoid 函數,而是下面這個函數:.net

g(z)=
\begin{cases}
1& z \geq 0 \\
-1& z < 0
\end{cases}

那麼咱們能夠認爲,只要 f_{\boldsymbol{\omega},b}(\boldsymbol{x}) = \boldsymbol{\omega}^{T} \boldsymbol{x} + b \geq 0,標籤 y = 1f_{\boldsymbol{\omega},b}(\boldsymbol{x}) = \boldsymbol{\omega}^{T} \boldsymbol{x} + b < 0,標籤 y = -1。因爲一個超平面能夠經過 \boldsymbol{\omega}^T \boldsymbol{x} + b = 0 來表示,因此能夠認爲咱們找到了一個劃分超平面,這個超平面可以將正負樣本區分開。爲了直觀理解,下圖是在二維空間中線性可分的狀況下超平面劃分樣本的示意圖(二維空間中,超平面會是一條直線)。cdn

在超平面 \boldsymbol{\omega}^T \boldsymbol{x} + b = 0 中,\boldsymbol{\omega} = (\omega_{1}, \omega_{2}, ..., \omega_{d}) 表示法向量,決定超平面的方向,b 表示位移項,決定超平面與原點之間的距離。也就是說,參數 \boldsymbol{\omega}b 共同決定了這個超平面。blog

這裏有個小問題:\boldsymbol{\omega} 爲何是超平面的法向量呢?能夠這樣證實,假設 \boldsymbol{x}_{1}, \boldsymbol{x}_{2} 是該超平面上的兩個點,則向量 \boldsymbol{\omega}^T 和向量 \boldsymbol{x}_{1} - \boldsymbol{x}_{2} 的點積爲:get

\boldsymbol{\omega}^T (\boldsymbol{x}_{1} - \boldsymbol{x}_{2}) = \boldsymbol{\omega}^T \boldsymbol{x}_{1} - \boldsymbol{\omega}^T \boldsymbol{x}_{2} = (-b) - (-b) = 0

\boldsymbol{\omega}  \perp (\boldsymbol{x}_{1} - \boldsymbol{x}_{2}) ,因爲 (\boldsymbol{x}_{1} - \boldsymbol{x}_{2}) //  \boldsymbol{\omega}^T  \boldsymbol{x} + b,因此 \boldsymbol{\omega}  \perp (\boldsymbol{\omega}^T \boldsymbol{x} + b)it

支持向量機其實要作的就是找到這樣一個劃分超平面 (\boldsymbol{\omega}, b),可以在特徵空間將兩類樣本分開,而且該超平面距離各樣本最遠。此外,相比於距離超平面較遠的一些樣本,咱們更關心距離超平面較近的一些樣本是否能被正確劃分,這些距離焦平面較近的樣本就是支持向量。也就是說,**支持向量機只是使用少許的訓練樣本(支持向量)來學習超平面參數 \boldsymbol{\omega}b **。這是支持向量機與邏輯迴歸不同的一個地方,由於邏輯迴歸是使用所有的訓練樣本學習參數 \boldsymbol{\omega}b 。能夠看出,支持向量機的思想是很是簡單的。

函數間隔與幾何間隔

咱們已經知道,支持向量機要找的超平面須要在特徵空間中距離各樣本最遠,那如何衡量遠近呢?咱們可使用間隔來衡量。說到間隔,存在函數間隔幾何間隔兩種。

咱們先來講下函數間隔,當咱們的超平面 \boldsymbol{\omega}^T \boldsymbol{x} + b = 0 肯定後,咱們定義一個樣本的函數間隔爲:

\hat{\gamma}^{(i)} = y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b)

想想,函數間隔 \hat{\gamma} 有什麼含義呢?其實咱們能夠經過它的正負性來判斷分類是否正確。\hat{\gamma} 若是大於等於 0 的話,說明分類正確;反之分類錯誤。

若是特徵空間線性可分,必定存在一個超平面將樣本徹底分類正確,那麼這時候函數間隔 \hat{ \gamma } 必定是大於等於 0 的。

\hat{\gamma}^{(i)} = |\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b|

獲得了一個樣本的函數間隔,如今定義下在訓練數據上的函數間隔:

\hat{\gamma} = \min \hat{\gamma}^{(i)}, \quad i=1,2, \cdots, m

也就是說訓練數據上的函數間隔就是訓練數據中最小的一個訓練樣本的函數間隔。

不過函數間隔有這樣一個問題:**若是等比例的改變參數 \boldsymbol{\omega}b,這時候超平面並無發生改變,可是函數間隔卻會發生改變。**好比將參數 \boldsymbol{\omega}b 同時乘以 2,函數間隔也會變爲以前的 2 倍。

爲了解決上面的問題,咱們引入了幾何間隔的概念。一個樣本的幾何間隔的表示以下:

\tilde{\gamma}^{(i)} = \frac{|\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b|}{\Vert \boldsymbol{\omega} \Vert}

能夠看到,幾何間隔表示的就是空間中的點 \boldsymbol{x} 到超平面的距離。如何證實呢?其實 \boldsymbol{x} 到超平面的距離其實等於 \boldsymbol{x} 與超平面上某點 \boldsymbol{x}_{0} 連線向法向量 \boldsymbol{\omega} 的投影:

\begin{align*}
proj_{\boldsymbol{\omega}}(\boldsymbol{x} - \boldsymbol{x}_{0})
&= \Vert \boldsymbol{x} - \boldsymbol{x}_{0}\Vert \cdot |cos<\boldsymbol{\omega}, \boldsymbol{x} - \boldsymbol{x}_{0}>| \\
&= \Vert \boldsymbol{x} - \boldsymbol{x}_{0}\Vert \cdot \frac{|\boldsymbol{\omega}^T \cdot (\boldsymbol{x} - \boldsymbol{x}_{0})|}{\Vert \boldsymbol{\omega} \Vert \Vert \boldsymbol{x} - \boldsymbol{x}_{0} \Vert} \\
&= \frac{|\boldsymbol{\omega}^T \boldsymbol{x} - \boldsymbol{\omega}^T \boldsymbol{x}_{0}|}{\Vert \boldsymbol{\omega} \Vert} \\
&= \frac{|\boldsymbol{\omega}^T \boldsymbol{x} + b|}{\Vert \boldsymbol{\omega} \Vert}
\end{align*}

因爲 \hat{\gamma}^{(i)} = y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) ,因此:

\tilde{\gamma}^{(i)} = \frac{\hat{\gamma}^{(i)}}{\Vert \boldsymbol{\omega} \Vert}

也就是說,幾何間隔就是將函數間隔對 \boldsymbol{\omega} 作了歸一化。相似的,全部訓練數據上的幾何間隔就是訓練數據中最小的一個訓練樣本的幾何間隔:

\tilde{\gamma} = \min\tilde{\gamma}^{(i)}, \quad i=1,2, \cdots, m

最大間隔分類器

瞭解了間隔以後,SVM 要作的就是找到一個劃分超平面,使得距離超平面最近的樣本能有更大的間隔。間隔表示距離劃分超平面最近的樣本到劃分超平面幾何間隔的兩倍。即間隔 \gamma 定義以下:

\gamma = 2\tilde{\gamma} = 2\frac{\tilde{\gamma}}{\Vert \boldsymbol{\omega} \Vert}

想要找到具備最大間隔的劃分超平面,也就是找到知足下面公式中約束的參數 \boldsymbol{\omega}b ,使得 \gamma 最大,即

\begin{align*}
& \max_{\boldsymbol{\omega}, b} 2\frac {\hat{\gamma}} {\Vert \boldsymbol{\omega} \Vert} \\
& s.t. \quad y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) = \hat{\gamma}^{(i)} \ge \hat{\gamma}, \quad i=1,2,\cdots,m
\end{align*}

爲了求解方便,咱們將全局函數間隔 \hat{\gamma} = 1 (稍後解釋下爲何能夠這樣作),這樣目標函數就變爲了:

\begin{align*}
& \max_{\boldsymbol{\omega}, b} \frac {2} {\Vert \boldsymbol{\omega} \Vert} \\
& s.t. \quad y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \ge 1, \quad i=1,2,\cdots,m
\end{align*}

從下圖能夠直觀的看到間隔的含義,也就是兩條虛線間隔邊界之間的距離,虛線間隔邊界的知足 y(\boldsymbol{\omega}^T \boldsymbol{x} + b) = 1 , 在虛線間隔邊界上的樣本點就是支持向量支持向量的含義是說超平面的參數 \boldsymbol{\omega}b 僅由支持向量決定,與其餘樣本無關。

因爲求 \frac{2}{\Vert  \boldsymbol{\omega}\Vert} 最大值等價於求 \frac{1}{2} \Vert \boldsymbol{\omega} \Vert ^{2} 最小值,所以目標函數能夠進一步改寫:

\begin{align*}
& \min_{\boldsymbol{\omega}, b} \frac{1}{2} \Vert \boldsymbol{\omega} \Vert ^{2} \\
& s.t. \quad y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \ge 1, \quad i=1,2,\cdots,m
\end{align*}

獲得目標函數以後,回過頭來解釋下前面令全局函數間隔 \hat{\gamma} = 1 的可行性。假設全局的函數間隔是在樣本點 x^{j} 處取得的,即 \hat{\gamma} = y^{j}(\boldsymbol{\omega}^T \boldsymbol{x}^{j} + b) ,那麼目標函數爲:

\begin{align*}
& \max_{\boldsymbol{\omega}, b} 2\frac {\hat{\gamma}} {\Vert \boldsymbol{\omega} \Vert} \\
& s.t. \quad y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \ge \hat{\gamma}, \quad i=1,2,\cdots,m; \quad \hat{\gamma} = y^{n}(\boldsymbol{\omega}^T \boldsymbol{x}^{j} + b)
\end{align*}

若是將超平面的參數 \boldsymbol{\omega}b 乘以一個大於 0 的係數 k,超平面沒有發生變化,只是函數表示形式變爲了 (k \boldsymbol{\omega}^T \boldsymbol{x} + k b) = 0,這時候全局的函數間隔依然是在樣本點 x^{j} 處取得,只是變爲了原來的 k 倍數,即 \hat{\gamma} = y^{j}(k \boldsymbol{\omega}^T \boldsymbol{x}^{j} + k b),那麼這時候的目標函數爲:

\begin{align*}
& \max_{\boldsymbol{\omega}, b} 2\frac {\hat{\gamma}} {k \Vert \boldsymbol{\omega} \Vert} \\
& s.t. \quad y^{(i)}(k \boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + k b) \ge \hat{\gamma}, \quad i=1,2,\cdots,m; \quad \hat{\gamma} = y^{j}(k \boldsymbol{\omega}^T \boldsymbol{x}^{j} + k b)
\end{align*}

化簡後與上面的目標函數是等價的,也就是說收縮函數間隔,對目標函數求解沒有影響。

原始問題與對偶問題

前面已經獲得了最大間隔分類器的目標函數,這是一個典型的帶不等式約束的二次規劃求解問題。這時咱們能夠經過一些優化的計算包來求解,不過藉助拉格朗日 (Lagrange) 函數和對偶問題(dual problem), 咱們能夠將問題更加簡化。

首先,能夠將目標函數進行變形,獲得:

\begin{align*}
& \min_{\boldsymbol{\omega}, b} \frac{1}{2} \Vert \boldsymbol{\omega} \Vert ^{2} \\
& s.t. \quad 1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \le 0, \quad i=1,2,\cdots,m
\end{align*}

根據拉格朗日乘子法,對不等式的約束條件增長拉格朗日乘子 \boldsymbol{\alpha} ,則該問題的拉格朗日函數爲:

L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) = \frac{1}{2} \Vert \boldsymbol{\omega} \Vert^{2} + \sum_{i=1}^{m} \alpha_{i} (1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b))

其中 \alpha_{i} \ge 0

這樣上面的目標函數(原始問題)的優化就等價於:

\begin{align*}
& \min_{\boldsymbol{\omega}, b} \max\limits_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) \\
& s.t. \quad \alpha_{i} \ge 0, \quad i=1,2,\cdots,m
\end{align*}

爲何可以等價呢?當原始問題的約束條件不知足時,即 1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) > 0 ,咱們令 \alpha_{i} = +\infty,使得 \alpha_{i} (1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) = +\infty ,這時 \min\limits_{\boldsymbol{\omega}, b} \max\limits_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) 無解;當原始問題的約束條件知足時,即 1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \le 0, 因爲 \alpha_{i} \ge 0,則 \alpha_{i} (1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \le 0 ,這時 \min\limits_{\boldsymbol{\omega}, b} \max\limits_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) = \min\limits_{\boldsymbol{\omega}, b} \frac{1}{2} \Vert \boldsymbol{\omega} \Vert ^{2}

進一步,咱們能夠獲得原始問題的對偶問題:

\begin{align*}
& \max\limits_{\boldsymbol{\alpha}} \min_{\boldsymbol{\omega}, b} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) \\
& s.t. \quad \alpha_{i} \ge 0, \quad i=1,2,\cdots,m
\end{align*}

默認狀況下,對偶問題的最優解是原始問題的最優解的下界,即:

\max\limits_{\boldsymbol{\alpha}} \min_{\boldsymbol{\omega}, b} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) \le \min\limits_{\boldsymbol{\omega}, b} \max_{\boldsymbol{\alpha}} L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})

這個性質叫作弱對偶性(weak duality),對於全部優化問題都成立,即便原始問題非凸。與弱對偶性相對應的有一個強對偶性(strong duality) ,若是知足強對偶性,對偶問題的最優解與原始問題的最優解相同。也就是說,在強對偶性成立的前提下,能夠經過求解對偶問題的解來獲得原始問題的解。

那麼什麼條件下知足強對偶性呢?一種狀況是若是知足 Slater 條件,對偶問題等價於原始問題。Slater 條件是說若是原始問題是凸優化問題, 且可行域中至少有一 點使不等式約束嚴格成立(不等式約束嚴格成立是說要將不等式嚴格到不能取等號,在這裏就是隻能取小於號)。因爲原始問題中 \frac{1}{2} \Vert \boldsymbol{\omega} \Vert^{2} 爲凸函數,而且存在一些樣本點使得 1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) < 0 ,因此知足強對偶性。須要說明的是,Slater 條件成立只是知足強對偶性的一種狀況,並不是是惟一的狀況。

在強對偶性知足的狀況下,會有如下性質(KKT條件):

\begin{align*}
& 1. \quad 主問題可行:1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) \le 0 \\
& 2. \quad 對偶問題可行:\alpha_{i} \ge 0 \\
& 3. \quad 互補鬆弛:\alpha_{i} (1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b)) = 0
\end{align*} \\

因爲對偶問題公式中的內層對 \boldsymbol{\omega}b 的優化屬於無約束優化問題,因此能夠經過令偏導等於 0 來求出 \boldsymbol{\omega}b 的最優值。

\frac{\partial L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})}{\partial \boldsymbol{\omega}} = 0 \Rightarrow \boldsymbol{\omega} = \sum_{i=1}^{m} \alpha_{i}y^{(i)}\boldsymbol{x}^{(i)} \\
\frac{\partial L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})}{\partial b} = 0 \Rightarrow \sum_{i=1}^{m} \alpha_{i}y^{(i)} = 0

這樣,將上面的兩個式子帶入到 L(\boldsymbol{\omega}, b, \boldsymbol{\alpha})

L(\boldsymbol{\omega}, b, \boldsymbol{\alpha}) = \sum_{i=1}^{m} \alpha_{i} - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \alpha_{i}\alpha_{j}y^{(i)}y^{(j)}(\boldsymbol{x}^{(i)})^{T}\boldsymbol{x}^{(j)}

對偶問題最後能夠轉爲:

\begin{alignat}{2}
    \max_{\boldsymbol{\alpha}} \quad & \sum_{i=1}^{m} \alpha_{i} - \frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \alpha_{i}\alpha_{j}y^{(i)}y^{(j)}(\boldsymbol{x}^{(i)})^{T}\boldsymbol{x}^{(j)} &  \\
    \mathrm{s.t.} \quad & \sum_{i=1}^{m} \alpha_{i}y^{(i)} = 0, 
        \nonumber \\ & \alpha_{i} \ge 0, &\quad i = 1, 2, \ldots, m \,.  \nonumber
\end{alignat}

求解出 \boldsymbol{\alpha} 以後,便可求出最優的 \boldsymbol{\omega}b 便可獲得線性支持向量機的表達形式:

\begin{align*}
f_{\boldsymbol{\omega},b}(\boldsymbol{x}) 
&= \boldsymbol{\omega}^{T} \boldsymbol{x} + b \\
&= \sum_{i=1}^{m} \alpha_{i}y^{(i)}(\boldsymbol{x}^{(i)})^{T} \boldsymbol{x} + b
\end{align*}

那如何求解最優的 b 呢?咱們能夠根據距離超平面最近的正樣本的函數間隔等於距離超平面最近的負樣本的函數間隔來求出截距 b

b^{\ast} = - \frac{\max_{i:y^{(i)}=-1} {w^{\ast}}^T x^{(i)} + \min_{i:y^{(i)}=1} {w^{\ast}}^T x^{(i)}} {2}

根據上面的兩個式子以及 KKT 中的互補鬆弛條件可知,若是 \alpha_{i} = 0,則該樣本不會對 f_{\boldsymbol{\omega},b}(\boldsymbol{x}) 有任何影響;若是 \alpha_{i} > 0,那麼 1 - y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) = 0,即 y^{(i)}(\boldsymbol{\omega}^T \boldsymbol{x}^{(i)} + b) = 1也就是說線性支持向量機中, \alpha_{i} > 0 的樣本是支持向量,這些支持向量都落在了最大間隔邊界上。

從前面能夠看到,只要從對偶問題中求解出 \boldsymbol{\alpha} ,就可以求出咱們須要的超平面,關於 \boldsymbol{\alpha} 的求解能夠有不少種算法,針對該問題有一種高效求解的算法:序列最小優化算法(Sequential minimal optimization, SMO)。關於該算法的細節,有興趣的同窗能夠本身學習下。

參考:

  1. 周志華.機器學習.第六章(支持向量機)
  2. 深刻淺出ML之Kernel-Based家族
  3. 從零推導支持向量機(SVM)
  4. 支持向量機通俗導論(理解SVM的三層境界)
  5. 拉格朗日對偶性
相關文章
相關標籤/搜索