就如同所有自然生物的起源,都可追溯自單細胞生物,現在最火熱的深度學習,細細追溯它的起源,也從一個單一的神經元開始。在 1943年 McCulloch 和 Pitts 仿造人類的神經細胞結構,設計了第一個軟體實現的人工神經元。此時的神經元就如同數位邏輯電路裡的邏輯閘一樣, 所有的輸入都依照計算邏輯而輸出相對應的計算結果,只不過這個輸出結果,比較近似於房間使用的開關:的結果超過某一個給定值後,視神經元的輸出就會等於1(on 的狀態),若沒有超過這個給定值,則為零(off 的狀態)。這個神經元並沒有任何學習的方法,直到 1950 年, Rosenblatt 才提出了一個名為 Perceptron 的學習演算法,將神經元帶入了人工智慧的領域中,也造就今日深度學習的廣泛應用。
在今日的源起篇,我們就來看看這個只能輸出 0 和 1 的神經元,在結合了 Perceptron 的學習方法後,如何進行模式辨認並完成分類工作,以及它如何啟發之後的類神經網路方法和它的遠房兄弟 Support Vector Machine (SVM)。
一個簡單的 Perceptron 網路的架構如下:
圖一:左圖是二維二元 Perceptron 分類器
與最通用的 Feed Forward 類神經網路單一一層的結構,除了 activation function 換成了具有 hard threshold,只能輸出 0 和 1,或 -1 和 1 的函示,並沒有太大的差異。坦白而言,一個 Perceptron 網路,其實只是一個線性的分類器,比起類神經網路,能夠表示各式各樣不同函式的能力,簡直是差多了!
但 Perceptron 網路,卻蘊含了兩個類神經重要的觀念,一是非線性的 activation function,以及透過糾錯學習例子,來逐一改變線性方程式的權重值,最終(希望)找到能夠正確分類所有訓練例子的線性函式,或又被稱為 decision line。
接下來就是 Perceptron 演算法的圖解步驟解說,為了方便視覺呈現,這裡用 2 維的例子來做說明:
圖二:一個簡單的 Perceptron 學習實例
上圖中,黑點的分類標籤被標註為 1,而白點的分類標籤被標註為 -1。在這個簡單的例子,我們不考慮 bias,或 bias 為零,則 decision line 必須通過原點。一個能夠正確分類這三點,且通過原點的 decision line,其法線,或與 decision line 正交的向量,w,必須要和黑點的座標向量同向,或內積為正(夾角小於 90度),和白點的座標向量反向,或內積為負(夾角大於 90 度)。
將演算法的步驟簡述如下:
這個簡單的學習方法,有一個致命的缺點:那就是它無法學習過於複雜,或線性不可分的例子。
圖三:左上圖為線性可分的訓練實例(紅點為分類標註為 1,藍點為分類標註為 -1)。右上圖為線性不可分的訓練實例。下圖則利用 Least-square 方法,計算出的 decision line 的正交向量(綠實線)和 decision line (黑實線)
很顯然的只能做線性分類的 Perceptron 網路,並沒有足夠的模型能力來對此非線性的分類分佈模式進行分類。
圖四:使用 Scikit-learn 的 Perceptron 對同樣的例子做分類。
相對而言,能夠堆積多層的類神經網路,卻能藉由疊加多層的非線性啟動函式,而得到一個非線性的分類曲線,正確地將所有的例子分類。這多一層的非線性函式映射,又被稱為 hidden layer,將斜對角,同分類標籤的子區域內的訓練實例,映射到新的特徵維度中。在這個新的特徵維度中,分類標籤為 1 的點,會映射到相同的座標位置(見圖五下)。也就是說,hidden layer 藉由多重映射非線性函式,所學到的是新的特徵向量,此新組合的特徵向量足以代表該分類的獨特之處,而能分辨其他類別。
圖五:建構一個僅有一層的 Feedfoward 類神經網路,在 hidden layer 使用兩個神經元(圖上方),便可將原來線性不可分的 XOR 訓練例子(圖左下方),映射到新的特徵空間,而成為可分(圖右下方)。
藉由學習分類函式本身,而達到精準分類的結果,是類神經網路的中心思想,在往後的文章,我們會看到,如何加深網路的層級以期達到函式本身複雜度,以及能學習更複雜,更高維的訓練例子分佈。不過,在此篇的最後,讓我們來稍微提及類神經網路的遠親,SVM,其理論同樣也是架構在 Perceptron 相似的線性分類器,以如何的方法來解決線性不可分的問題?
SVM 透過一種稱為 Kernel 的方法,將訓練例子映射到新的特徵向量空間,而在此空間,所有的訓練例子皆是可分的。如 XOR 的訓練分佈中,藉由加入描述 hyperbolic 函式的新變數,建構成較高維的特徵空間,而變得可分。SVM 自己也是一門廣大精深的學問,已經超出了此系列的範圍,有興趣的人可以找相關領域的專家或書籍來學習。
Perceptron 學習演算法,雖然是個古老又簡單的方法,但在大多數的實際應用上,仍舊有它的一席之地。由於該演算法的簡易快速,在超級巨量資料的學習,有時還是會應用上 Perceptron 來做 online 的快速學習,而類神經網路就像隻慢工出細活的烏龜般,軟體業推崇的 fast fail 在這方面目前就完全使不上力了。
圖片來源: