DNN的反向傳播

1. DNN反向傳播圖解

轉載自:https://www.cnblogs.com/MatrixPlayer/p/7661232.html

 

其實反向傳播算法從公式上來看,損失C對W的權重有兩部分,

1)激活函數Z對W的偏導數 \frac{\partial z}{\partial W}=a,此項其實就是前向傳播(a當前這個神經元的輸入)

2)C對激活函數Z的偏導數,此項就是反向傳播。

總結反向傳播的計算:

爲什麼權值矩陣在反向傳播是是乘以W的轉置?

數學推導部分

正向傳播:

反向傳播:求梯度

2. 整個神經網絡的公式推導

反向傳播需要用到鏈式法則,所以定義一箇中間變量\delta _i^{l+1}:

\delta _i^{l+1}=\frac{\partial L}{\partial z_i^{l+1}}

求單個神經元的梯度

根據鏈式求導法則,第 l 層的第 i 個神經元的梯度爲:

\delta _i^{l}=\frac{\partial L}{\partial z_i^{l}}

    =\sum_k^{N^{l+1}}\frac{\partial L}{\partial z_k^{l+1}}\cdot \frac{\partial z_k^{l+1}}{\partial z_i^{l}}

因爲正向傳播時,第l+1層的神經元(共N^{l+1}個)會接收第l層所有神經元的輸出值作爲輸入,所以反向傳播時

l層的每個神經元的梯度都有第l+1層的所有結點的梯度累積求和得到。

\delta _i^{l}=\frac{\partial L}{\partial z_i^{l}}

    =\sum_k^{N^{l+1}}\frac{\partial L}{\partial z_k^{l+1}}\cdot \frac{\partial z_k^{l+1}}{\partial z_i^{l}}=\sum_k^{N^{l+1}}\frac{\partial L}{\partial z_k^{l+1}}\cdot \frac{\partial z_k^{l+1}}{\partial a_i^{l}}\cdot \frac{\partial a_i^{l}}{\partial z_i^{l}}

   =\sum_{k=1}^{N^{l+1}}\delta_k^{l+1}\cdot W_{ki}^{l+1}\cdot f(z_i^l)

lN^l個神經元的反向傳播公式爲:

簡寫成矩陣乘法的形式爲:

\delta^l=(W^{l+1})^T\cdot \delta ^{l+1}\bigodot f'(z^l),其中\bigodot表示向量的對應元素相乘(點乘)

求權重W的梯度

l層權重矩陣W^l中某個權重W_{ij}^l 的梯度:

\frac{\partial L}{\partial W_{ij}^l}=\frac{\partial L}{\partial z_i^l}\cdot \frac{\partial z_i^l}{\partial W_{ij}^l}=\delta_i^l\cdot a_j^{l-1}

寫成矩陣的形式爲:

簡寫爲:

\frac{\partial L}{\partial W^l}=\delta^l\cdot (a^{l-1})^T

對偏置b的梯度

\frac{\partial L}{\partial b_i^l}=\frac{\partial L}{\partial z_i^l}\cdot \frac{\partial z_i^l}{\partial b_i^l}=\delta_i^l\cdot 1

寫成矩陣形式:

簡寫爲:

\frac{\partial L}{\partial b_i^l}=\delta_i^l

 

論nn.Conv2d中的反向傳播實現過程:https://blog.csdn.net/g11d111/article/details/83021651

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