本文探討的不是關(guān)于深度學(xué)習(xí)方面的,但可能也會(huì)涉及一點(diǎn)兒,主要是因?yàn)?Kernel(內(nèi)核)的強(qiáng)大。Kernel 一般來(lái)說(shuō)適用于任何機(jī)器學(xué)習(xí)算法,你可能會(huì)問(wèn)為什么,我將在文中回答這個(gè)問(wèn)題。
一般來(lái)說(shuō),在機(jī)器學(xué)習(xí)領(lǐng)域中,我們要把相似的東西放在相似的地方。這個(gè)規(guī)則對(duì)所有的機(jī)器學(xué)習(xí)算法都是通用的,不論它是有監(jiān)督、無(wú)監(jiān)督、分類還是回歸。問(wèn)題在于我們應(yīng)該如何準(zhǔn)確地確定什么是相似的?為了揭示這個(gè)問(wèn)題,我們將從 Kernel 的基礎(chǔ)開始學(xué)習(xí)。
兩個(gè)向量之間的點(diǎn)積是一個(gè)神奇的東西,可以肯定地說(shuō),它在一定程度上度量了相似性。通常在機(jī)器學(xué)習(xí)的文章中,點(diǎn)積表示成以下形式:

這表示了向量x和x'之間的點(diǎn)積。注意,為了簡(jiǎn)便起見(jiàn),此處省略了向量符號(hào)的箭頭。這個(gè)符號(hào)是向量分量乘積之和的簡(jiǎn)寫:

巧合的是,向量的范數(shù)是點(diǎn)積的平方根,可以這樣表示:

這當(dāng)然不是全部的。我們肯定知道余弦定理,即點(diǎn)積等于向量之間角度的余弦與它們范數(shù)的乘積(這很容易用簡(jiǎn)單的三角函數(shù)來(lái)證明):

談?wù)摻嵌群头稊?shù)的好處在于,我們可以想象出這個(gè)點(diǎn)積是什么樣子。讓我們畫一下這兩個(gè)向量,它們之間的夾角為 α:

因此,如果我們采用點(diǎn)積作為相似性的度量,那么,它在什么時(shí)候會(huì)達(dá)到最大呢?這意味著是這些向量最相似的時(shí)候。顯而易見(jiàn),當(dāng)余弦等于 1 的時(shí)候,就會(huì)發(fā)生這種情況,也就是當(dāng)角度為 0 度或者弧度的時(shí)候。如果向量的范數(shù)都是相同的,那么顯然我們討論的是同一個(gè)向量!很好,讓我們把目前為止學(xué)到的東西寫下來(lái):
點(diǎn)積是向量間相似性的度量
現(xiàn)在你應(yīng)該希望了解一下談?wù)擖c(diǎn)積的意義。
當(dāng)然,點(diǎn)積作為相似性的度量,在實(shí)際問(wèn)題中可能會(huì)有用,或者一點(diǎn)兒用也沒(méi)有,這取決于你要解決的問(wèn)題。因此,我們需要對(duì)輸入空間進(jìn)行某種轉(zhuǎn)換,使點(diǎn)積作為相似性的度量起到實(shí)際的作用,用 ? 來(lái)表示轉(zhuǎn)換。現(xiàn)在,我們可以定義 Kernel 的含義了,映射空間中的點(diǎn)積:
Kernel 的定義非常直接,是對(duì)映射空間相似性的度量。實(shí)際上,數(shù)學(xué)家喜歡具體化。由于Kernel 所處理的底層函數(shù)和空間不應(yīng)該存在隱含的假設(shè),因此,通過(guò)函數(shù)分析 Kernel 背后存在著很多的理論,需要在其它的文章中來(lái)探索這方面的問(wèn)題。簡(jiǎn)而言之,我們需要明確地說(shuō)明想以什么樣的函數(shù)來(lái)表示 ?:

我們需要一個(gè)從 X 域映射到點(diǎn)積被定義好的空間的函數(shù),這意味著它是一個(gè)很好的相似性度量。
Kernel 可以用作任何在點(diǎn)積過(guò)程(或相關(guān)范數(shù))中定義的算法的泛化。最有名的是使用 Kernel 作為基礎(chǔ)算法例子是支持向量機(jī)(Support Vector Machines)和高斯過(guò)程(Gaussian Processes),但也有一些是 Kernel 與神經(jīng)網(wǎng)絡(luò)一起使用的例子。
我們實(shí)際上需要 Kernel 和映射函數(shù) ? 的另一個(gè)原因是輸入空間可能沒(méi)有定義明確的點(diǎn)積。快速地研究一個(gè)文檔分析的例子,我們只想根據(jù)兩個(gè)文檔的主題來(lái)得出它們之間的相似性,然后可能會(huì)對(duì)它們進(jìn)行分類。那么,這兩個(gè)文檔之間的點(diǎn)積究竟是什么呢?一種選擇是獲取文檔字符的 ASCII 碼,并將它們連接到一個(gè)大的向量中 —— 當(dāng)然,這不是你在實(shí)踐中要做的工作,而是僅供思考。
我們現(xiàn)在已經(jīng)將文檔定義為向量了,然而問(wèn)題還是在于文件的長(zhǎng)度,即不同文件的長(zhǎng)度不同。這沒(méi)什么大不了的,我們可以通過(guò)在較短的文檔中填充一定長(zhǎng)度的 EOS 字符來(lái)應(yīng)對(duì)這個(gè)問(wèn)題。然后我們就可以計(jì)算這個(gè)高維空間中的點(diǎn)積了。但還有一個(gè)問(wèn)題是,這個(gè)點(diǎn)積的相關(guān)性,或者更確切地說(shuō),這個(gè)點(diǎn)積實(shí)際上意味著什么。顯然,字符的細(xì)微變化會(huì)改變點(diǎn)積。即使我們用同義詞來(lái)替換,它一樣會(huì)改變點(diǎn)積。這是在比較兩個(gè)文檔的主題時(shí)要避免的問(wèn)題。
那么,Kernel 是如何在此發(fā)揮作用的?理想的情況下,你需要找到一個(gè)映射函數(shù) ? 將輸入空間映射到一個(gè)特征空間,其中點(diǎn)積具有你想要的意義。在剛才文檔比較的例子中,對(duì)于語(yǔ)義相似的文檔,點(diǎn)積值是很高的。換句話說(shuō),這種映射應(yīng)該使分類器的工作更容易,因?yàn)閿?shù)據(jù)變得更容易分離。
我們現(xiàn)在可以看一下典型的 XOR 示例來(lái)進(jìn)一步理解概念。XOR 是一個(gè)二進(jìn)制函數(shù),如下所示:

藍(lán)色的點(diǎn)以 0 來(lái)分類,紅色的點(diǎn)以 1 來(lái)分類。我們可以假設(shè)這是一個(gè)有噪音的 XOR 函數(shù),因?yàn)榧旱姆植挤秶軓V。我們馬上注意到了一個(gè)問(wèn)題,數(shù)據(jù)是不可線性分離的。也就是說(shuō),我們不能在紅點(diǎn)和藍(lán)點(diǎn)之間劃一條線來(lái)分離它們。
在這種情況下能做些什么呢?我們可以應(yīng)用一個(gè)特定的映射函數(shù),以使工作變得更容易。具體來(lái)說(shuō),要?jiǎng)?chuàng)建一個(gè)映射函數(shù),它將對(duì)通過(guò)紅點(diǎn)集群的線附近的輸入空間進(jìn)行單側(cè)反射。我們將表示出這條線下面附近的所有點(diǎn)。那么,映射函數(shù)將會(huì)得到以下結(jié)果:

在映射之后,數(shù)據(jù)會(huì)變得很容易進(jìn)行線性分離,因此如果我們有一個(gè)模型試圖擬合一個(gè)分離的超平面(例如感知器),這就是一個(gè)理想的情況。顯然,線性可分離很好,但是為了構(gòu)建有效的模型,我們不一定需要線性可分離的,這就意味著并非所有的映射函數(shù)都需要得到線性可分離的數(shù)據(jù)才能構(gòu)建有效的模型。
人們時(shí)常地混淆使用 Kernel 和使用映射函數(shù)的概念。Kernel 函數(shù)的輸出是一個(gè)標(biāo)量,是對(duì)兩個(gè)點(diǎn)的相似性或相異性的度量,而映射函數(shù)的輸出則是一個(gè)提供相似性計(jì)算的向量。Kernel 的有趣之處在于,有時(shí)我們可以計(jì)算原始空間中映射的點(diǎn)積,而無(wú)需顯式地進(jìn)行輸入映射。這就允許我們處理無(wú)限維度空間的映射!這是一個(gè)很難理解的事情,所以我將在后面的文章中進(jìn)行討論。
最后,我想推薦一下 Smola 和 Schoelkopf 的書:《Learning with Kernels》。本書對(duì) Kernel 核心及其理論背景進(jìn)行了全面的闡述。
機(jī)器學(xué)習(xí)中Kernel的秘密(二)
在《機(jī)器學(xué)習(xí)中Kernel的秘密(一)》一文中,我用最簡(jiǎn)單的方法解釋了 Kernel。在讀本文之前,我建議你先快速地閱讀一下這篇文章,了解一下 Kernel 是什么。希望你能得出這樣的結(jié)論:Kernel是映射空間中兩個(gè)向量之間的相似性的度量。
現(xiàn)在,我們可以討論一些比較有名的 Kernel,以及如何結(jié)合這些 Kernel 來(lái)構(gòu)建其它的 Kernel。記住,對(duì)于我們將要使用的示例,x’ 是用于繪圖的一維向量,我們將 x’ 的值設(shè)置為 2。不再多說(shuō),讓我們開始吧。
線性 Kernel


