先給個定義:核函式k(kernel function)就是指k(x, y) =
,其中x和y是n維的輸入值,f(·) 是從n維到m維的對映(通常而言,m>>n)。
是x和y的內積(inner product),嚴格來說應該叫歐式空間的標準內積,也就是很多人常說的點積(dot product)。
光看這一段還是不明白kernel是什麼,用來幹什麼的...對吧?不要急。乙個好的知識分享者是不會把一篇空洞的定義扔下就不管的,ta會告訴你這個概念的intuition,然後給你舉個小小的栗子,最後告訴你幾個應用場景。andrew ng的machine learning為什麼會成為一門現象級的mooc?原因之一就是因為他除了是個學術上的大神,也同樣是個極有質素的知識分享者。所以我要學習他。
好了,intuitively(這也模仿得太生硬了吧…),要計算
,我們要先分別計算f(x)和f(y),然後再求它們的內積。上面的定義裡也說了,經過對映後的x和y,維數大大增加,計算內積的成本可能會非常之大,而且在高位空間費力牛勁兒地計算內積,內積又是乙個scalar,相當於說又把我們的計算從高維空間拉回到一維空間!所以我們特別想要乙個「簡便運演算法」,幫助我們不需要奔向高維空間就能在家門口計算得到想要的內積。這時候該輪到我們的豬腳——kernel登場了,它能幫我們做到這一點。
舉個小小栗子。
令 x = (x1, x2, x3, x4); y = (y1, y2, y3, y4);
令 f(x) = (x1x1, x1x2, x1x3, x1x4, x2x1, x2x2, x2x3, x2x4, x3x1, x3x2, x3x3, x3x4, x4x1, x4x2, x4x3, x4x4); f(y)亦然;
令核函式 k(x, y) = (
)^2.
接下來,讓我們帶幾個簡單的數字進去看看是個什麼效果: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) ;
= 25+60+105+160+60+144+252+384+105+252+441+672+160+384+672+1024 = 4900. 好累,對不對?可誰讓f(·)把四維空間的資料對映到十六維空間裡呢? 如果我們用核函式呢? k(x, y) = (5+12+21+32)^2 = 70^2 = 4900. 就是這樣! 所以現在你看出來了吧,kernel其實就是幫我們省去在高維空間裡進行繁瑣計算的「簡便運演算法」。甚至,它能解決無限維空間無法計算的問題!因為有時f(·)會把n維空間對映到無限維空間去,對此我們常常束手無策,除非是用kernel,尤其是rbf kernel(k(x,y) = exp(-||x-y||^2) )。 在有kernel之前,做machine learning的典型的流程應該是:data --> features --> learning algorithm,但kernel給我們提供了乙個alternative,那就是,我們不必定義從data到feature的對映函式,而是可以直接kernel(data) --> learning algorithm,也可以是data --> features --> kernel(features) --> learning algorithm。 所以雖然我們看到kernel常被應用在svm(svm中的kernel應該是後一種用法,後文再說),但其實要用到內積的learning algorithm都可以使用kernel。「用到內積的learning algorithm」其實並不少見,不信你可以想一想最普通不過的linear classifier/regressor有沒有乙個步驟是計算特徵向量(feature vectors)。那麼kernel在svm究竟扮演著什麼角色?初學svm時常常可能對kernel有乙個誤讀,那就是誤以為是kernel使得低維空間的點投射到高位空間後實現了線性可分。其實不然。這是把kernel和feature space transformation 混為了一談。(這個錯誤其實很蠢,只要你把svm從頭到尾認真推導一遍就不會犯我這個錯。) 還是簡單回顧一下吧。svm就是 y = w'·φ(x) + b,其中φ(x)是特徵向量(feature vectors),並且是φ(x)使得資料從低維投射到高位空間後實現了線性可分。而kernel是在解對偶問題的最優化問題時,能夠使φ(x)更方便地計算出來,特別是φ(x)維數很高的時候。 ------------------------------正文完,附上幾個鏈結-------------------------------- kernel的種類繁多,如果想詳細了解,可以看看這個帖子
台灣大學林軒田《機器學習基石》:
ps:本來草稿裡存的話是想告訴題主,這樣的問題好好去翻教材,或者看caltech的abu-mostafa教授的公開課learning from data,或者看台灣大學林軒田的《機器學習基石》,(前者是後者的導師,而且師徒倆講課都很萌),弄懂kernel這個概念是不成問題的。 但當時沒有就這樣草率地發出來。原因倒不是怕被扣友善度,而是接連地追問了我自己到底弄明白kernel了沒有。所以謝謝題主問這個問題,你又驅使我把這個概念完整地思考一遍,並記錄下來。
機器學習裡的 kernel 是指什麼?
機器學習裡的 kernel 是指什麼?先給個定義 核函式k kernel function 就是指k x,y 其中x和y是n維的輸入值,f 是從n維到m維的對映 通常而言,m n 是x和y的內積 inner product 嚴格來說應該叫歐式空間的標準內積,也就是很多人常說的點積 dot produ...
GPU是什麼以及GPU在機器學習裡起著什麼樣的作用
圖形處理器 英語 graphics processing unit,縮寫 gpu 又稱顯示核心 視覺處理器 顯示晶元,是一種專門在個人電腦 工作站 遊戲機和一些移動裝置 如平板電腦 智慧型手機等 上做影象和圖形相關運算工作的微處理器。gpu使顯示卡減少了對cpu的依賴,並進行部分原本cpu的工作,尤...
人工智慧,機器學習和深度學習之間的差異是什麼?
如果你在科技領域,你經常會聽到人工智慧,機器學習,甚至是深度學習。怎樣才可以在正確的時間正確的使用這些詞?他們都是一樣的意思嗎?然而更多時候,人們總是混淆的使用它們。人工智慧,機器學習和深度學習都是屬於乙個領域的乙個子集。但是人工智慧是機器學習的首要範疇。機器學習是深度學習的首要範疇。深度學習是機器...