讓支持向量機教你談戀愛

引子

所謂傳統機器學習,在一部分情況下——特別是早些年——是在解決“用平面將兩類點分開”的問題。我們之所以要解決這種問題,是因爲它對應了現實生活中的某種問題。

比方說,如果我想找到自己的另一半,那麼首先我需要學會在心裏描述一個人。例如“ta是一個女性、喜歡音樂”這就是對一個人的描述,“女性”和“喜歡音樂”就是這個人的屬性。如果有需要的話,我甚至可以將人抽象爲一個數據點 $x = (x_1, x_2) $ ,其中 x1=1x_1 = -1 表示這個人是男人, x1=1x_1 = 1 表示這個人是一個女人。 x2=1x_2 = -1 表示這個人不喜歡音樂, x2=1x_2 = 1 表示這個人喜歡音樂。

這樣,地球上的14億人可以被抽象成具有平面直角座標系的二維空間上的數據點。

作爲一個歸納能力比較強的人,我很清楚自己喜歡第一象限的數據點。但有些人的歸納能力不那麼強,他只知道自己喜歡哪些點,不喜歡哪些點,不知道自己喜歡的點都聚集在空間中的什麼位置(特別是當數據點不只有兩個屬性的時候)。這時候他就需要一條直線將他喜歡的點和不喜歡的點分開,然後在這條直線的某一側尋找自己的另一半。當然,如果這個人能夠將人抽象成具有n個屬性的數據點時,他需要的就是一個多維平面了。這正是當前的AI擅長做的事。

這樣看來,我能否通過這種扭曲的方法找到自己的另一半,一方面取決於數據點的表達能力,即是否有足夠多且質量高的屬性來描述一個人;另一方面取決於能否在空間中找到那個神奇的多維平面。

背景

我們先看看能否在空間中找到那個神奇的多維平面。

假設多維空間中存在兩類點,不同類別的兩點間距離較遠,而相同類別的兩點間距離較近。並假設一定可以找到至少一個多維平面,使得一類點在這個平面的一側,而另一類點在這個平面的另一側。

當這樣的假設成立時,通常可以找到許多能夠將兩類點分開的平面。現在我們想從這些平面中找到最特殊的一個,這個平面既能將兩類點分開,又保證離它們遠遠的。例如,在二維空間中,若兩個類別各僅有一個點時,連接兩點的線段的平分線就是這樣一個特殊的“平面”,既能將兩點分開,又離它們儘可能的遠。

這樣的性質有一個好處,那就是一旦某個類別出現了新的點,由於那個特殊的平面距離這類點足夠的遠,在較大的可能性之下,新出現的點並不會破壞那個特殊平面的性質(能將兩類點分開,並且離它們儘可能的遠)。

描述

爲了找到那個特殊的平面,我們先要明確描述多維平面的方法。

在二維空間內,我們可以用一個方程來描述直線:

ax+by+c=0ax + by + c = 0

在三維空間內,我們也可以用一個方程來描述平面:

ax+by+cz+d=0ax + by + cz + d = 0

同樣的,在多維空間,或者說在n維空間內,我們同樣可以用一個方程來描述平面(多維平面有時被稱爲超平面):

w1x1+w2x2++wnxn+b=0w_1x_1 + w_2x_2 + \cdots + w_nx_n + b = 0

我們都知道,借用向量可以使多維變量的描述變得更加緊湊。比方說我們可以用行向量 wT=(w1w2wn)w^T = (\begin{matrix}w_1&w_2&\dots&w_n\end{matrix}) 表示 w1,w2,,wnw_1, w_2, \dots, w_n 這n個變量,還可以用列向量 x=(x1x2xn)Tx = (\begin{matrix}x_1&x_2&\dots&x_n\end{matrix})^T 表示 x1,x2,,xnx_1, x_2, \dots, x_n 這n個變量。這樣,用向量乘法就能將上述平面方程表示爲

wTx+b=0w^Tx + b = 0

除了描述這個平面的方程,我們還要描述平面的性質。

第一個性質是:平面能將兩類點分開

