1. 神經網絡示例
用圖來表示神經網絡的話,如圖3-1 所示。我們把最左邊的一列稱爲輸入層,最右邊的一列稱爲輸出層,中間的一列稱爲中間層。中間層有時也稱爲隱藏層。“隱藏”一詞的意思是,隱藏層的神經元(和輸入層、輸出層不同)肉眼看不見。
注意:圖 3-1 中的網絡一共由 3 層神經元構成,但實質上只有 2 層神經元有權重,因此將其稱爲“2 層網絡”。請注意,有的書也會根據構成網絡的層數,把圖 3-1 的網絡稱爲“3 層網絡”。本書將根據實質上擁有權重的層數(輸入層、隱藏層、輸出層的總數減去 1 後的數量)來表示網絡的名稱。
2. 感知機進化
圖 3-2 中的感知機接收 x1
和 x2
兩個輸入信號,輸出 y
。如果用數學式來表示圖3-2 中的感知機,則如式(3.1)所示。
b
是被稱爲偏置的參數,用於控制神經元被激活的容易程度;w1
和w2
是表示各個信號的權重的參數,用於控制各個信號的重要性。
順便提一下,在圖3-2 的網絡中,偏置 b
並沒有被畫出來。如果要明確地表示出 b
,可以像圖3-3 那樣做。圖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)做的是相同的事情。
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
函數等平滑的激活函數的多層網絡。
參考:《深度學習入門:基於Python的理論與實現》