這個(gè) Kernel 的超參數(shù)是 sigma 和偏差參數(shù) c。直觀地說(shuō),這個(gè) Kernel 是什么呢?如果我們?nèi)∫粋€(gè)特定的 x,并將它與所有其它的 x’ 相比較,就會(huì)得到一條直線。這就是它被稱為線性 Kernel 的原因。不變的 x 值和變化的 x' 值有效地說(shuō)明了我們沿著這條直線移動(dòng)。
這個(gè) Kernel 的另一個(gè)特點(diǎn)是,它具有非穩(wěn)定性,這意味著它的值相對(duì)于 x’ 的絕對(duì)位置而不是相對(duì)位置發(fā)生了變化。另一個(gè)優(yōu)點(diǎn)是,由于它是線性的,所以在優(yōu)化過(guò)程中可以進(jìn)行高效計(jì)算。
多項(xiàng)式 Kernel


顧名思義,這個(gè) Kernel 是一個(gè)帶有偏差量 c 的多項(xiàng)式函數(shù)。我認(rèn)為值得花點(diǎn)時(shí)間來(lái)考慮會(huì)產(chǎn)生Kernel 的映射函數(shù) ?,因?yàn)?Kernel 是在映射空間中的一個(gè)相似性函數(shù)(點(diǎn)積),所以它會(huì)返回一個(gè)標(biāo)量。在二維空間中二階多項(xiàng)式 Kernel 的映射函數(shù)表示如下:

當(dāng)增大輸入維度 d 的值和多項(xiàng)式的階數(shù)時(shí),映射的特征空間就會(huì)變得相當(dāng)大。那么,我們可以計(jì)算點(diǎn)積而不是進(jìn)行轉(zhuǎn)換,如上面的公式中所列的那樣。這是 Kernel 理論中許多很不錯(cuò)的公式之一。
徑向基函數(shù) Kernel


這是一個(gè)非常有名的,并經(jīng)常使用的 Kernel。注意,由于指數(shù)中負(fù)指數(shù)的存在,所以指數(shù)的取值要在 0 到 1 范圍之間,這是一個(gè)不錯(cuò)的特性,因?yàn)槲覀兛梢哉f(shuō) 1 表示非常相似,或者相同,而接近 0 的值則表示完全不同。指數(shù)中的參數(shù) σ 控制著 Kernel 的靈敏度。對(duì)于較低的 σ 值,我們只期望那些非常接近的點(diǎn)是相似的。對(duì)于較大的 σ 值,我們放寬了相似性標(biāo)準(zhǔn),因?yàn)樵竭h(yuǎn)的點(diǎn)就越相似。
當(dāng)然,Kernel 看起來(lái)是這樣,因?yàn)槲覀儼?x 設(shè)置為 0,并改變了 x’,邏輯上我們想要計(jì)算點(diǎn)之間整個(gè) X 域的相似性。這就得出了一個(gè)平面,正是這個(gè)平面,才是描述一個(gè) Kernel 的例子:

如圖所示,Kernel 的值在對(duì)角線處最高,其中 x 和 x' 是相同的。
周期 Kernel


當(dāng)你考慮周期性的時(shí)候,就會(huì)馬上想到周期函數(shù),比如正弦函數(shù)和余弦函數(shù)。從邏輯上講,周期 Kernel 中有正弦函數(shù)。Kernel 的超參數(shù) σ 還是表示了相似性的靈敏度,但是我們還有表示正弦函數(shù)周期的參數(shù) p。另外,還要注意徑向基 Kernel 和周期 Kernel 之間的相似性,它們都被限定為輸出 0 到 1 范圍之間的值。
什么時(shí)候使用周期 Kernel?這是非常合乎邏輯的,假設(shè)你想要為一個(gè)類正弦函數(shù)建模,從這個(gè)函數(shù)中取 2 個(gè)點(diǎn),它們相對(duì)于歐式距離比較遠(yuǎn),這并不意味著函數(shù)的值有什么不同。為了解決這類問(wèn)題,就需要周期 Kernel。為了完整性起見(jiàn),看看當(dāng)我們調(diào)整周期 Kernel 的周期性時(shí)會(huì)發(fā)生什么(什么也沒(méi)有):