那麼,首先要明確點該如何表示。n維空間中的點有n個座標,n維向量正好有n個分量。因此我們可以利用這點,將每個點表示爲一個向量。假設n維空間中有m個點,那麼我們可以令他們對應的向量分別爲(向量右上角的數字i表示這是第i個點)

x(1),x(2),,x(m)x(i)=(x1(i)x2(i)xn(i))Tx^{(1)}, x^{(2)}, \dots, x^{(m)},其中 x^{(i)} = (\begin{matrix}x_1^{(i)}&x_2^{(i)}&\dots&x_n^{(i)}\end{matrix})^T

其次要明確點的類別該如何表示。類別是離散的概念,因此可以用一個整數來描述,那麼我們將m個點的類別記爲

y(1),y(2),,y(m)y^{(1)}, y^{(2)}, \dots, y^{(m)}

不妨令 y(i)=1y^{(i)} = 1 表示第i個點屬於第一類,令 y(i)=1y^{(i)} = -1 表示第i個點屬於第二類。

然後,要知道我們可以用平面 wTx+b=0w^Tx + b = 0把整個空間劃分爲的三個部分:

  • 所有滿足 wTx+b>0w^Tx + b > 0 的點x在平面的一側,構成空間的第一個部分
  • 所有滿足 wTx+b<0w^Tx + b < 0 的點x在平面的另一側,構成空間的第二個部分
  • 所有滿足 wTx+b=0w^Tx + b = 0 的點x在平面上,構成空間的第三個部分

也就是說滿足“能將兩類點分開”性質的平面是能夠讓兩類點分屬於空間的第一、二個部分的平面(當然,反過來讓它們分屬於空間的第二、一個部分也行,這裏這麼做只是爲了方便後面的運算罷了)。

最後,根據上述描述和約定,我們可以說滿足“能將兩類點分開”性質的平面是滿足以下數學性質的平面:

平面 wTx+b=0w^Tx + b = 0y(i)=1y^{(i)} = 1 的點 x(i)x^{(i)} 滿足 wTx(i)+b>0w^Tx^{(i)} + b > 0 ,令 y(i)=1y^{(i)} = -1 的點 x(i)x^{(i)} 滿足 wTx(i)+b<0w^Tx^{(i)} + b < 0

利用一個小小的數學技巧甚至能將這個數學性質描述得更加緊湊:

平面 wTx+b=0w^Tx + b = 0y(i)=±1y^{(i)} = \pm 1 的點 x(i)x^{(i)} 滿足 y(i)(wTx(i)+b)>0y^{(i)}(w^Tx^{(i)} + b) > 0

y(i)y^{(i)} 的值分類討論可明確上述兩個性質是等價的。

第二個性質是:平面離這兩類點儘可能的遠

首先,我們要定義什麼是“遠”。“遠”是一種對於距離的描述,在多維空間中有很多種定義距離的方式(例如曼哈頓距離、歐幾里得距離、切比雪夫距離等),這裏不妨用最常用的歐幾里得距離。對於單個點來說,我們有點 x(i)x^{(i)} 到平面 wTx+b=0w^Tx+b=0 的歐幾里得距離的公式(分母 w\|w\| 表示向量w的長度,長度也是根據歐幾里得距離定義的):

d(w,b,x(i))=wTx(i)+bwd(w, b, x^{(i)}) = \frac{|w^Tx^{(i)}+b|}{\|w\|}

前面已經說過,在二維空間中,直線方程是 ax + by + c = 0,那麼點到平面距離公式在二維空間下就變成了點到直線距離公式:

d(a,b,c,x,y)=ax+by+ca2+b2d(a, b, c, x, y) = \frac{|ax+by+c|}{\sqrt{a^2+b^2}}

這個初中學過的式子也許會讓人感到更熟悉些。

其次,我們要定義什麼是平面到兩類點的距離。也就是平面到一個點集的距離。想象一下,你正站在兩軍對壘的前線,面前有千軍萬馬向你殺來。你會如何向將軍報告你相對於一整支軍隊的距離?一種最有意義的方式是,計算敵軍衝在最前面的人和你的距離。我們就用這個概念來定義平面到點集的距離。也就是說,我們會把離平面最近的點到平面的距離當作平面到點集的距離:

