3.10 直观理解反向传播-深度学习-Stanford吴恩达教授
| 3.9 神經網絡的梯度下降法 | 回到目錄 | 3.11 隨機初始化 |
直觀理解反向傳播 (Backpropagation Intuition (Optional))
這個視頻主要是推導反向傳播。
下圖是邏輯回歸的推導:
回想一下邏輯回歸的公式(參考公式3.2、公式3.5、公式3.6、公式3.15)
xwb}?z=wT+b?a=σ(z)?L(a,y)(3.38)\left.\begin{matrix} x\\w\\b \end{matrix}\right\}\Rightarrow z=w^T+b\Rightarrow a=\sigma(z)\Rightarrow L(a,y) \tag{3.38}xwb??????z=wT+b?a=σ(z)?L(a,y)(3.38)
所以回想當時我們討論邏輯回歸的時候,我們有這個正向傳播步驟,其中我們計算 zzz ,然后 aaa ,然后損失函數 LLL 。
xwb}?dw=dz?x,db=dz?z=wT+b?dz=da?g′(z),g(z)=σ(z),dLdz=dLda?dadz,ddzg(z)=g′(z)?a=σ(z)?L(a,y)?da=ddaL(a,y)=(?ylog?a?(1?y)log?(1?a))′=?ya+1?y1?a(3.39)\underbrace{\left.\begin{matrix} x\\w\\b \end{matrix}\right\}}_{dw=dz\cdot x,db=dz} \Leftarrow \underbrace{z=w^T+b}_{dz=da\cdot g^{'}(z),g(z)=\sigma(z),\frac{dL}{dz}=\frac{dL}{da}\cdot \frac{da}{dz},\fracze8trgl8bvbq{dz}g(z)=g^{'}(z)} \Leftarrow \underbrace{a=\sigma(z)\Leftarrow L(a,y)}_{da=\fracze8trgl8bvbq{da}L(a,y)=(-y\log a-(1-y)\log(1-a))^{'}=-\frac ya+\frac{1-y}{1-a}} \tag{3.39}dw=dz?x,db=dzxwb????????dz=da?g′(z),g(z)=σ(z),dzdL?=dadL??dzda?,dzd?g(z)=g′(z)z=wT+b???da=dad?L(a,y)=(?yloga?(1?y)log(1?a))′=?ay?+1?a1?y?a=σ(z)?L(a,y)??(3.39)
神經網絡的計算中,與邏輯回歸十分類似,但中間會有多層的計算。下圖是一個雙層神經網絡,有一個輸入層,一個隱藏層和一個輸出層。
前向傳播:
計算 z[1],a[1]z^{[1]},a^{[1]}z[1],a[1] ,再計算 z[2],a[2]z^{[2]},a^{[2]}z[2],a[2] ,最后得到loss function。
反向傳播:
向后推算出 da[2]da^{[2]}da[2] ,然后推算出 dz[2]dz^{[2]}dz[2] ,接著推算出 da[1]da^{[1]}da[1] ,然后推算出 dz[1]dz^{[1]}dz[1] 。我們不需要對 xxx 求導,因為 xxx 是固定的,我們也不是想優化 xxx 。向后推算出 da[2]da^{[2]}da[2] ,然后推算出 dz[2]dz^{[2]}dz[2] 的步驟可以合為一步:
dz[2]=a[2]?y,dW[2]=dz[2]a[1]T(3.40)dz^{[2]}=a^{[2]}-y,dW^{[2]}=dz^{[2]}a^{[1]T} \tag{3.40}dz[2]=a[2]?y,dW[2]=dz[2]a[1]T(3.40)
(注意:邏輯回歸中;為什么 a[1]Ta^{[1]T}a[1]T 多了個轉置: dwdwdw 中的 WWW (視頻里是 Wi[2]W^{[2]}_iWi[2]? )是一個列向量,而 W[2]W^{[2]}W[2] 是個行向量,故需要加個轉置);
db[2]=dz[2](3.41)db^{[2]}=dz^{[2]} \tag{3.41}db[2]=dz[2](3.41)
dz[1]=W[2]Tdz[2]?g[1]′(z[1])(3.41)dz^{[1]}=W^{[2]T}dz^{[2]}*g^{[1]'}(z^{[1]}) \tag{3.41}dz[1]=W[2]Tdz[2]?g[1]′(z[1])(3.41)
注意:這里的矩陣:W[2]W^{[2]}W[2] 的維度是: (n[2],n[1])(n^{[2]},n^{[1]})(n[2],n[1]) 。
z[2],dz[2]z^{[2]},dz^{[2]}z[2],dz[2] 的維度都是: (n[2],1)(n^{[2]},1)(n[2],1) ,如果是二分類,那維度就是 (1,1)(1,1)(1,1) 。
z[1],dz[1]z^{[1]},dz^{[1]}z[1],dz[1] 的維度都是: (n[1],1)(n^{[1]},1)(n[1],1) 。
證明過程: 見公式3.42,其中 W[2]Tdz[2]W^{[2]T}dz^{[2]}W[2]Tdz[2] 維度為: (n[1],n[2])、(n[2],1)(n^{[1]},n^{[2]})、(n^{[2]},1)(n[1],n[2])、(n[2],1) 相乘得到 (n[1],1)(n^{[1]},1)(n[1],1) ,和 z[1]z^{[1]}z[1] 維度相同,
g[1]′(z[1])g^{[1]'}(z^{[1]})g[1]′(z[1]) 的維度為 (n[1],1)(n^{[1]},1)(n[1],1) ,這就變成了兩個都是 (n[1],1)(n^{[1]},1)(n[1],1) 向量逐元素乘積。
實現后向傳播有個技巧,就是要保證矩陣的維度相互匹配。最后得到 dW[1]dW^{[1]}dW[1] 和 db[1]db^{[1]}db[1] ,
dW[1]=dz[1]xT,db[1]=dz[1](3.43)dW^{[1]}=dz^{[1]}x^T,db^{[1]}=dz^{[1]} \tag{3.43}dW[1]=dz[1]xT,db[1]=dz[1](3.43)
可以看出 dW[1]dW^{[1]}dW[1] 和 dW[2]dW^{[2]}dW[2] 非常相似,其中 xxx 扮演了 a[0]a^{[0]}a[0] 的角色, xTx^TxT 等同于 a[0]Ta^{[0]T}a[0]T 。
由: Z[1]=W[1]x+b[1],a[1]=g[1](Z[1])Z^{[1]}=W^{[1]}x+b^{[1]},a^{[1]}=g^{[1]}(Z^{[1]})Z[1]=W[1]x+b[1],a[1]=g[1](Z[1]) 得到:Z[1]=W[1]x+b[1],A[1]=g[1](Z[1])Z^{[1]}=W^{[1]}x+b^{[1]},A^{[1]}=g^{[1]}(Z^{[1]})Z[1]=W[1]x+b[1],A[1]=g[1](Z[1])
Z[1]=[????z[1](1)z[1](2)?z[1](m)????]Z^{[1]}=\left[\begin{matrix} \vdots & \vdots & \vdots & \vdots \\ z^{[1](1)} & z^{[1](2)} & \vdots & z^{[1](m)} \\ \vdots & \vdots & \vdots & \vdots \\ \end{matrix}\right]Z[1]=???????z[1](1)???z[1](2)???????z[1](m)????????
注意:大寫的 Z[1]Z^{[1]}Z[1] 表示 z[1](1),z[1](2),?,z[1](m)z^{[1](1)},z^{[1](2)},\cdots,z^{[1](m)}z[1](1),z[1](2),?,z[1](m) 的列向量堆疊成的矩陣,以下類同。
下圖寫了主要的推導過程:
dZ[2]=A[2]?Y(3.44)dZ^{[2]}=A^{[2]}-Y \tag{3.44}dZ[2]=A[2]?Y(3.44)dW[2]=1mdZ[2]A[1]T(3.45)dW^{[2]}=\frac1mdZ^{[2]}A^{[1]T} \tag{3.45}dW[2]=m1?dZ[2]A[1]T(3.45)db[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)(3.46)db^{[2]}=\frac1mnp.sum(dZ^{[2]},axis=1,keepdims=True) \tag{3.46}db[2]=m1?np.sum(dZ[2],axis=1,keepdims=True)(3.46)dZ[1]?(n[1],m)=W[2]TdZ[2]?(n[1],m)?g[1]′(Z[1])?(n[1],m)(3.47)\underbrace{dZ^{[1]}}_{(n^{[1]},m)}=\underbrace{W^{[2]T}dZ^{[2]}}_{(n^{[1]},m)}*\underbrace{g^{[1]'}(Z^{[1]})}_{(n^{[1]},m)} \tag{3.47}(n[1],m)dZ[1]??=(n[1],m)W[2]TdZ[2]???(n[1],m)g[1]′(Z[1])??(3.47)dW[1]=1mdZ[1]xT(3.48)dW^{[1]}=\frac1mdZ^{[1]}x^T \tag{3.48}dW[1]=m1?dZ[1]xT(3.48)db[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)(3.49)db^{[1]}=\frac1mnp.sum(dZ^{[1]},axis=1,keepdims=True) \tag{3.49}db[1]=m1?np.sum(dZ[1],axis=1,keepdims=True)(3.49)
吳恩達老師認為反向傳播的推導是機器學習領域最難的數學推導之一,矩陣的導數要用鏈式法則來求,如果這章內容掌握不了也沒大的關系,只要有這種直覺就可以了。還有一點,就是初始化你的神經網絡的權重,不要都是0,而是隨機初始化,下一章將詳細介紹原因。
課程PPT
| 3.9 神經網絡的梯度下降法 | 回到目錄 | 3.11 隨機初始化 |
總結
以上是生活随笔為你收集整理的3.10 直观理解反向传播-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.9 神经网络的梯度下降法-深度学习-
- 下一篇: 3.11 随机初始化-深度学习-Stan