局部周期 Kernel


我們基本上是通過(guò)徑向基 Kernel 與周期 Kernel 的乘積得到了局部周期 Kernel。我們用這個(gè)方法得到的結(jié)果是,得到的 Kernel 的值隨 x 和 x' 之間距離的變化而變化,而不僅僅是隨距離的周期性變化而變化,這就導(dǎo)致了所謂的局部周期性。
只是因?yàn)槲液芎闷妫?3D 模式來(lái)繪制了這個(gè) Kernel,并得到以下這個(gè)還不錯(cuò)的形狀:
構(gòu)建新 Kernel
到現(xiàn)在為止,我們接觸到了一些 Kernel 的例子。問(wèn)題來(lái)了,我們拿什么來(lái)構(gòu)建新的 Kernel 呢?Kernel 有以下兩個(gè)很好的特性:
1. 添加一個(gè)帶有 Kernel 的 Kernel 會(huì)產(chǎn)生一個(gè)新的 Kernel;
2. 多個(gè) Kernel 的乘積會(huì)產(chǎn)生一個(gè)新的 Kernel;
以上兩個(gè)特性基本上可以讓你在不做太多數(shù)學(xué)運(yùn)算的情況下構(gòu)建新的 Kernel,也是非常直觀的。乘積可以看作是一個(gè)與運(yùn)算,特別是在考慮 0 和 1 范圍之間的 Kernel 時(shí)。于是,我們可以將周期 Kernel 與徑向基函數(shù) Kernel 相結(jié)合,得到一個(gè)局部周期 Kernel。
這幾個(gè)例子,可以讓你開始 Kernel 之旅。當(dāng)然,也還有一些沒(méi)有被提及的 Kernel。針對(duì)實(shí)際問(wèn)題進(jìn)行的 Kernel 設(shè)計(jì)是一項(xiàng)非常重要的任務(wù),要想學(xué)好它,需要一定的經(jīng)驗(yàn)。此外,在機(jī)器學(xué)習(xí)中有一個(gè)專門用于學(xué)習(xí) Kernel 函數(shù)的領(lǐng)域。
由于算法上的要求,Kernel 設(shè)計(jì)也比較復(fù)雜。由于許多基于 Kernel 的算法都涉及到一種反向的被稱為“Gram”的矩陣,因此我們要求 Kernel 是正定的,但這是我將來(lái)要探討的內(nèi)容。
現(xiàn)在我們已經(jīng)了解了一些有用的 Kernel,可以更深入地研究 Hilbert 空間的理論以及它們與Kernel 的關(guān)系,但是這必須要等到下一篇文章了。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
67文章
8560瀏覽量
137180 -
Kernel
+關(guān)注
關(guān)注
0文章
50瀏覽量
12119
原文標(biāo)題:解密Kernel:為什么適用任何機(jī)器學(xué)習(xí)算法?
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
春晚機(jī)器人跳舞背后:精密關(guān)節(jié)連接器的“絲滑”秘密
機(jī)器學(xué)習(xí)特征工程:分類變量的數(shù)值化處理方法
深入剖析ARM64內(nèi)核關(guān)鍵文件:kernel-6.1/arch/arm64/kernel/head.S
人工智能與機(jī)器學(xué)習(xí)在這些行業(yè)的深度應(yīng)用
機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需避免的 7 個(gè)常見(jiàn)錯(cuò)誤與局限性
基于ETAS嵌入式AI工具鏈將機(jī)器學(xué)習(xí)模型部署到量產(chǎn)ECU
量子機(jī)器學(xué)習(xí)入門:三種數(shù)據(jù)編碼方法對(duì)比與應(yīng)用
如何在機(jī)器視覺(jué)中部署深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)
如何解決開發(fā)機(jī)器學(xué)習(xí)程序時(shí)Keil項(xiàng)目只能在調(diào)試模式下運(yùn)行,但無(wú)法正常執(zhí)行的問(wèn)題?
超小型Neuton機(jī)器學(xué)習(xí)模型, 在任何系統(tǒng)級(jí)芯片(SoC)上解鎖邊緣人工智能應(yīng)用.
【HZ-RK3568開發(fā)板免費(fèi)體驗(yàn)】3、開啟Linux Kernel RT功能
FPGA在機(jī)器學(xué)習(xí)中的具體應(yīng)用
邊緣計(jì)算中的機(jī)器學(xué)習(xí):基于 Linux 系統(tǒng)的實(shí)時(shí)推理模型部署與工業(yè)集成!
使用MATLAB進(jìn)行無(wú)監(jiān)督學(xué)習(xí)
機(jī)器學(xué)習(xí)中Kernel的秘密
評(píng)論