D(w,b)=minid(w,b,x(i))=miniwTx(i)+bwD(w, b) = \min\limits_i d(w, b, x^{(i)}) = \min\limits_i\frac{|w^Tx^{(i)}+b|}{\|w\|}

最後,“平面離這兩類點儘可能的遠”就可以用數學語言描述爲“D(w, b)儘可能的大”了。

優化

現在,已經明確了那個特殊平面的性質。但是別忘了,我們的目標是找到那個平面,也就是找到那個平面方程的參數w和b。在數學中,在給定限制下選擇恰當的參數,使得某個值儘可能的大,這正是最優化問題的範式。

在我們正在解決的問題中,上述第一個性質正是一系列限制條件:

i, y(i)(wTx(i)+b)>0\forall i,\ y^{(i)}(w^Tx^{(i)} + b) > 0

上述第二個性質正是優化目標:

maxw,bD(w,b)\max\limits_{w, b} D(w,b)

綜上所述,我們要解決的實際上是一個最優化問題:

maxw,bminiwTx(i)+bw\max\limits_{w, b} \min\limits_i\frac{|w^Tx^{(i)}+b|}{\|w\|}

s.t. i[1,m], y(i)(wTx(i)+b)>0s.t.\ \forall i\in[1,m],\ y^{(i)}(w^Tx^{(i)} + b) > 0

(數學語言中常見的“s.t.”是subject to的縮寫,其後列出的是限制條件)

求解

接下來,我們將一步步化簡上面提出的最優化問題,將其化簡成好用計算機處理的形式。

首先要知道,雖然我們要找的直線是唯一的,但其對應的w, b卻不是唯一的。

假設在二維空間中,我們要找的直線是 2x1+x2+1=02x_1 + x_2 + 1 = 0 。將w, b乘2後不難發現,4x1+2x2+2=04x_1 + 2x_2 + 2 = 0 仍然是那條直線的方程。怎麼辦呢?這其實都是w, b太自由所致。既然它們太自由,就要限制它們。對於變量而言,用等式限制它們即可。比方說上面那條直線,如果我們強行限制 w1+w2+b=4w_1 + w_2 + b = 4 的話,就只有 2x1+x2+1=02x_1 + x_2 + 1 = 0 這個方程是合法的方程了。

既然明確了這點,接下來就應該爲w, b設置一個約束條件。比方說以參數爲變量的線性方程式就是不錯的選擇,例如剛纔提到的 w1+w2+b=4w_1 + w_2 + b = 4 ,就是這種形式。既然如此,不如找一個現成的點 x(i)x^{(i)} 的座標來當這種線性方程的係數吧。但是我們有 x(1),x(2),,x(m)x^{(1)}, x^{(2)}, \dots, x^{(m)} 這麼多點,選哪個比較好呢?不如就選擇一個 y(i)(wTx(i)+b)y^{(i)}(w^Tx^{(i)}+b) 這個值最小的點吧,我們用下面這個等式來限制w, b:

mini(y(i)(wTx(i)+b))=2\min\limits_i(y^{(i)}(w^Tx^{(i)}+b)) = 2

爲什麼要用這個點呢?爲什麼要令等式右邊的常數爲2呢?讓我們暫且寄下疑惑,看看增加了這個限制條件後,最優化問題會變成什麼樣。由於有了這個限制,miniwTx(i)+bw=miniy(i)(wTx(i)+b)w=2w\min\limits_i\frac{|w^Tx^{(i)}+b|}{\|w\|} = \min\limits_i\frac{|y^{(i)}(w^Tx^{(i)}+b)|}{\|w\|} = \frac{2}{\|w\|} 成立。再通過取倒數將最外層的max化爲min,原來的優化目標就變成了:

minw12wTw\min\limits_{w} \frac{1}{2}w^Tw

