引子
所謂傳統機器學習,在一部分情況下——特別是早些年——是在解決“用平面將兩類點分開”的問題。我們之所以要解決這種問題,是因爲它對應了現實生活中的某種問題。
比方說,如果我想找到自己的另一半,那麼首先我需要學會在心裏描述一個人。例如“ta是一個女性、喜歡音樂”這就是對一個人的描述,“女性”和“喜歡音樂”就是這個人的屬性。如果有需要的話,我甚至可以將人抽象爲一個數據點 $x = (x_1, x_2) $ ,其中 x1=−1 表示這個人是男人, x1=1 表示這個人是一個女人。 x2=−1 表示這個人不喜歡音樂, x2=1 表示這個人喜歡音樂。
這樣,地球上的14億人可以被抽象成具有平面直角座標系的二維空間上的數據點。
作爲一個歸納能力比較強的人,我很清楚自己喜歡第一象限的數據點。但有些人的歸納能力不那麼強,他只知道自己喜歡哪些點,不喜歡哪些點,不知道自己喜歡的點都聚集在空間中的什麼位置(特別是當數據點不只有兩個屬性的時候)。這時候他就需要一條直線將他喜歡的點和不喜歡的點分開,然後在這條直線的某一側尋找自己的另一半。當然,如果這個人能夠將人抽象成具有n個屬性的數據點時,他需要的就是一個多維平面了。這正是當前的AI擅長做的事。
這樣看來,我能否通過這種扭曲的方法找到自己的另一半,一方面取決於數據點的表達能力,即是否有足夠多且質量高的屬性來描述一個人;另一方面取決於能否在空間中找到那個神奇的多維平面。
背景
我們先看看能否在空間中找到那個神奇的多維平面。
假設多維空間中存在兩類點,不同類別的兩點間距離較遠,而相同類別的兩點間距離較近。並假設一定可以找到至少一個多維平面,使得一類點在這個平面的一側,而另一類點在這個平面的另一側。
當這樣的假設成立時,通常可以找到許多能夠將兩類點分開的平面。現在我們想從這些平面中找到最特殊的一個,這個平面既能將兩類點分開,又保證離它們遠遠的。例如,在二維空間中,若兩個類別各僅有一個點時,連接兩點的線段的平分線就是這樣一個特殊的“平面”,既能將兩點分開,又離它們儘可能的遠。
這樣的性質有一個好處,那就是一旦某個類別出現了新的點,由於那個特殊的平面距離這類點足夠的遠,在較大的可能性之下,新出現的點並不會破壞那個特殊平面的性質(能將兩類點分開,並且離它們儘可能的遠)。
描述
爲了找到那個特殊的平面,我們先要明確描述多維平面的方法。
在二維空間內,我們可以用一個方程來描述直線:
ax+by+c=0
在三維空間內,我們也可以用一個方程來描述平面:
ax+by+cz+d=0
同樣的,在多維空間,或者說在n維空間內,我們同樣可以用一個方程來描述平面(多維平面有時被稱爲超平面):
w1x1+w2x2+⋯+wnxn+b=0
我們都知道,借用向量可以使多維變量的描述變得更加緊湊。比方說我們可以用行向量 wT=(w1w2…wn) 表示 w1,w2,…,wn 這n個變量,還可以用列向量 x=(x1x2…xn)T 表示 x1,x2,…,xn 這n個變量。這樣,用向量乘法就能將上述平面方程表示爲
wTx+b=0
除了描述這個平面的方程,我們還要描述平面的性質。
第一個性質是:平面能將兩類點分開
那麼,首先要明確點該如何表示。n維空間中的點有n個座標,n維向量正好有n個分量。因此我們可以利用這點,將每個點表示爲一個向量。假設n維空間中有m個點,那麼我們可以令他們對應的向量分別爲(向量右上角的數字i表示這是第i個點)
x(1),x(2),…,x(m),其中x(i)=(x1(i)x2(i)…xn(i))T
其次要明確點的類別該如何表示。類別是離散的概念,因此可以用一個整數來描述,那麼我們將m個點的類別記爲
y(1),y(2),…,y(m)
不妨令 y(i)=1 表示第i個點屬於第一類,令 y(i)=−1 表示第i個點屬於第二類。
然後,要知道我們可以用平面 wTx+b=0把整個空間劃分爲的三個部分:
- 所有滿足 wTx+b>0 的點x在平面的一側,構成空間的第一個部分
- 所有滿足 wTx+b<0 的點x在平面的另一側,構成空間的第二個部分
- 所有滿足 wTx+b=0 的點x在平面上,構成空間的第三個部分
也就是說滿足“能將兩類點分開”性質的平面是能夠讓兩類點分屬於空間的第一、二個部分的平面(當然,反過來讓它們分屬於空間的第二、一個部分也行,這裏這麼做只是爲了方便後面的運算罷了)。
最後,根據上述描述和約定,我們可以說滿足“能將兩類點分開”性質的平面是滿足以下數學性質的平面:
平面 wTx+b=0 令 y(i)=1 的點 x(i) 滿足 wTx(i)+b>0 ,令 y(i)=−1 的點 x(i) 滿足 wTx(i)+b<0
利用一個小小的數學技巧甚至能將這個數學性質描述得更加緊湊:
平面 wTx+b=0 令 y(i)=±1 的點 x(i) 滿足 y(i)(wTx(i)+b)>0
對 y(i) 的值分類討論可明確上述兩個性質是等價的。
第二個性質是:平面離這兩類點儘可能的遠
首先,我們要定義什麼是“遠”。“遠”是一種對於距離的描述,在多維空間中有很多種定義距離的方式(例如曼哈頓距離、歐幾里得距離、切比雪夫距離等),這裏不妨用最常用的歐幾里得距離。對於單個點來說,我們有點 x(i) 到平面 wTx+b=0 的歐幾里得距離的公式(分母 ∥w∥ 表示向量w的長度,長度也是根據歐幾里得距離定義的):
d(w,b,x(i))=∥w∥∣wTx(i)+b∣
前面已經說過,在二維空間中,直線方程是 ax + by + c = 0,那麼點到平面距離公式在二維空間下就變成了點到直線距離公式:
d(a,b,c,x,y)=a2+b2∣ax+by+c∣
這個初中學過的式子也許會讓人感到更熟悉些。
其次,我們要定義什麼是平面到兩類點的距離。也就是平面到一個點集的距離。想象一下,你正站在兩軍對壘的前線,面前有千軍萬馬向你殺來。你會如何向將軍報告你相對於一整支軍隊的距離?一種最有意義的方式是,計算敵軍衝在最前面的人和你的距離。我們就用這個概念來定義平面到點集的距離。也就是說,我們會把離平面最近的點到平面的距離當作平面到點集的距離:
D(w,b)=imind(w,b,x(i))=imin∥w∥∣wTx(i)+b∣
最後,“平面離這兩類點儘可能的遠”就可以用數學語言描述爲“D(w, b)儘可能的大”了。
優化
現在,已經明確了那個特殊平面的性質。但是別忘了,我們的目標是找到那個平面,也就是找到那個平面方程的參數w和b。在數學中,在給定限制下選擇恰當的參數,使得某個值儘可能的大,這正是最優化問題的範式。
在我們正在解決的問題中,上述第一個性質正是一系列限制條件:
∀i, y(i)(wTx(i)+b)>0
上述第二個性質正是優化目標:
w,bmaxD(w,b)
綜上所述,我們要解決的實際上是一個最優化問題:
w,bmaximin∥w∥∣wTx(i)+b∣
s.t. ∀i∈[1,m], y(i)(wTx(i)+b)>0
(數學語言中常見的“s.t.”是subject to的縮寫,其後列出的是限制條件)
求解
接下來,我們將一步步化簡上面提出的最優化問題,將其化簡成好用計算機處理的形式。
首先要知道,雖然我們要找的直線是唯一的,但其對應的w, b卻不是唯一的。
假設在二維空間中,我們要找的直線是 2x1+x2+1=0 。將w, b乘2後不難發現,4x1+2x2+2=0 仍然是那條直線的方程。怎麼辦呢?這其實都是w, b太自由所致。既然它們太自由,就要限制它們。對於變量而言,用等式限制它們即可。比方說上面那條直線,如果我們強行限制 w1+w2+b=4 的話,就只有 2x1+x2+1=0 這個方程是合法的方程了。
既然明確了這點,接下來就應該爲w, b設置一個約束條件。比方說以參數爲變量的線性方程式就是不錯的選擇,例如剛纔提到的 w1+w2+b=4 ,就是這種形式。既然如此,不如找一個現成的點 x(i) 的座標來當這種線性方程的係數吧。但是我們有 x(1),x(2),…,x(m) 這麼多點,選哪個比較好呢?不如就選擇一個 y(i)(wTx(i)+b) 這個值最小的點吧,我們用下面這個等式來限制w, b:
imin(y(i)(wTx(i)+b))=2
爲什麼要用這個點呢?爲什麼要令等式右邊的常數爲2呢?讓我們暫且寄下疑惑,看看增加了這個限制條件後,最優化問題會變成什麼樣。由於有了這個限制,imin∥w∥∣wTx(i)+b∣=imin∥w∥∣y(i)(wTx(i)+b)∣=∥w∥2 成立。再通過取倒數將最外層的max化爲min,原來的優化目標就變成了:
wmin21wTw
在這個新限制條件下,原先的限制條件 ∀i, y(i)(wTx(i)+b)>0 也就是多餘的了。因爲“數集的最小值等於2”顯然比“數集中所有值大於0”還要更苛刻些。但是爲了之後的計算方便,仿照原先限制條件的形式,我們將 imin(y(i)(wTx(i)+b))=2 改寫成:
∀i∈[1,m], y(i)(wTx(i)+b)≥2
這樣,我們就得到了一個新的最優化問題:
wmin21wTw
s.t. ∀i∈[1,m], y(i)(wTx(i)+b)≥2
現在,來澄清一下爲什麼使用 imin(y(i)(wTx(i)+b))=2 這個限制條件。
y(i)(wTx(i)+b) 由兩個因子構成, (wTx(i)+b) 的作用是,限制w, b的同時將 ∥w∥∣wTx(i)+b∣ 的分子簡化,並將內層的min符號給脫掉。 y(i) 的作用是將新限制條件構造成同舊限制條件一樣的形式。等號右側的2的作用在之後會說明。
總之這樣以來,不僅使問題僅有唯一解,還讓式子得到了簡化。更重要的是,我們成功將這個問題構造成了一個具有成熟解決方案的“二次優化”問題(梯度下降解決不了帶約束的優化問題)。這樣以來,我們只需在計算機上調用現成的二次優化工具就能解得w, b了。
如何調用呢?先讓我們看一下二次優化的標準形式(新限制條件等號右側的2的作用是爲了構造二次優化的標準形式):
umin21uTQu+pTu
s.t. ∀i∈[1,m], a(i)Tu≥c(i)
將行向量 a(i)T 縱向排列可以得到一個矩陣A,將實數 c(i) 縱向排列可以得到一個列向量c,二次優化工具通常會提供一個函數u <- QP(Q, p, A, c),只要將矩陣Q, A,向量p, c當作參數傳入這個函數,就能解出對應的u。
下面給出將我們的最優化問題構造成二次規劃問題的方法:
二次規劃的參數 |
在本問題中對應的量 |
維度 |
u |
(bw1w2…wn)T |
(n+1)×1 |
Q |
⎝⎜⎜⎜⎜⎜⎛000⋮0010⋮0001⋮0………⋱…000⋮1⎠⎟⎟⎟⎟⎟⎞ |
(n+1)×(n+1) |
p |
(0…0)T |
(n+1)×1 |
A |
⎝⎜⎜⎛y(1)⋮y(m)y(1)x1(1)⋮y(m)x1(m)…⋱…y(1)xn(1)⋮y(m)xn(m)⎠⎟⎟⎞ |
m×(n+1) |
c |
(2…2)T |
m×1 |
變換
之前我們討論瞭如何在空間中找到那個神奇的多維平面。接下來討論是否有足夠多且質量高的屬性來描述一個人,如果有的話,在屬性非常非常多的情況下,又如何能夠高效地找到那個神奇的多維平面。
(未完待續……)