簡單易懂的講解深度學習(五)
5.1 網之初,感知機
我們知道,《三字經》裡開篇第一句就是:“人之初,性本善”。那麼對於神經網路來說,這句話就要改為:“網之初,感知機”。感知機( Perceptrons ),基本上來說,是一切神經網路學習的起點。
很多有關神經網路學習(包括深度學習)的教程,在提及感知機時,都知道繞不過,但也僅僅一帶而過。學過程式設計的同學都知道,不論是哪門什麼語言,那個神一般存在的第一個程式——“Hello World”,對初學者有多麼重要,可以說,它就是很多人“光榮與夢想”開始的地方。
而感知機學習,就是神經網路學習的“Hello World”,所以對於初學者來說,也值得我們細細玩味。因此,下面我們就給予詳細講解。
5.2 感性認識“感知機”
在第3小節中,我們已經提到,所謂的感知機,其實就是一個由兩層神經元構成的網路結構,它在輸入層接收外界的輸入,通過啟用函式(含閾值)的變換,把訊號傳送至輸出層,因此它也稱之為“閾值邏輯單元(threshold logic unit)”。
麻雀雖小,五臟俱全。感知機雖然簡單,但已初具神經網路的必備要素。在前面我們也提到,所有“有監督”的學習,在某種程度上,都是分類(classification)學習演算法。而感知機就是有監督的學習,所以,它也是一種分類演算法。下面我們就列舉一個區分“西瓜和香蕉”的經典案例,來看看感知機是如何工作的。
為了簡單起見,我們就假設西瓜和香蕉都僅有兩個特徵(feature):形狀和顏色,其它特徵暫不考慮。這兩個特徵都是基於視覺刺激而得到的。
圖5-1 感知機學習演算法
假設特徵 x 1 代表輸入顏色,特徵 x 2 代表形狀,權重 w 1 和 w 2 預設值都為1,為了進一步簡化,我們把閾值 θ (亦有教程稱之為偏值——bias)設定為0。為了標識方便,我們將感知器輸出為“1”,代表判定為“西瓜”,而輸出為“0”,代表判定為“香蕉”。當然了,如果有更多類別的物品,我們就用更多的數字來標記即可。
為了方便機器計算,我們對顏色和形狀這兩個特徵,給予不同的值,以示區別。比如,顏色這個特徵為綠色時, x 1 取值為1,而當顏色為黃色時, x 1 取值為-1;類似地,如果形狀這個特徵為圓形, x 2 取值為1,反之,形狀為彎曲狀時, x 2 取值為-1,如表5-1所示。
表 5-1 西瓜與香蕉的特徵表
品類 顏色 (x1) 形狀(x2)
西瓜 1(綠色) 1(圓形)
香蕉 -1(黃色) -1(彎形)
這樣一來,可以很容易依據圖5-1所示的公式,對於西瓜、香蕉做鑑定(即輸出函式 f 的值),其結果分別如圖5-2(a)所示:
(b) “圓滑”啟用函式按需輸出
圖5-2 感知器的輸出
從圖5-2(a)所示的輸出可以看到,對西瓜的判定輸出結果是2,而香蕉的為-2。而我們先前預定的規則是:函式輸出為1,則判定為西瓜,輸出為0,則判定為香蕉,那麼如何將2或-2這樣的分類結果,變換成預期的分類表達呢,這個時候,就需要啟用函式上場了!
這裡,我們使用了最為簡單的階躍函式(step function)。在階躍函式中,輸出規則非常簡單:當 x >0 時, f ( x )輸出為1,否則輸出0。通過啟用函式的“潤滑”之後,結果就變成我們想要的樣子(如圖5-2-b所示)。就這樣,我們就搞定了西瓜和香蕉的判定。
這裡需要說明的是,物件的不同特徵(比如水果的顏色或形狀等),只要用不同數值區分表示開來即可,具體用什麼樣的值,其實並無大礙。
但你或許會疑惑,這裡的閾值(threshold) θ 和兩個連線權值 w 1 和 w 2 ,為啥就這麼巧分別就是0、1、1呢?如果取其它數值,會有不同的判定結果嗎?
這是個好問題。事實上,我們並不能一開始就知道這幾個引數的取值,而是一點點地非常苦逼地“折騰試錯 ”(Try-Error)出來的,而這裡的“折騰試錯”其實就是感知機的學習過程!
下面,我們就聊聊最簡單的神經網路——感知機它是如何學習的?
5.3 感知機是如何學習的?
中國有句古話:“知錯能改,善莫大焉。”說得就是“犯了錯誤而能改正,沒有比這更好的事了”。
放到機器學習領域,這句話顯然屬於“監督學習”的範疇。因為“知錯”,就表明它事先已有了事物的評判標準,如果你的行為不符合(或說偏離)這些標準,那麼就要根據“偏離的程度”,來“改善”自己的行為。
下面,我們就根據這個思想,來制定感知機的學習規則。從前面討論中我們已經知道,感知機學習屬於“有監督學習”(即分類演算法)。感知機是有明確的目的導向的,這有點類似於“不管白貓黑貓,抓住老鼠就是好貓”,不管是什麼樣的學習規則,能達到良好的分類目的,就是好學習規則。
我們知道,物件本身的特徵值,一旦確定下來就不會變化。因此,所謂神經網路的學習規則,就是調整權值和閾值的規則(這個結論對於深度學習而言,依然是適用的)。
假設我們的規則是這樣的:
其中 ep = y - y’ , y 為期望輸出, y’ 是實際輸出,所以,具體說來, ep 是二者的差值。在後面,讀者朋友可以看到,這個“落差”就是整個網路中權值和閾值的調整動力。因為,很顯然,如果 ep 為0,那麼新、舊權值和閾值都是一樣的,網路就穩定可用了!
下面,我們就用上面的學習規則來模擬感知機的學習過程。假設 w 1 和 w 2 初始值分別為1和-1(注意:已經不再是1和1了!),閾值 θ 依然為0(事實上為其它初值,也是可行的),那麼我們遵循如下步驟,即可完成判定西瓜的學習:
(1)計算判定西瓜的輸出值 f :
將這個輸出值帶入如圖5-2-b所示的階躍函式中,可得 y=0 。
(2)顯然,針對西瓜,我們期望輸出的正確判定是: y =1,而現在實際輸出的值 y’=0 ,也就是說,實際輸出有誤。這個時候,就需要糾偏。而糾偏,就需要利用公式(5.1)所示的學習規則。於是,我們需要計算出來誤差 ep 來。
(3)計算誤差 ep :
Line"/>
現在,我們把 ep 的值帶入公式( 5.1 )所示的規則中,更新網路的權值和閾值,即:
(3)那麼,在新一輪的網路引數(即權值、閾值)重新學習獲得後,我們再次輸入西瓜的屬性值,來測試一下,看看它能否正確判定:
再經過啟用函式(階躍函式)處理後,輸出結果 y =1,很高興,判定正確!
(4)我們知道,一個物件的類別判定正確,不算好,“大家好,才算真的好!”於是,在判定西瓜正確後,我們還要嘗試在這樣的網路引數下,看看香蕉的判定是否也是正確的:
類似地,經過啟用函式(階躍函式)處理後,輸出結果 y =0,判定也正確的!BINGO!誤差 ep 為0,打完收工,學習結束!
在這個案例裡,僅僅經過一輪的“試錯法(trial-by-error)”,我們就搞定了引數的訓練,但你可別高興太早,誰叫這是一個“Hello World”版本的神經網路呢!事實上,在有監督的學習規則中,我們需要根據輸出與期望值的“落差”,經過多輪重試,反覆調整神經網路的權值,直至這個“落差”收斂到能夠忍受的範圍之內,訓練才告結束。
在上面,我們僅僅給出了感知機學習的一個感性例子,下面我們要給出感知機學習的形式化的描述。
5.4 感知機的訓練法則
通過前面的分析,我們可以看到,感知機是很容易實現邏輯上的“與(AND)”、“或(OR)”、“非(NOT)”等原子布林函式(Primitive Boolean function),如圖5-3所示(睿智如你,你肯定發現了,這裡的確沒有“異或”,這個坑回頭我們在後面再填上)。
圖5-3 感知機實現邏輯運算
下面舉例說明。首先,我們注意到,假設 f 是如圖5-3所示的階躍函式,通過合適的權值和閾值,即可完成常見的邏輯運算(既然是邏輯運算, x 1 和 x 2 都只能取值為0或1),例如:
(1)“與( x 1 ∧ x 2 )”:當權值 w 1 =w 2 =1,閾值 θ =2時,有:
此時,僅當 x 1 = x 2 =1時, y =1,而在其它情況下(如 x 1 和 x 2 無論哪一個取0), y =0。這樣,我們在感知機中,就完成了邏輯“與”的運算。
(2)類似地,“或( x 1 ∨ x 2 )”:當 w 1 =w 2 =1,閾值 θ =0.5時,有:
此時,當 x 1 或 x 2 中有一個為“1”時,那麼 y =1,而在其它情況下(即 x 1 和 x 2 均都取“0”), y =0。這樣,我們就完成了邏輯“或”的運算。
(3)在類似地,“非( ┐ x 1 )”:當 w 1 =0.6, w 2 =,0,閾值 θ =0.5時,有:
此時,當 x 1 為“1”時, y =0,當 x 1 為“0”時, y =1。這樣,就完成了邏輯“非”的運算(當然,如果以 x 2 做“非”運算,也是類似操作,這裡不再贅述)。
更一般地,當我們給定訓練資料,神經網路中的引數(權值 w i 和閾值 θ )都可以通過不斷地“糾偏”學習得到。為了方便起見,我們把閾值 θ 視為 w 0 ,而其權值設為固定值“-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),就是當且僅當輸入值 x 1 和 x 2 不相等,則輸出為1。反之,輸出為0。你可以監督粗暴地把“異或”理解為:男歡女愛輸出為1,搞基都是沒有結果的(輸出為0)!
圖5-6 線性可分的“與、或、非”和線性不可分的“異或”
一個寄以厚望的感知機,居然連簡單的“異或”功能都實現不了,這點讓明斯基頗為失望。於是,在1969年,他和同事Papert合作寫下《感知機》一書[3],直接把“感知機”判了個 n 年有期徒刑( n 在當時為不可知變數)。
這麼一說,好像明斯基是一位法官一樣。但其實呢,他更像《白雪公主》裡的那位繼母王后。這是因為就是他,給那個叫“人工智慧”的“白雪公主”餵了一顆“毒蘋果”(《感知機》一書),讓這位“白雪公主”一睡就是20年( n =20)。
我們知道,絕大多數童話都有個“happy ending(完美結局)”,《白雪公主》也不例外。現在我們好奇的是,在人工智慧領域,誰又是那位“吻醒”白雪公主的“王子”呢?
欲知後事如何,且聽我們下回分解。
5.6小結
在本小節,我們首先用西瓜和香蕉的判定案例,感性地談了談感知機的工作流程。然後,我們又給出了感知機的形式化學習規則以及感知機的表徵能力。容易發現,感知機連常見的邏輯操作“異或”都難以實現,這一功能缺陷,直接讓人工智慧領域大神明斯基抓住了“小辮子”,然後就把“人工智慧”送進了長達二十年的“冬天”。
但英國浪漫主義詩人雪萊說了:“冬天來了,春天還會遠嗎?
如果想加入我們“ 計算機視覺戰隊 ”,請掃二維碼加入學習群,我們一起學習進步,探索領域中更深奧更有趣的知識!