每當我們聽到 神經網路 的大名時,就會認為它裡面有許許多多的隱藏層,但其實還有一種只有少量隱藏層的神經網路,淺神經網路只包含一到兩層隱藏層。對淺神經網路的研究可以加強我們對深度神經網路內部執行機制的理解。
本文將介紹什麼是 淺神經網路以及它的數學原理 。下圖所示是一個只包含一個隱藏層、一個輸入層和一個輸出層的淺神經網路。
神經元
神經元 是神經網路中的原子單元。給定神經元一個輸入,它將得到對應的輸出,並將其作為下一層的輸入。一個神經元可以認為是以下兩部分的結合:
- 第一部分根據輸入和權重來計算得到Z 。
- 第二部分在Z上施加啟用函式得到神經元的最終輸出A。
隱藏層
隱藏層 由許多神經元組成,每一個都會執行上述兩步運算。在上圖的淺層神經網路中,隱藏層的四個神經元進行如下計算:
在上面的方程中:
- 下標i表示第i層,下標j表示該層的第j個神經元。
- X是包含3個特徵的輸入向量。
- W[i]j是第i層第j個神經元的權值。
- b[i]j 是第i層第j個神經元的偏置。
- Z[i]j 是第i層第j個神經元的中間輸出。
- A[i]j 第i層第j個神經元的最終輸出。
- Sigma 是sigmoid啟用函式。它的數學定義是:
顯而易見,上述四個方程比較冗長,因此我們把它們進行向量化:
- 第一個方程用一個矩陣乘法計算所有的中間輸出Z。
- 第二個方程用一個矩陣運算計算所有的啟用函式輸出A。
淺層神經網路
神經網路 通常由若干隱藏層構建。現在我們已經知道了某一層的計算方法,接下來學習如何在整個神經網路中根據給定輸入X計算輸出。以下這些方程也稱為前向傳播方程。
- 第一個方程計算第一個隱藏層的中間輸出Z[1]。
- 第二個方程計算第一個隱藏層的最終輸出A[1]。
- 第三個方程計算輸出層的中間輸出Z[2]。
- 第四個方程計算輸出層的最終輸出A[2],也就是整個神經網路的最終輸出。
啟用函式
我們知道,一個神經網路根本上來說就是一組數學方程和權重的集合。為了提高神經網路的魯棒性,從而在各種不同的場景下都能得到很好的效果,我們使用了啟用函式。這些啟用函式為神經網路引入了非線性特性。 接下來在淺層神經網路的基礎上理解啟用函式的重要性。
如果沒有啟用函式,我們的淺層神經網路可以被表示成:
將方程一中的Z[1]代入方程2得到如下方程:
顯而易見,輸出將是一個新權重矩陣W、輸入X和新偏置矩陣b線性組合,意味著隱藏層中的神經元及其權重都失去了意義。因此,我們需要用啟用函式為網路引入非線性特性。
權值初始化
神經網路的權重矩陣通常是 隨機初始化 的。那麼為什麼不能將它初始化為0或者其它什麼值呢?接下來透過我們的淺層神經網路來理解這個問題。
讓我們用0或者其它值來初始化第一層的權重矩陣W1,和第二層的權重矩陣W2。現在,如果權重矩陣保持不變,那麼隱藏層中神經元的啟用函式也相同,啟用函式的導數也相同。因此,該隱藏層中的各個神經元的權值將被修改為類似的值,從而某一隱藏層無需再包含多於一個神經元。然而這並非我們想要的。相反,我們希望隱藏層中的每一個神經元都獨一無二,擁有不同的權重並且作為一個獨立的方程來運算。因此,我們需要隨機初始化權值。
最好的初始化方法是Xavier初始化。它的數學定義是:
方程表明,第l層的權重矩陣W的值由正態分佈生成,其中均值μ= 0、方差sigma² 是第l-1層神經元數量的倒數。所有層的偏置b均初始化為0.
梯度下降
神經網路的權重是隨機初始化的。為了用神經網路進行正確預測,我們需要更新這些權值,用於更新權值的方法稱之為 梯度下降 。以下透過計算圖來進行理解。
上圖中,前向傳播(黑線所示)用於根據給定輸入X計算輸出。反向傳播(紅線所示)對計算圖中每一步的輸入計算其導數,從而更新權重矩陣W[1]、W[2]和偏置b[1]、b[2]。損失函式L定義如下:
根據上式所示損失函式L,隱藏層和輸出層採用sigmoid啟用函式,利用導數的鏈式法則可以計算出:
上面的方程可能看起來有點迷惑,但是它們在梯度下降中應用非常好。在計算dZ[1]的方程中,*表示點積,σ’ 表示sigma的導數。
“我強烈建議懂微積分的讀者親自計算一下上述方程,從而對於梯度下降的執行方式有一個更好的理解。”
在本文中,我們學習了淺層神經網路的數學原理。儘管我已經儘可能詳細的解釋了其中的所有內容,如果你感覺欠缺某些知識我們可以私聊。