[白話解析] 深入淺出支援向量機(SVM)之核函式

0x00 摘要

本文在少用數學公式的情況下,儘量僅依靠感性直覺的思考來講解支援向量機中的核函式概念,並且給大家虛構了一個水滸傳的例子來做進一步的通俗解釋。

0x01 問題

在學習核函式的時候,我一直有幾個很好奇的問題。

  1. Why 為什麼線性可分很重要?

  2. Why 為什麼低維資料升級到高維資料之後,就可以把低維度資料線性可分?

  3. What 什麼是核函式,其作用是什麼?

  4. How 如何能夠找到核函式?

不知道大家是否和我一樣有這些疑問,在後文中, 我將通過逐步的學習梳理為大家講解這些問題。

0x02 相關概念 & 梳理過程

1. 線性分類的意義

分類器:分類器就是給定一個樣本的資料,判定這個樣本屬於哪個類別的演算法。

特徵:在分類問題中,輸入到分類器中的資料叫做特徵。

線性分類器:線性分類器是分類器中的一種,就是判定分類結果的根據是通過特徵的線性組合得到的,不能通過特徵的非線性運算結果作為判定根據。比如:

  • 一個點可以把一條一維直線分成兩部分。
  • 一條直線可以把二維平面分成兩部分。
  • 一個平面可以把三維空間分成兩部分。

非線性分類器:就是用非線性運算結果作為判定根據。比如二維空間,一個圓可以進行非線性分割,把空間分成內部,外部兩部分

為什麼需要線性分開呢?因為:

  • 線性分開簡單,性質很容易研究透徹;線性分開只要一條直線或一個平面之類,是曲線中最簡單形式。而非線性分開的情況太多。僅就二維空間而言,就存在曲線、折線、雙曲線、圓錐曲線、波浪線,以及毫無規律的各種其他曲線,沒法進行統一處理。
  • 線性分開推廣能力強,無需建立其他模型。非線性分類很多時候都是針對具體問題來研究具體曲線模型,無法很好的推廣。

這樣就回答了我們第一個問題: 1. Why 為什麼線性可分很重要

2. Cover定理

回憶我們的問題 2. Why:為什麼低維資料升級到高維資料之後,就可以把低維度資料線性可分?

在提升維度後,原本非線性的資料點變得線性可分,這在數學上是有嚴格證明的,即Cover定理。我們這裡就把Cover定理當公理用。

Cover定理可以定性地描述為:將複雜的模式分類問題非線性地投射到高維空間將比投射到低維空間更可能是線性可分的,當空間的維數D越大時,在該空間的N個數據點間的線性可分的概率就越大。

或者再通俗的說,這個定理描述的是 線性可分的概率,如果能把資料從低維空間對映到高維空間,我們就很可能在高維空間把資料做線性可分。對於在N維空間中線性不可分的資料,在N+1維以上的空間會有更大可能變成線性可分的。

所以人們就努力的尋找一種對映,這對映能將樣本從原始空間(低維資料)轉變到高維特徵空間,從而把低維空間中線性不可分的兩類點變成線性可分的。這種對映ϕ(X) 又可稱為“特徵構建”,對映後的向量可稱之為“特徵向量”。比如

向量

X = [1, x1, x2]

構建對映

ϕ(X) = ϕ( [1, x1, x2] ) = [1, x1, x2, x1^2, x2^2, x1.x2]

這樣,Cover定理就回答了我們第二個問題,我們不去具體研究它的數學論證,就把它當作公理用。

3. 向量內積的幾何意義

內積(點乘)的幾何意義包括:

  • 表徵或計算兩個向量之間的夾角
  • b向量在a向量方向上的投影

所以,內積是一種在某維空間裡面度量其資料相似度一種手段,就是在該空間內兩個向量的關係。比如兩個資料點之間的距離和角度。

分類需要內積是因為內積的正負代表了資料點是位於分類邊界的正方向還是負方向,從而實現分類。

在高維空間,我們可以用向量內積來做線性分類。

4. 高維空間計算的複雜性

對映可以看作是一種拉伸,把低維資料拉伸到了高維。雖然現在我們到了高維空間號稱線性可分,但是有幾個困難:

  • 不知道什麼樣的對映函式是完美的。
  • 難以在各種對映函式中找到一個合適的。
  • 高維空間計算量比較大。這樣就會產生維災難,計算內積是不現實的。

幸運的是,在計算中發現,我們需要的只是兩個向量在新的對映空間中的內積結果,而對映函式到底是怎麼樣的其實並不需要知道。於是這樣就引入了核函式的概念。

核函式事先在低維上計算,而將實質上的分類效果表現在了高維上,也就是

  • 包含對映,內積,相似度的邏輯。

  • 消除掉把低維向量往高維對映的過程。
  • 避免了直接在高維空間內的複雜計算。

即核函式除了能夠完成特徵對映,而且還能把特徵對映之後的內積結果直接返回。即把高維空間得內積運算轉化為低維空間的核函式計算。

注意,核函式只是將完全不可分問題,轉換為可分或達到近似可分的狀態。

