神經網路
關於感知機,既有好訊息,也有壞訊息。好訊息是,即便對於複雜的函式,感知機也隱含著能夠表示它的可能性。壞訊息是,設定權重的工作,即確定合適的、能符合預期的輸入與輸出的權重,現在還是由人工進行的。上一章中,我們結合與門、或門的真值表人工決定了合適的權重。
神經網路的出現就是為了解決剛才的壞訊息。具體地講,神經網路的乙個重要性質是它可以自動地從資料中學習到合適的權重引數。本章中,我們會先介紹神經網路的概要,然後重點關注神經網路進行識別時的處理。在下一章中,我們將了解如何從資料中學習權重引數。
3.1 從感知機到神經網路
神經網路和上一章介紹的感知機有很多共同點。這裡,我們主要以兩者的差異為中心,來介紹神經網路的結構。
神經網路的例子
用圖來表示神經網路的話,如下圖所示。我們把最左邊的一列稱為輸入層,最右邊的一列稱為輸出層,中間的一列稱為中間層。中間層有時也稱為隱藏層。「隱藏」一詞的意思是,隱藏層的神經元(和輸入層、輸出層不同)肉眼看不見。另外,本書中把輸入層到輸出層依次稱為第0層、第1層、第2層(層號之所以從0開始,是為了方便後面基於python進行實現)。下圖中,第0層對應輸入層,第1層對應中間層,第2層對應輸出層。
上圖中的網路一共由 3 層神經元構成,但實質上只有 2 層神經元有權重,因此將其稱為「2層網路」。請注意,有的書也會根據構成網路的層數,把上圖的網路稱為「3層網路」。本書將根據實質上擁有權重的層數(輸入層、隱藏層、輸出層的總數減去 1後的數量)來表示網路的名稱。
只看上圖的話,神經網路的形狀類似上一章的感知機。實際上,就神經元的連線方式而言,與上一章的感知機並沒有任何差異。那麼,神經網路中訊號是如何傳遞的呢?
複習感知機
在觀察神經網路中訊號的傳遞方法之前,我們先複習一下感知機。網路結構:
圖3-2中的感知機接收x1和x2兩個輸入訊號,輸出y。如果用數學式來表示圖3-2中的感知機,則如式(3.1)所示。
b是被稱為偏置的引數,用於控制神經元被啟用的容易程度;而w1和w2是表示各個訊號的權重的引數,用於控制各個訊號的重要性。
在圖3-2的網路中,偏置b並沒有被畫出來。圖3-3中新增了權重為b的輸入訊號1。這個感知機將x1、 x2、 1三個訊號作為神經元的輸入,將其和各自的權重相乘後,傳送至下乙個神經元。在下乙個神經元中,計算這些加權訊號的總和。如果這個總和超過0,則輸出1,否則輸出0。另外,由於偏置的輸入訊號一直是1,所以為了區別於其他神經元,我們在圖中把這個神經元整個塗成灰色。
現在將式(3.1)改寫成更加簡潔的形式。為了簡化式(3.1),我們用乙個函式來表示這種分情況的動作(超過0則輸出1,否則輸出0)。引入新函式h(x),將式(3.1)改寫成下面的式(3.2)和式(3.3).
式(3.2)中,輸入訊號的總和會被函式h(x)轉換,轉換後的值就是輸出y。然後,式(3.3)所表示的函式h(x),在輸入超過0時返回1,否則返回0。因此,式(3.1)和式(3.2)、式(3.3)做的是相同的事情。
啟用函式登場
剛才登場的h(x)函式會將輸入訊號的總和轉換為輸出訊號,這種函式一般稱為啟用函式(activation function)。如「啟用」一詞所示,啟用函式的作用在於決定如何來啟用輸入訊號的總和。
現在來進一步改寫式(3.2)。式(3.2)分兩個階段進行處理,先計算輸入訊號的加權總和,然後用啟用函式轉換這一總和。因此,如果將式(3.2)寫得詳細一點,則可以分成下面兩個式子。
首先,式(3.4)計算加權輸入訊號和偏置的總和,記為a。然後,式(3.5)用h()函式將a轉換為輸出y。
之前的神經元都是用乙個○表示的,如果要在圖中明確表示出式(3.4)和式(3.5),則可以像圖3-4這樣做。
如圖3-4所示,表示神經元的○中明確顯示了啟用函式的計算過程,即訊號的加權總和為節點a,然後節點a被啟用函式h()轉換成節點y。本書中,「神經元」和「節點」兩個術語的含義相同。這裡,我們稱a和y為「節點」,其實它和之前所說的「神經元」含義相同。
通常如圖3-5的左圖所示,神經元用乙個○表示。本書中,在可以明確神經網路的動作的情況下,將在圖中明確顯示啟用函式的計算過程,如圖3-5的右圖所示。
啟用函式是連線感知機和神經網路的橋梁。
本書在使用「感知機」一詞時,沒有嚴格統一它所指的演算法。一般而言,「樸素感知機」是指單層網路,指的是啟用函式使用了階躍函式 a 的模型。「多層感知機」是指神經網路,即使用sigmoid 函式(後述)等平滑的啟用函式的多層網路。
啟用函式
式(3.3)表示的啟用函式以閾值為界,一旦輸入超過閾值,就切換輸出。這樣的函式稱為「階躍函式」。因此,可以說感知機中使用了階躍函式作為啟用函式。實際上,如果將啟用函式從階躍函式換成其他函式,就可以進入神經網路的世界了。下面我們就來介紹一下神經網路使用的啟用函式。
sigmoid函式
神經網路中經常使用的乙個啟用函式就是式(3.6)表示的sigmoid函式(sigmoid function)。
式(3.6)中的exp(−x)表示e−x的意思。 e是納皮爾常數2.7182 . . .。式(3.6)表示的sigmoid函式看上去有些複雜,但它也僅僅是個函式而已。而函式就是給定某個輸入後,會返回某個輸出的轉換器。比如,向sigmoid函式輸入1.0或2.0後,就會有某個值被輸出,類似h(1.0) = 0.731 . . .、 h(2.0) = 0.880 . . .這樣。
神經網路中用sigmoid函式作為啟用函式,進行訊號的轉換,轉換後的訊號被傳送給下乙個神經元。實際上,上一章介紹的感知機和接下來要介紹的神經網路的主要區別就在於這個啟用函式。其他方面,比如神經元的多層連線的構造、訊號的傳遞方法等,基本上和感知機是一樣的。下面,讓我們通過和階躍函式的比較來詳細學習作為啟用函式的sigmoid函式。
階躍函式的實現
這裡我們試著用python畫出階躍函式的圖(從視覺上確認函式的形狀對理解函式而言很重要)。階躍函式如式(3.3)所示,當輸入超過0時,輸出1,否則輸出0。可以像下面這樣簡單地實現階躍函式。
def step_function(x):
if x > 0:
return 1
else:
return 0
這個實現簡單、易於理解,但是引數 x只能接受實數(浮點數)。也就是說,允許形如 step_function(3.0)的呼叫,但不允許引數取numpy陣列,例如 step_function(np.array([1.0, 2.0]))。為了便於後面的操作,我們把它修改為支援numpy陣列的實現。為此,可以考慮下述實現。
def step_function(x):
y = x > 0
return y.astype(np.int)
神經網路學習之 Hopfield神經網路
1982年,美國加州理工學院的優秀物理學家hopfield提出了hopfield神經網路。hopfield神經網路引用了物理力學的分析方法,把網路作為一種動態系統並研究這種網路動態系統的穩定性。dhnn 離散型hopfield神經網路 這是一種單層全反饋網路,共有n個神經元。其特點是任一神經元的輸出...
神經網路學習
深度學習入門部落格 cnn 卷積神經網路 rnn 迴圈神經網路 dnn 深度神經網路 概念區分理解 deep learning 的概念源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現資料的分布式特徵表示。深度學習是...
神經網路學習
1 神經元模型 神經網路最廣泛的定義 神經網路是由具有適應性的簡單單元組成的廣泛並行互聯的網路,他的組織能夠模擬生物神經系統對真實世界物體所作出的互動反應。神經網路中最基本的成分是神經元模型,即上述定義中的 簡單單元 在生物神經網路中,神經元之間相連,當某乙個 興奮 時,就會向相連的神經元傳送化學物...