1. 程式人生 > >反向傳播的推導

反向傳播的推導

矩陣 差分 part 誤差 img 網絡 line 函數 bubuko

推導過程

技術分享圖片

如圖中所示我們規定\(W_{ij}^k\)表示第k層與第k+1層之間神經元的權重值,\(z^k\)表示對應輸入第k層的值,\(o^k\)表示對應第k層輸出的值

定義損失函數為:

$l = \frac{1}{2}(y-\widehat{y})^2$($y$表示預期輸出)

比如圖中第2層和第3層誤差分配如下:

$ l_{23} =\begin{equation}\left(\begin{array}{ccc} w_{11}&w_{12}\\w_{21}&w_{22}\\w_{31}&w_{32}\\w_{41}&w_{42} \end{array}\right)\left(\begin{array}{ccc}l_1\\l_2 \end{array}\right)\end{equation}$(省去$w$的上角標)

我們可以發現:此處的權重矩陣就是前向傳播的時候第2層所乘的矩陣的轉置矩陣,也就是\((w^k)^T\)

引出記號

$\frac{\partial L}{\partial W^k}$(表示損失函數的值是如何根據權重矩陣變化的)

損失函數改寫為:

$L = \sum_{i=1}^{n}\frac{1}{2}(y-\widehat{y})^2$

暫時把\(\sum\)忽略可得:

$\frac{\partial L}{\partial W^k}=\frac{\partial }{\partial W^k}\frac{1}{2}(y-\widehat{y})^2$

又根據鏈式法則

$\frac{\partial L}{\partial W^k}=\frac{\partial L}{\partial \widehat{y}}·\frac{\partial \widehat{y}}{\partial z^{k+1}}·\frac{\partial z^{k+1}}{\partial W^k}$($y_i$為激活函數)

如果取激活函數為sigmoid函數可得其導函數為:

$\sigma(x) = \frac{1}{1+e^{-x}}$ $\sigma‘(x) = \sigma(x)(1-\sigma(x))$

進一步改寫得:

$\frac{\partial L}{\partial W^k}=-(y-\widehat{y})·\frac{\partial }{\partial W^k}\sigma(z^{k+1})$
$\frac{\partial L}{\partial W^k}=-(y-\widehat{y})·\sigma(z^{k+1})(1-\sigma(z^{k+1}))·\frac{\partial }{\partial W^k}\sigma(z^{k+1})$
$\frac{\partial L}{\partial W^k}=-(y-\widehat{y})·\sigma(z^{k+1})(1-\sigma(z^{k+1}))·o^k$
$\frac{\partial L}{\partial W^k}=(o^k)^T·(-(y-\widehat{y})·\sigma(z^{k+1})(1-\sigma(z^{k+1})))$

依次倒推回去即可

註:以上圖的網絡為例,\(z^{k+1}=o^kW^k\)\(W^k\)來說\(o^k\)就是斜率

反向傳播的推導