在這個新限制條件下,原先的限制條件 i, y(i)(wTx(i)+b)>0\forall i,\ y^{(i)}(w^Tx^{(i)} + b) > 0 也就是多餘的了。因爲“數集的最小值等於2”顯然比“數集中所有值大於0”還要更苛刻些。但是爲了之後的計算方便,仿照原先限制條件的形式,我們將 mini(y(i)(wTx(i)+b))=2\min\limits_i(y^{(i)}(w^Tx^{(i)}+b)) = 2 改寫成:

i[1,m], y(i)(wTx(i)+b)2\forall i\in[1,m],\ y^{(i)}(w^Tx^{(i)} + b) \ge 2

這樣,我們就得到了一個新的最優化問題:

minw12wTw\min\limits_{w} \frac{1}{2}w^Tw

s.t. i[1,m], y(i)(wTx(i)+b)2s.t.\ \forall i\in[1,m],\ y^{(i)}(w^Tx^{(i)} + b) \ge 2

現在,來澄清一下爲什麼使用 mini(y(i)(wTx(i)+b))=2\min\limits_i(y^{(i)}(w^Tx^{(i)}+b)) = 2 這個限制條件。

y(i)(wTx(i)+b)y^{(i)}(w^Tx^{(i)}+b) 由兩個因子構成, (wTx(i)+b)(w^Tx^{(i)}+b) 的作用是,限制w, b的同時將 wTx(i)+bw\frac{|w^Tx^{(i)}+b|}{\|w\|} 的分子簡化,並將內層的min符號給脫掉。 y(i)y^{(i)} 的作用是將新限制條件構造成同舊限制條件一樣的形式。等號右側的2的作用在之後會說明。

總之這樣以來,不僅使問題僅有唯一解,還讓式子得到了簡化。更重要的是,我們成功將這個問題構造成了一個具有成熟解決方案的“二次優化”問題(梯度下降解決不了帶約束的優化問題)。這樣以來,我們只需在計算機上調用現成的二次優化工具就能解得w, b了。

如何調用呢?先讓我們看一下二次優化的標準形式(新限制條件等號右側的2的作用是爲了構造二次優化的標準形式):

minu12uTQu+pTu\min\limits_u \frac{1}{2}u^TQu+p^Tu

s.t. i[1,m], a(i)Tuc(i)s.t.\ \forall i\in[1,m],\ a^{(i)T}u \ge c^{(i)}

將行向量 a(i)Ta^{(i)T} 縱向排列可以得到一個矩陣A,將實數 c(i)c^{(i)} 縱向排列可以得到一個列向量c,二次優化工具通常會提供一個函數u <- QP(Q, p, A, c),只要將矩陣Q, A,向量p, c當作參數傳入這個函數,就能解出對應的u。

下面給出將我們的最優化問題構造成二次規劃問題的方法:

二次規劃的參數 在本問題中對應的量 維度
u (bw1w2wn)T(\begin{matrix}b&w_1&w_2&\dots&w_n\end{matrix})^T (n+1)×1(n+1)\times1
Q (0000010000100001)\left(\begin{matrix}0&0&0&\dots&0\\0&1&0&\dots&0\\0&0&1&\dots&0\\\vdots&\vdots&\vdots&\ddots&\vdots\\0&0&0&\dots&1\end{matrix}\right) (n+1)×(n+1)(n+1)\times(n+1)
p (00)T(\begin{matrix}0&\dots&0\end{matrix})^T (n+1)×1(n+1)\times1
A (y(1)y(1)x1(1)y(1)xn(1)y(m)y(m)x1(m)y(m)xn(m))\left(\begin{matrix}y^{(1)}&y^{(1)}x^{(1)}_1&\dots&y^{(1)}x^{(1)}_n\\\vdots&\vdots&\ddots&\vdots\\y^{(m)}&y^{(m)}x^{(m)}_1&\dots&y^{(m)}x^{(m)}_n\end{matrix}\right) m×(n+1)m\times(n+1)
c (22)T(\begin{matrix}2&\dots&2\end{matrix})^T m×1m\times1

變換

之前我們討論瞭如何在空間中找到那個神奇的多維平面。接下來討論是否有足夠多且質量高的屬性來描述一個人,如果有的話,在屬性非常非常多的情況下,又如何能夠高效地找到那個神奇的多維平面。

(未完待續……)

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