在【神經網絡和深度學習】第四周的課程中,感覺有些內容比較容易忘記但是及其重要,於是由這篇文章來記錄相關內容。
一、深層神經網絡
1.1 何爲深層神經網絡
擁有大於兩層隱藏層的神經網絡。(根據PPT得出的結論)
1.2 深層神經網絡符號規約
如圖,x1,x2,x3爲輸入的特徵值,可以稱爲第0層或輸入層。從輸入層向右依次是第1層、第2層、第3層、第4層(也叫輸出層)。
所以這個網絡是四層神經網絡(通常不包含輸入層),即:L(Layers)=4。
- n[l] 是第l層的神經元個數。如:n[0]=3,n[1]=5,n[2]=5,n[3]=3,n[4]=1;
- w[l] 是第l層的權重;
- b[l] 是第l層的偏置值;
- z[l] 是第l層的未被激活函數(激勵函數)激活的輸出的值;
- g[l] 是第l層的激活函數(激勵函數);
- a[l] 是第l層的激活函數(激勵函數)輸出的值,即:a[l]=g[l](z[l]),注意:a[0]爲x1,x2,x3。
二、深層神經網絡中的前向傳播
在前向傳播中,首先我們要明確我們需要計算的量有:z[l],a[l]。
2.1 前向傳播計算方法
- z[1]=w[1]a[0]+b[1]
- a[1]=g[1](z[1])
- z[2]=w[2]a[1]+b[2]
- a[2]=g[2](z[2])
- ……
- a[4]=g[4](z[4])=y^
經過這樣的循環計算後,我們可以得到一組輸入的y^。
通式(通式中大寫變量均爲向量,便於省去部分循環計算):
- Z[l]=W[l]A[l−1]+B[l]
- A[l]=g[l](Z[l])
- Y^=A[4]
三、覈對矩陣維數(可視爲debug方法)
何對矩陣維數時關鍵的公式是Z[l]=W[l]X+B[l]。如:
- Z[1]=W[1]X+B[1]
- Z是每一層的激活函數的個數(神經元個數),Z[1].shape()=(3,1),也就是(n[1],1)=(3,1)
- X是輸入的特徵值個數,X[1].shape()=(2,1),也就是(n[0],1)=(2,1)
- 然後我們就可以根據矩陣乘法規則推算出W的規模,W[1]=(n[1],n[0])
- 所以我們可以得到:W[l]=(n[l],n[l−1]),也就是(當前層的神經元維數,前一層的神經元維數)
- 我們可以看到,W[l]X的維數爲(n[l],1),因此根據矩陣加法規則,推算出B[l]的規模爲(n[l],1)
- 在反向傳播中dw[l]和W[l]有着相同的規模,爲:(n[l],n[l−1]);db[l]與B[l]有着相同的規模,爲:(n[l],1)。
可以得到前向傳播和後向傳播中傳播公式爲:
四、深層神經網絡
4.1 每層神經網絡輸入及輸出
4.1.1 正向傳播
4.1.2 反向傳播
4.1.4 神經網絡l層的前向傳播
輸入:a[l−1]
輸出:a[l],cache(z[l])
注:由於Z[l]=W[l]∗a[l−1]+b[l],因此輸出還有w[l]和b[l]。
a[l]=g[l](Z[l])
綜上向量化後:Z[l]=W[l]∗A[l−1]+b[l]
A[l]=g[l](Z[l])
4.1.5 神經網絡l層的後向傳播
輸入:da[l]
輸出:da[l−1],dw[l],db[l]
- dz[l]=da[l]∗g[l]′(z[l])
- da[l]=w[l]T∗dz[l],將da[l]帶入上式得:dz[l]=w[l+1]T∗dz[l+1]∗g[l]′(z[l])
- dw[l]=dz[l]∗a[l−1]
- db[l]=dz[l]
綜上向量化後:
dZ[l]=dA[l]∗g[l]′(Z[l])
dW[l]=m1dZ[l]∗A[l−1]T
db[l]=m1np.sum(dZ[l],axis=1,keepdims=true)
dA[l−1]=W[l]T∗dZ[l]
4.1.3 小結
神經網絡的一個梯度下降循環就是將正向傳播和反向傳播進行一次,計算出相關參數,然後使用w=w−dw、b=b−db梯度下降的方法來更新參數。
注:需要將Z,b[l],w[l]緩存下來。