iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
0

我們前面介紹了線性模型跟基本的神經網路模型。

可能有的人會覺得我怎麼不放神經網路的圖,看數學式子看的很痛苦。

是的,我的確沒打算放圖。一來神經網路的圖在各大網站或是 google 上遍地都是我實在沒有必要再放一張,二來因為這個模型的核心根本不是哪些圖,那些圖只是幫助理解,理解之後就都是看數學式了,再回去看圖就太小兒科了。

神經網路的概念在於將多個模型串接起來,也就是前面提到的堆疊的概念。

處理流程

堆疊的概念其實跟傳統的機器學習處理流程有點像。

機器學習的處理流程大概就跟做料理很像。

首先,你需要先買菜(蒐集資料),然後是備料(資料前處理)。備料的動作其實很不一樣,依據你要煮的料理(機器學習模型)是什麼而有所區別,該是切塊、切條、切絲,還是切丁(特徵離散化)?肉該不該先醃過(特徵轉換)?

如果你想呈現的是一道味道一體呈現的料理,而不是肉是肉、菜是菜,味道都各自獨立,你是不是該在一些烹調方式或是前處理上讓味道融為一體?(特徵正規化)(謎:又不是在吃沙拉,還味道各自分離。)

等料都備好了之後,就是重點的料理部份。料理方式要用煎煮炒炸哪一種(定義監督式、非監督式學習),然後整體的食譜(機器學習模型)是什麼?像是典型的紅酒燉牛肉就是經典食譜(很多人用的模型),當然你可以根據自己的喜好修改成自己的版本(改模型架構),不過大多數人怕失敗,所以都去找了電視上的或是名主廚的食譜(市面上常看到的套件,像 scikit-learn)。

料理好了之後就是要排盤(成果展現)啦!你總不可能紅酒燉牛肉做好之後整鍋端到餐桌上去,一定是要做些裝飾跟點綴(資料視覺化)。那些就是主廚(資料科學家或 AI 工程師)想要呈現給你的客人(通常是老闆)的東西,那除了嗅覺跟味覺,還有視覺上的效果。整體說來,需要營造的是一個氛圍或是體驗(老闆的感覺)。

身為一個主廚必須在各個小地方或是細節用心,才能拿到米其林指南推荐的殊榮(KDD 或 kaggle 競賽冠軍)。

好像有點離題了......

總之,這些步驟都是環環相扣的,而且需要從最前端串接到最後的。模型的堆疊也是做類似的事情,希望可以把前處理、料理等等步驟都串接起來成為一個模型,所以以往的機器學習 pipeline 就演化成神經網路模型了。

RBF network

我們回到今天的主題來,像前面我們談過 SVM 是個很厲害的分類器,主要是引進了 kernel 讓這個模型可以做非線性的處理。

那麼 kernel 能不能被放到神經網路裡呢?

其實是可以的,應該說,有一種網路模型稱為 Radial basis function network(RBF network),他其實就很像是 Gaussian kernel SVM。

我們來看看前面的 kernel SVM 模型:

https://chart.googleapis.com/chart?cht=tx&chl=SVM(%5Cmathbf%7Bx%7D)%20%3D%20sign(%5Csum_%7BSV%7D%20%5Calpha_n%20y_n%20K(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7Bx_n%7D)%20%2B%20b)

Gaussian kernel,或是稱 RBF function:

https://chart.googleapis.com/chart?cht=tx&chl=K(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7Bx_n%7D)%20%3D%20exp(%5Cgamma%20%7C%7C%5Cmathbf%7Bx%7D%20-%20%5Cmathbf%7Bx_n%7D%7C%7C%5E2)%20%3D%20RBF(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7Bx_n%7D)

那麼 RBF network 是長什麼樣子呢?

https://chart.googleapis.com/chart?cht=tx&chl=y%20%3D%20%5Csigma(%5Csum_%7Bn%7D%20w_n%20RBF(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7B%5Cmu_n%7D))%20%2B%20b

示意圖的話是這樣:

你可以將 https://chart.googleapis.com/chart?cht=tx&chl=RBF(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7B%5Cmu_n%7D) 看成第一層,就是在計算兩個向量之間的距離,或是反過來說叫作相似度。

第二層則是做一個線性組合,這邊就很像神經網路的一層。

我們其實可以將上面的式子擴展成:

https://chart.googleapis.com/chart?cht=tx&chl=y%20%3D%20%5Csigma(%5Csum_%7Bn%7D%20w_n%20RBF(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7B%5Cmu_n%7D)%20%2B%20b)

或是寫成:

https://chart.googleapis.com/chart?cht=tx&chl=y%20%3D%20%5Csigma(%5Cmathbf%7Bw%7D%5ET%20RBF(%5Cmathbf%7Bx%7D%2C%20%5Cmathbf%7B%5Cmu%7D)%20%2B%20b)

我們可以將第二層變成一個神經網路的層,還包含有 activation function,所以這樣 kernel 也變成一層了。

RBF network 一開始是設計用來做函數內插的,就是有一些資料點 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmathbf%7Bx%7D,我希望可以由這些資料來幫我們找到一條平滑的函數,愈密集的地方是愈有可能是線經過的。

今天的部份就到這邊啦!


上一篇
12 從線性模型到神經網路
下一篇
14 淺層神經網路
系列文
機器學習模型圖書館:從傳統模型到深度學習31

尚未有邦友留言

立即登入留言