【神經網絡和深度學習】吳恩達(Andrew Ng)- 第一課第四周課程內容總結

  在【神經網絡和深度學習】第四周的課程中,感覺有些內容比較容易忘記但是及其重要,於是由這篇文章來記錄相關內容。

一、深層神經網絡

1.1 何爲深層神經網絡

  擁有大於兩層隱藏層的神經網絡。(根據PPT得出的結論)

1.2 深層神經網絡符號規約

擁有四層隱藏層的神經網絡
  如圖,x1,x2,x3x_1, x_2, x_3爲輸入的特徵值,可以稱爲第0層或輸入層。從輸入層向右依次是第1層、第2層、第3層、第4層(也叫輸出層)。
  所以這個網絡是四層神經網絡(通常不包含輸入層),即:L(Layers)=4L (Layers) = 4

  • n[l]n^{[l]} 是第ll層的神經元個數。如:n[0]=3n^{[0]} =3n[1]=5n^{[1]} =5n[2]=5n^{[2]} =5n[3]=3n^{[3]} =3n[4]=1n^{[4]} =1
  • w[l]w^{[l]} 是第ll層的權重;
  • b[l]b^{[l]} 是第ll層的偏置值;
  • z[l]z^{[l]} 是第ll層的未被激活函數(激勵函數)激活的輸出的值;
  • g[l]g^{[l]} 是第ll層的激活函數(激勵函數);
  • a[l]a^{[l]} 是第ll層的激活函數(激勵函數)輸出的值,即:a[l]=g[l](z[l])a^{[l]} = g^{[l]}(z^{[l]}),注意:a[0]a^{[0]}x1x2x3x_1,x_2,x_3

二、深層神經網絡中的前向傳播

  在前向傳播中,首先我們要明確我們需要計算的量有:z[l]a[l]z^{[l]},a^{[l]}

2.1 前向傳播計算方法

在這裏插入圖片描述

  • z[1]=w[1]a[0]+b[1]z^{[1]}=w^{[1]}a^{[0]}+b^{[1]}
  • a[1]=g[1](z[1])a^{[1]}=g^{[1]}(z^{[1]})
  • z[2]=w[2]a[1]+b[2]z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}
  • a[2]=g[2](z[2])a^{[2]}=g^{[2]}(z^{[2]})
  • ……
  • a[4]=g[4](z[4])=y^a^{[4]}=g^{[4]}(z^{[4]})=\hat y

經過這樣的循環計算後,我們可以得到一組輸入的y^\hat y

通式(通式中大寫變量均爲向量,便於省去部分循環計算):

  • Z[l]=W[l]A[l1]+B[l]Z^{[l]}=W^{[l]}A^{[l-1]}+B^{[l]}
  • A[l]=g[l](Z[l])A^{[l]}=g^{[l]}(Z^{[l]})
  • Y^=A[4]\hat Y=A^{[4]}

三、覈對矩陣維數(可視爲debug方法)

  何對矩陣維數時關鍵的公式是Z[l]=W[l]X+B[l]Z^{[l]}=W^{[l]}X+B^{[l]}。如:

  • Z[1]=W[1]X+B[1]Z^{[1]}=W^{[1]}X+B^{[1]}
  • ZZ是每一層的激活函數的個數(神經元個數),Z[1].shape()=(3,1)Z^{[1]}.shape() =(3,1),也就是(n[1],1)=(3,1)(n^{[1]},1)=(3,1)
  • XX是輸入的特徵值個數,X[1].shape()=(2,1)X^{[1]}.shape()=(2,1),也就是(n[0],1)=(2,1)(n^{[0]},1)=(2,1)
  • 然後我們就可以根據矩陣乘法規則推算出W的規模,W[1]=(n[1],n[0])W^{[1]}=(n^{[1]}, n^{[0]})
    覈對矩陣維數
  • 所以我們可以得到:W[l]=(n[l],n[l1])W^{[l]}=(n^{[l]}, n^{[l-1]}),也就是(當前層的神經元維數,前一層的神經元維數)
  • 我們可以看到,W[l]XW^{[l]}X的維數爲(n[l],1)(n^{[l]},1),因此根據矩陣加法規則,推算出B[l]B^{[l]}的規模爲(n[l],1)(n^{[l]},1)
  • 在反向傳播中dw[l]dw^{[l]}W[l]W^{[l]}有着相同的規模,爲:(n[l],n[l1])(n^{[l]}, n^{[l-1]})db[l]db^{[l]}B[l]B^{[l]}有着相同的規模,爲:(n[l],1)(n^{[l]},1)
    可以得到前向傳播和後向傳播中傳播公式爲:
    在這裏插入圖片描述

四、深層神經網絡

4.1 每層神經網絡輸入及輸出

4.1.1 正向傳播

正向傳播

4.1.2 反向傳播

反向傳播

4.1.4 神經網絡ll層的前向傳播

  輸入:a[l1]a^{[l-1]}
  輸出:a[l]cache(z[l])a^{[l]},cache(z^{[l]})

注:由於Z[l]=W[l]a[l1]+b[l]Z^{[l]}=W^{[l]}*a^{[l-1]}+b^{[l]},因此輸出還有w[l]w^{[l]}b[l]b^{[l]}
a[l]=g[l](Z[l])a^{[l]} = g^{[l]}(Z^{[l]})

綜上向量化後:Z[l]=W[l]A[l1]+b[l]Z^{[l]}=W^{[l]}*A^{[l-1]}+b^{[l]}
A[l]=g[l](Z[l])A^{[l]}=g^{[l]}(Z^{[l]})

4.1.5 神經網絡ll層的後向傳播

  輸入:da[l]da^{[l]}
  輸出:da[l1]dw[l]db[l]da^{[l-1]},dw^{[l]},db^{[l]}

  • dz[l]=da[l]g[l](z[l])dz^{[l]}=da^{[l]}*g^{[l]}\\'(z^{[l]})
  • da[l]=w[l]Tdz[l]da^{[l]}=w^{[l]^T}*dz^{[l]},將da[l]da^{[l]}帶入上式得:dz[l]=w[l+1]Tdz[l+1]g[l](z[l])dz^{[l]}=w^{[l+1]^T}*dz^{[l+1]}*g^{[l]}\\'(z^{[l]})
  • dw[l]=dz[l]a[l1]dw^{[l]}=dz^{[l]}*a^{[l-1]}
  • db[l]=dz[l]db^{[l]}=dz^{[l]}
    綜上向量化後:
    dZ[l]=dA[l]g[l](Z[l])dZ^{[l]}=dA^{[l]}*g^{[l]}\\'(Z^{[l]})
    dW[l]=1mdZ[l]A[l1]TdW^{[l]}=\frac 1mdZ^{[l]}*A^{[l-1]^{T}}
    db[l]=1mnp.sum(dZ[l],axis=1,keepdims=true)db^{[l]}=\frac 1mnp.sum(dZ^{[l]},axis=1,keepdims=true)
    dA[l1]=W[l]TdZ[l]dA^{[l-1]}=W^{[l]^{T}}*dZ^{[l]}
4.1.3 小結

  神經網絡的一個梯度下降循環就是將正向傳播和反向傳播進行一次,計算出相關參數,然後使用w=wdww = w - dwb=bdbb = b - db梯度下降的方法來更新參數。

注:需要將Zb[l]w[l]Z,b^{[l]},w^{[l]}緩存下來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章