1. 程式人生 > 其它 >深層神經網路(Deep L-layer neural network)--(前向傳播和反向傳播(Forward and backward propagation))

深層神經網路(Deep L-layer neural network)--(前向傳播和反向傳播(Forward and backward propagation))

1 深層神經網路

1.1 深層神經網路(Deep L-layer neural network

嚴格上來說邏輯迴歸也是一個一層的神經網路,有一個隱藏層的神經網路,就是一個兩層神經網路當我們算神經網路的層數時,我們不算輸入層,我們只算隱藏層和輸出層

上圖是一個四層的神經網路,有三個隱藏層我們可以看到,第一層(即左邊數過去第二層,因為輸入層是第 0 層)有 5 個神經元數目,第二層 5 個,第三層 3 個。我們用 L 表示層數,上圖:L= 4,輸入層的索引為“0”,第一個隱藏層n[1] = 5,表示有 5個隱藏神經元,同理n[2]= 5n[3] = 3n[4]=n[L] = 1(輸出單元為

1,而輸入層,n[0] =nx= 3。在不同層所擁有的神經元的數目,對於每層 l 都用a[l]來記作 l 層啟用後結果,我們會在後面看到在正向傳播時,最終能你會計算出a[l]。通過用啟用函式 g計算z[l],啟用函式也被索引為層數l,然後我們用w[l]來記作在 l 層計算z[l]值的權重。類似的,z[l]裡的方程b[l]也一樣。輸入的特徵記作x,但是x同樣也是 0 層的啟用函式,所以x= a[0]最後一層的啟用函式,所以a[L]是等於這個神經網路所預測的輸出結果。

1.2 前向傳播和反向傳播(Forward and backward propagation

前向傳播,輸入a[l−1],輸出是a

[l],快取為z[l];從實現的角度來說我們可以快取下w[l]b[l],這樣更容易在不同的環節中呼叫函式。

前向傳播的步驟可以寫成:

向量化實現過程可以寫成:

前向傳播需要喂入A[0]也就是X,來初始化;初始化的是第一層的輸入值,a[0]對應於一個訓練樣本的輸入特徵,而A[0]對應於一整個訓練樣本的輸入特徵,所以這就是這條鏈的第一個前向函式的輸入,重複這個步驟就可以從左到右計算前向傳播。

反向傳播的步驟:輸入為da[l],輸出為da[l1]dw[l], db[l]

反向傳播的步驟可以寫成:

向量化實現過程可以寫成:

1.3 深層網路中的前向傳播(Forward propagation in a Deep Network

前向傳播可以歸納為多次迭代:

向量化實現過程可以寫成:

1.4 核對矩陣的維數(Getting your matrix dimensions right

w的維度是(下一層的維數,前一層的維數):

b的維度是(下一層的維數,1:

dw[l]w[l]維度相同,db[l]b[l]維度相同,且wb向量化維度不變,但z,a以及x的維度會向量化後發生變化。

向量化後:Z[l]可以看成由每一個單獨的Z[l]疊加而得到,Z[l] = (z[l][1]z[l][2]z[l][3],…,z[l][m])m為訓練集大小,所以Z[l]的維度不再是(n[l], 1),而是(n[l], m)

A[l](n[l], m)A[0] = X= (n[l], m)

1.5 為什麼使用深層表示?(Why deep representations?

如果你在建一個人臉識別或是人臉檢測系統,深度神經網路所做的事就是,當你輸入一張臉部的照片,然後你可以把深度神經網路的第一層,當成一個特徵探測器或者邊緣探測器,隱藏單元就是這些圖裡這些小方塊,可以先把神經網路的第一層當作看圖,然後去找這張照片的各個邊緣。我們可以把照片裡組成邊緣的畫素們放在一起看,然後它可以把被探測到的邊緣組合成面部的不同部分,比如說,可能有一個神經元會去找眼睛的部分,另外還有別的在找鼻子的部分,然後把這許多的邊緣結合在一起,就可以開始檢測人臉的不同部分。所以深度神經網路的這許多隱藏層中,較早的前幾層能學習一些低層次的簡單特徵,等到後幾層,就能把簡單的特徵結合起來,去探測更加複雜的東西。

本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15057987.html