Hello World感知機,懂你我心才安息 (深度學習入門係列之五)
係列文章:
人工“碳”索意猶盡,智能“矽”來未可知(深度學習入門係列之二)
“機器學習”三重門,“中庸之道”趨若人(深度學習入門係列之四)
------------------
原文再續,書接上回。
5.1 網之初,感知機
我們知道,《三字經》裏開篇第一句就是:“人之初,性本善”。那麼對於神經網絡來說,這句話就要為:“網之初,感知機”。感知機( Perceptions ),基本上來說,是一切神經網絡學習的起點。
很多有關神經網絡學習(包括深度學習)的教程,在提及感知機時,都知道繞不過,但也僅僅一帶而過。學過編程的同學都知道,不論是哪門什麼語言,那個神一般存在的第一個程序——“Hello World”,對初學者有多麼重要,可以說,它就是很多人“光榮與夢想”開始的地方。
而感知機學習,就是神經網絡學習的“Hello World”,所以對於初學者來說,也值得我們細細玩味。因此,下麵我們就給予詳細講解。
5.2 感性認識“感知機”
在第3小節中,我們已經提到,所謂的感知機,其實就是一個由兩層神經元構成的網絡結構,它在輸入層接收外界的輸入,通過激活函數(含閾值)的變換,把信號傳送至輸出層,因此它也稱之為“閾值邏輯單元(threshold logic unit)”。
麻雀雖小,五髒俱全。感知機雖然簡單,但已初具神經網絡的必備要素。在前麵我們也提到,所有“有監督”的學習,在某種程度上,都是分類(classification)學習算法。而感知機就是有監督的學習,所以,它也是一種分類算法。下麵我們就列舉一個區分“西瓜和香蕉”的經典案例,來看看感知機是如何工作的[1]。
為了簡單起見,我們就假設西瓜和香蕉都僅有兩個特征(feature):形狀和顏色,其它特征暫不考慮。這兩個特征都是基於視覺刺激而得到的。
圖5-1 感知機學習算法
假設特征x1代表輸入顏色,特征x2代表形狀,權重w1和w2默認值都為1,為了進一步簡化,我們把閾值θ(亦有教程稱之為偏值——bias)設置為0。為了標識方便,我們將感知器輸出為“1”,代表判定為“西瓜”,而輸出為“0”,代表判定為“香蕉”。當然了,如果有更多類別的物品,我們就用更多的數字來標記即可。
為了方便機器計算,我們對顏色和形狀這兩個特征,給予不同的值,以示區別。比如,顏色這個特征為綠色時,x1取值為1,而當顏色為黃色時,x1取值為-1;類似地,如果形狀這個特征為圓形,x2取值為1,反之,形狀為彎曲狀時,x2取值為-1,如表5-1所示。
這樣一來,可以很容易依據圖5-1所示的公式,對於西瓜、香蕉做鑒定(即輸出函數f的值),其結果分別如圖5-2(a)所示:
圖5-2 感知器的輸出
從圖5-2(a)所示的輸出可以看到,對西瓜的判定輸出結果是2,而香蕉的為-2。而我們先前預定的規則是:函數輸出為1,則判定為西瓜,輸出為0,則判定為香蕉,那麼如何將2或-2這樣的分類結果,變換成預期的分類表達呢,這個時候,就需要激活函數上場了!
這裏,我們使用了最為簡單的階躍函數(step function)。在階躍函數中,輸出規則非常簡單:當x>0時,f(x)輸出為1,否則輸出0。通過激活函數的“潤滑”之後,結果就變成我們想要的樣子(如圖5-2-b所示)。就這樣,我們就搞定了西瓜和香蕉的判定。
這裏需要說明的是,對象的不同特征(比如水果的顏色或形狀等),隻要用不同數值區分表示開來即可,具體用什麼樣的值,其實並無大礙。
但你或許會疑惑,這裏的閾值(threshold)θ和兩個連接權值w1和w2,為啥就這麼巧分別就是0、1、1呢?如果取其它數值,會有不同的判定結果嗎?
這是個好問題。事實上,我們並不能一開始就知道這幾個參數的取值,而是一點點地非常苦逼地“折騰試錯”(Try-Error)出來的,而這裏的“折騰試錯”其實就是感知機的學習過程!
下麵,我們就聊聊最簡單的神經網絡——感知機它是如何學習的?
5.3 感知機是如何學習的?
中國有句古話:“知錯能改,善莫大焉。”說得就是“犯了錯誤而能改正,沒有比這更好的事了”。
放到機器學習領域,這句話顯然屬於“監督學習”的範疇。因為“知錯”,就表明它事先已有了事物的評判標準,如果你的行為不符合(或說偏離)這些標準,那麼就要根據“偏離的程度”,來“改善”自己的行為。
下麵,我們就根據這個思想,來製定感知機的學習規則。從前麵討論中我們已經知道,感知機學習屬於“有監督學習”(即分類算法)。感知機是有明確的目的導向的,這有點類似於“不管白貓黑貓,抓住老鼠就是好貓”,不管是什麼樣的學習規則,能達到良好的分類目的,就是好學習規則。
我們知道,對象本身的特征值,一旦確定下來就不會變化。因此,所謂的神經網絡的學習規則,就是調整權值和閾值的規則(這個結論對於深度學習而言,依然是適用的)。
假設我們的規則是這樣的:
其中ep = y- y’,y為期望輸出,y’是實際輸出,所以,具體說來,ep是二者的差值。在後麵,讀者朋友可以看到,這個“落差”就是整個網絡中權值和閾值的調整動力。因為,很顯然,如果ep為0,那麼新、舊權值和閾值都是一樣的,網絡就穩定可用了!
下麵,我們就用上麵的學習規則來模擬感知機的學習過程。假設w1和w2初始值分別為1和-1(注意:已經不再是1和1了!),閾值θ依然為0(事實上為其它初值,也是可行的),那麼我們遵循如下步驟,即可完成判定西瓜的學習:
(1)計算判定西瓜的輸出值f:
將這個輸出值帶入如圖5-2-b所示的階躍函數中,可得y=0。
(2)顯然,針對西瓜,我們期望輸出的正確判定是:y=1,而現在實際輸出的值y’=0,也就是說,實際輸出有誤。這個時候,就需要糾偏。而糾偏,就需要利用公式(5.1)所示的學習規則。於是,我們需要計算出來誤差ep來。
(3)計算誤差ep:
現在,我們把ep的值帶入公式(5.1)所示的規則中,更新網絡的權值和閾值,即:
(3)那麼,在新一輪的網絡參數(即權值、閾值)重新學習獲得後,我們再次輸入西瓜的屬性值,來測試一下,看看它能否正確判定:
再經過激活函數(階躍函數)處理後,很高興,輸出結果y=1,判定正確!
(4)我們知道,一個對象的類別判定正確,不算好,“大家好,才算真的好!”於是,在判定西瓜正確後,我們還要嚐試在這樣的網絡參數下,看看香蕉的判定是否也是正確的:
類似地,經過激活函數(階躍函數)處理後,輸出結果y=0,判定也正確的!BINGO!誤差ep為0,打完收工,學習結束!
在這個案例裏,僅僅經過一輪的“試錯法(try-error)”,我們就搞定了參數的訓練,但你可別高興太早,誰叫這是一個“Hello World”版本的神經網絡呢!事實上,在有監督的學習規則中,我們需要根據輸出與期望值的“落差”,經過多輪重試,反複調整神經網絡的權值,直至這個“落差”收斂到能夠忍受的範圍之內,訓練才告結束。
在上麵,我們僅僅給出了感知機學習的一個感性例子,下麵我們要給出感知機學習的形式化的描述。
5.4 感知機的訓練法則
通過前麵的分析,我們可以看到,感知機是很容易實現邏輯上的“與(AND)”、“或(OR)”、“非(NOT)”等原子布爾函數(Primitive Boolean function),如圖5-3所示(睿智如你,你肯定發現了,這裏的確沒有“異或”,這個坑回頭我們在後麵再填上)[2]。
圖5-3 感知機實現邏輯運算
下麵舉例說明。首先,我們注意到,假設f是如圖5-3所示的階躍函數,通過合適的權值和閾值,即可完成常見的邏輯運算(既然是邏輯運算,x1和x2都隻能取值為0或1),例如:
(1)“與(x1∧x2)”:當權值w1=w2=1,閾值θ=2時,有:
此時,僅當x1=x2=1時,y=1,而在其它情況下(如x1和x2無論哪一個取0),y=0。這樣,我們在感知機中,就完成了邏輯“與”的運算。
(2)類似地,“或(x1∨x2)”:當w1=w2=1,閾值θ=0.5時,有:
此時,當x1或x2中有一個為“1”時,那麼y=1,而在其它情況下(即x1和x2均都取“0”),y=0。這樣,我們就完成了邏輯“或”的運算。
(3)在類似地,“非(┐x1)”:當w1=0.6,w2=,0,閾值θ=0.5時,有:
此時,當x1為“1”時,y=0,當x1為“0”時,y=1。這樣,就完成了邏輯“非”的運算(當然,如果以x2做“非”運算,也是類似操作,這裏不再贅述)。
更一般地,當我們給定訓練數據,神經網絡中的參數(權值wi和閾值θ)都可以通過不斷地“糾偏”學習得到。為了方便起見,我們把閾值θ視為w0,而其權值設為固定值“-1”,那麼閾值θ就可視為一個“啞節點(dummy node)”。這樣一來,權重和閾值的學習可以“一統天下”稱為“權重”的學習。
如此一來,感知機的學習規則就可以更加簡單明了,對於訓練樣例(x,y)(需要注意的是,這裏粗體字x表示訓練集合),若當前感知機的實際輸出y’,假設它不符合預期,存在“落差”,那麼感知機的權值依據如公式(5.2)規則調整:
其中,η∈(0,1)稱為學習率(learning rate),公式(5.2)其實是公式(5.1)的一般化描述。由公式(5.2)可知,如果(x,y)預測正確,那麼可知y=y’,感知機就權值就不會發生任何變化,否則就會根據“落差”的程度做對應調整。
這裏需要注意的是,學習率η的作用就是“緩和”每一步權值調整的強度的。它本身的值大小是比較難確定的,如果η太小,網絡調參的次數就太多,從而收斂很慢。如果η太大,“步子大了,容易扯著蛋”,從而錯過了網絡的參數的最優解,因此合適的η大小,在某種程度上,還依賴於人工經驗(如圖5-4所示)。
圖5-4 學習率:“步子大了,容易扯著蛋”
5.5 感知機的表征能力
如果識別對象x有n個特征,那麼感知機可以看做,在n維實例空間(即點空間)中的超平麵決策麵,以向量的模式寫出來就是如圖5-5所示。
圖5-5 感知機的超平麵
這樣一來的話,對於超平麵一側的實例,感知機輸出為1(或稱判定為某一類),而對於超平麵的另外一側實例,感知機輸出為0(判定為另外一類)。
由於感知機隻有輸出層神經元可以進行激活函數的處理,也就是說它隻擁有單層的功能元神經元(functional neuron),因此它的學習能力是相對有限的。比如說在5.4小節中,原子布爾函數中的“與、或、非”等問題都是線性可分的(linearly separable)的問題。
前麵的章節中,我們提到的那位人工智能泰鬥明斯基(Minsky)已經證明,若兩類模式是線性可分的,那麼一定存在一個線性超平麵可以將它們區分開來,如圖5-6(a)-(c)所示。也就是說,這樣的感知機,其學習過程一定會穩定(即收斂)下來,神經網絡的權值可以學習得到。
但是對於線性不可分原子布爾函數(如“異或”操作),就不存在簡單地線性超平麵將其區分開來(如圖5-6-(d))。在這種情況下,感知機的學習過程就會發生“震蕩(fluctuation)”,權值向量就難以求得合適解。這裏稍微為非專業讀者解釋一下什麼異或?所謂異或(XOR),就是當且僅當輸入值x1和x2不相等,則輸出為1。反之,輸出為0。你可以監督粗暴地把“異或”理解為:男歡女愛輸出為1,搞基都是沒有結果的(輸出為0)!
圖5-6 線性可分的“與、或、非”和線性不可分的“異或”
一個寄以厚望的感知機,居然連簡單的“異或”功能都實現不了,這點讓明斯基頗為失望。於是,在1969年,他和同事Papert合作寫下《感知機》一書[3],直接把“感知機”判了個n年有期徒刑(n在當時為不可知變量)。
這麼一說,好像明斯基是一位法官一樣。但其實呢,他更像《白雪公主》裏的那位繼母王後。這是因為就是他,給那個叫“人工智能”的“白雪公主”喂了一顆“毒蘋果”(《感知機》一書),讓這位“白雪公主”一睡就是20年(n=20)。
我們知道,絕大多數童話都有個“happy ending(完美結局)”,《白雪公主》也不例外。現在我們好奇的是,在人工智能領域,誰又是那位“吻醒”白雪公主的“王子”呢?
欲知後事如何,且聽我們下回分解。
5.6小結
在本小節,我們首先用西瓜和香蕉的判定案例,感性地談了談感知機的工作流程。然後,我們又給出了感知機的形式化學習規則以及感知機的表征能力。容易發現,感知機連常見的邏輯操作“異或”都難以實現,這一功能缺陷,直接讓人工智能領域大神明斯基抓住了“小辮子”,然後就把“人工智能”送進了長達二十年的“冬天”。
但英國浪漫主義詩人雪萊說了:“冬天來了,春天還會遠嗎?”
5.7 請你思考
學習完本小節,請你思考如下問題:
(1)你能參照感知機判定“西瓜”和“香蕉”的案例,訓練感知機完整布爾函數“與、或、非”等權值的學習嗎?請用編程語言實現。(提示:它山之石,可以攻玉。可以借助開源的神經網絡框架實現,如由Java語言編寫的Neuroph,下載鏈接:https://neuroph.sourceforge.net/)
(2)你知道最終感知機是如何解決“異或”問題的嗎?(提前劇透:增加神經網絡的層數,提升網絡數據特征的表達能力,網絡層次多了,這就是深度神經網絡啊!)
【參考文獻】
[1] 吳岸城. 神經網絡與深度學習.電子工業出版社.2016.6
[2] 周誌華.機器學習.清華大學出版社.2016.2
[3] Minsky M, Papert S. Perceptrons[J]. 1969.
文章作者:張玉宏(著有《品味大數據》一書),審校:我是主題曲哥哥。
(未完待續)
最後更新:2017-06-06 07:34:22