5. 核函式(kernel function)定義

關於我們第三個問題 What 什麼是核函式,其作用是什麼?,現在解答如下。

核函式是這樣的一種函式:

仍然以二維空間為例,假設對於變數x和y,將其對映到新空間的對映函式為φ,則在新空間中,二者分別對應φ(x)和φ(y),他們的內積則為<φ(x),φ(y)>。

我們令函式Kernel(x,y)=<φ(x),φ(y)>=k(x,y)

可以看出,函式Kernel(x,y)是一個關於x和y的函式!而與φ無關!這是一個多麼好的性質!我們再也不用管φ具體是什麼對映關係了,只需要最後計算Kernel(x,y)就可以得到他們在高維空間中的內積。

我們則稱Κ(x,y)為核函式,φ(x)為對映函式。

下面舉出三個網上的好例子:

令 x = (x1, x2, x3, x4); y = (y1, y2, y3, y4);
令 f(x) = (x1. x1, x1.x2, x1.x3, x1.x4, x2.x1, x2.x2, x2.x3, x2.x4, x3.x1, x3.x2, x3.x3, x3.x4, x4.x1, x4.x2, x4.x3, x4.x4); f(y)亦然;
這樣就實現了四維到更高維度的轉換。

讓我們帶幾個簡單的數字進去看看是個什麼效果:

x = (1, 2, 3, 4); y = (5, 6, 7, 8). 那麼:
f(x) = ( 1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16) ;
f(y) = (25, 30, 35, 40, 30, 36, 42, 48, 35, 42, 49, 56, 40, 48, 56, 64) ;
<f(x), f(y)> = 25+60+105+160+60+144+252+384+105+252+441+672+160+384+672+1024
= 4900.

如果我們用核函式呢?
K(x, y) = (x1.y1 + x2.y2 + x3.y3 + x4.y4) ^2= (5+12+21+32)^2 = 70^2 = 4900.
所以核函式kernel其實就是幫我們省去在高維空間裡進行繁瑣計算的“簡便運演算法”。

另外一個例子

“你在你的一生中可能會經歷很多變故,可能會變成完全不同的另一個人,但是這個世界上只有一個你,我要怎樣才能把不同的“你”分開呢?最直觀的方法就是增加“時間”這個維度,雖然這個地球上只有一個你,這個你是不可分割的,但是“昨天在中國的你”和“今天在美國的你”在時間+空間這個維度卻是可以被分割的。”

最後一個例子

假設我們的任務是要預測那些微博可以上微博熱搜榜。有兩個離散特徵,一個代表某個微博裡有 “鹿晗”,一個代表某個微博裡有 “關曉彤”。

兩個特徵單獨看熱度都一般,此時我們用二階多項式核方法:
\[ K(鹿晗,關曉彤) = <鹿晗,關曉彤>^2 \]
這個核函式可以把二維空間投射到三維空間,展開之後是:
\[ K(鹿晗,關曉彤) = <鹿晗,關曉彤>^2 = (鹿晗^2, \sqrt{2} 鹿晗 . 關曉彤, 關曉彤^2) \]

這樣就把二維特徵變成了三維,多了一維 ”鹿晗 x 關曉彤 “,代表著某條微博裡鹿晗和關曉彤同時出現。

結果大家都知道了,鹿晗關曉彤同時出現的那條微博超級火,把新浪伺服器都擠爆了。

我們大致能夠得到核函式如下性質:

  • 核函式給出了任意兩個樣本之間關係的度量,比如相似度。
  • 每一個能被叫做核函式的函式,裡面都藏著一個對應拉伸的函式。這些核函式的命名通常也跟如何做拉伸變換有關係。
  • 核函式和對映本身沒有直接關係。選哪個核函式,實際上就是在選擇用哪種方法對映。通過核函式,我們就能跳過對映的過程。
  • 我們只需要核函式,而不需要那個對映,也無法顯式的寫出那個對映。
  • 選擇核函式就是把原始資料集上下左右前後拉扯揉捏,直到你一刀下去正好把所有的 0 分到一邊,所有的 1 分到另一邊。這個上下左右前後拉扯揉捏的過程就是kernel.

6. Mercer定理

核函式使得計算一對向量的核函式等價與在變換後的空間中計算這對向量的內積。

但是接下來就是我們第四個問題 How 如何能夠找到核函式?

這個就是Mercer定理能完成的。Mercer定理也是嚴格證明過的數學定理,我們也把他當公理用。

Mercer定理的大致內容是:任何半正定對稱函式都可以作為核函式。

正定性使得函式極限方向唯一且大於等於零,同時正定性產生的優化問題都是有良好凸優化性質,從而把原始空間的度量概念能移植到特徵空間(融入了角和內積)中去。

數學家在理論指導下通過各種實驗找出核函式,然後看看具體效果,如果效果好,就正式釋出確認這種核函式。有點類似由果推因。

0x03 梁山好漢如何看待核函式

能夠讓人們理解概念最好的方式就是比喻/舉例子。下面讓我們用水滸傳的故事來給大家舉例說明核函式。

話說宋江吳用兩個神棍利用石碑來忽悠梁山眾好漢,搞出了英雄排座次,具體如下:

第七十一回 忠義堂石碣受天文 梁山泊英雄排座次

宋江先說要開大會,以此來作秀。

今者一百八人皆在面前聚會,端的古往今來,實為罕有。從前 兵刃到處,殺害生靈,無可禳謝。我心中欲建一羅天大醮,報答天地神明眷佑之恩

這就是要開始玩把戲了

是夜三更時候,只聽得天上一聲響,如裂帛相似,正是西北乾方天門上。眾人 看時,直豎金盤:兩頭尖,中間闊,又喚做天門開,又喚做天眼開,裡面毫光射人 眼目,霞彩繚繞,從中間卷出一塊火來,如栲栳之形,直滾下虛皇壇來。那團火繞 壇滾了一遭,竟鑽入正南地下去了。此時天眼已合,眾道士下壇來,宋江隨即叫人 將鐵鍬鋤頭掘開泥土,根尋火塊。那地下掘不到三尺深淺,只見一個石碣,正面兩 側,各有天書文字。有詩為證: 忠義英雄迥結臺,感通上帝亦奇哉! 人間善惡皆招報,天眼何時不大開!

取出事先準備好的石碑

當下宋江且教化紙滿散。平明,齋眾道士,各贈與金帛之物,以充襯資。方才 取過石碣看時,上面乃是龍章鳳篆蝌蚪之書,人皆不識。眾道士內有一人姓何,法諱玄通,對宋江說道:“小道家間祖上留下一冊文書,專能辨驗天書,那上面自古 都是蝌蚪文字,以此貧道善能辨認,譯將出來,便知端的。”宋江聽了大喜,連忙 捧過石碣,教何道士看了,良久說道:“此石都是義士大名鐫在上面:側首一邊是 ‘替天行道’四字,一邊是‘忠義雙全’四字;頂上皆有星辰南北二斗;下面卻是 尊號。若不見責,當以從頭一一敷宣。”宋江道:“幸得高士指迷,緣分不淺,若 蒙見教,實感大德。唯恐上天見責之言,請勿藏匿,萬望盡情剖露,休遺片言。” 宋江喚過聖手書生蕭讓,用黃紙謄寫。何道士乃言:“前面有天書三十六行,皆是 天罡星;背後也有天書七十二行,皆是地煞星,下面注著眾義士的姓名。”觀看良 久,教蕭讓從頭至後,盡數抄謄。

於是宋江假借上天來做了權利分配

宋江 與眾頭領道:“鄙猥小吏,原來上應星魁,眾多弟兄也原來都是一會之人。上天顯 應,合當聚義。今已數足,上蒼分定位數,為大小二等。天罡、地煞星辰,都已分 定次序,眾頭領各守其位,各休爭執,不可逆了天言。”眾人皆道:“天地之意, 物理數定,誰敢違拗?”

眾好漢中,有明白人就假裝信了,有糊塗人就信以為真。但是有死心眼的比如 沒面目焦挺想不通,就去找 打虎將李忠問問究竟。

焦挺:“李忠哥哥,小弟一事不明。我這身手你也知道,李逵那樣的我一個人能打兩個。可是為啥他就是 天殺星黑旋風李逵?我就是地惡星沒面目焦挺,到底是根據啥計算出這個座次的?“。

李忠心中暗道,你個棒槌,表面上還得微笑道:

“兄弟。這個公明哥哥用的是特徵對映啊。就是把每個人的資訊對映到天上去,讓上蒼安排具體座次。你在地下是三維空間,天上可是N維空間呀。比如你在地上吧,你的低維資訊就是:名稱,籍貫,身手,出身等等。對映到上蒼,那就是高維資訊,比如:星宿具體排列順序,星宿的形狀,和黃道的位置,和太陰星的位置,加上四象八卦六壬等“,最後綜合考慮得出了你的排名。

焦挺一瞪眼睛:"那麼多高維資訊,我咋計算。能不能說人話,不然我認得哥哥,我手裡的杆棒認不得哥哥"。

李忠忙陪笑到:

”兄弟,這個對映和高維計算問題太麻煩,我們在三維空間內可以用核函式直接來計算出結果,就不用對映和高維計算了。這個核函式考慮的就是:

第一條依據:根據名望來排,比如世系身份的高低/入夥梁山之前的身份高低。
第二條依據:公明哥哥的嫡系力量,公明哥哥根據個人的喜歡程度,以及與公明哥哥的親疏程度。
第三條依據:武藝高低。

現在你明白了嘛?“

焦挺恍然大悟:"李忠哥哥你是老江湖啊,來,咱倆吃酒去......"

0x04 參考

核函式K(kernel function)

機器學習-白話SVM原理

專家坐堂:機器學習中對核函式的理解

機器學習有很多關於核函式的說法,核函式的定義和作用是什麼?

對SVM的個人理解---淺顯易懂

SVM從初始到應用

【ML系列】“非線性”二元分類

支援向量機(三)核函式

支援向量機通俗導論(理解SVM的三層境界)

支援向量機: Ker