1. 程式人生 > >2. DNN神經網路的反向更新(BP)

2. DNN神經網路的反向更新(BP)

1. DNN神經網路的前向傳播(FeedForward)

2. DNN神經網路的反向更新(BP)

1. 前言

DNN前向傳播介紹了DNN的網路是如何的從前向後的把資料傳遞過去的,但是隻有這個過程還不夠,我們還需要想辦法對所有引數進行一個梯度的更新,才能使得網路能夠慢慢的學習到新的東西。

在神經網路中有一種通用的方法來更新引數,叫做反向更新BP

2. DNN反向更新過程

根據前面的前向傳播的過程我們得到了一個傳播公式,其中\(\sigma\)是啟用函式,對具體的函式不做要求,可以是線性啟用函式,也可以是非線性啟用函式。

\[ a^l = \sigma(z^l) = \sigma(W^la^{l-1} + b^l)\;\;\;\;\;\;(0) \]


我們假設DNN的損失函式是MSE,其中\(a^L\)是輸出層的輸出:

\[ J(W,b,x,y) = \frac{1}{2}||a^L-y||_2^2 \]
對低\(l\)層的\(W,b\)求導數有:

\[ \frac{\partial J(W,b,x,y)}{\partial W^l} = \frac{\partial J(W,b,x,y)}{\partial z^l} \frac{\partial z^l}{\partial W^l}\;\;\;\;\;\;(1) \]

\[ \frac{\partial J(W,b,x,y)}{\partial b^l} = \frac{\partial J(W,b,x,y)}{\partial z^l} \frac{\partial z^l}{\partial b^l}\;\;\;\;\;\;(2) \]


我們令

\[ \delta^l =\frac{\partial J(W,b,x,y)}{\partial z^l}\;\;\;\;\;\;(3) \]

把(3)帶入(1)(2)得到下式(4)(5)
\[ \frac{\partial J(W,b,x,y)}{\partial W^l} = \delta^{l}(a^{l-1})^T\;\;\;\;\;\;(4) \]

\[ \frac{\partial J(W,b,x,y)}{\partial b^l} = \delta^{l}\;\;\;\;\;\;(5) \]
我們只要求出\(\delta^l\)的表示式,就能求出每一層的\(W^l,b^l\)

的梯度,就能對每層進行梯度更新。

由(3)不難得出

\[ \delta^{l} = \frac{\partial J(W,b,x,y)}{\partial z^l} = \frac{\partial J(W,b,x,y)}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial z^{l}} = \delta^{l+1}\frac{\partial z^{l+1}}{\partial z^{l}}\;\;\;\;\;\;(6) \]
又因為有

\[ z^{l+1}= W^{l+1}a^{l} + b^{l+1} = W^{l+1}\sigma(z^l) + b^{l+1}\;\;\;\;\;\;(7) \]
根據(6)(7)我們得出

\[ \delta^{l} = \delta^{l+1}\frac{\partial z^{l+1}}{\partial z^{l}} = (W^{l+1})^T\delta^{l+1}\odot \sigma^{'}(z^l)\;\;\;\;\;\;(8) \]
現在我們有了一個\(\delta^{l}\)\(\delta^{l+1}\)的遞推公式,我們只要求出最後一層的\(\delta^{L}\),就能算出所有層的\(\delta^{l}\),然後根據(4)(5)可以算出每層的引數的梯度並進行更新。

如果理解了上面的過程,相比讀者對計算\(\delta^{L}\)已經不在話下了:
\[ \delta^L = \frac{\partial J(W,b,x,y)}{\partial z^L} = (a^L-y)\odot \sigma^{'}(z^L) \]

到此為止,我們已經能成功的更新了每層的梯度,整個網路在理論上已經能夠跑通了。不過在此說明兩點。

  1. 上面的推理過程是在MSE的假設下進行的,如果換一個損失函式,那需要對計算輸出層\(\delta^{L}\)進行相應的修改。
  2. 因為方便推理過程,前面都使用同一個啟用函式\(\sigma\),但是其實每一層可以有自己相應的啟用函式,只要計算過程中使用相應的相應啟用函式的導數即可。

3. 總結

由於梯度下降法有批量(Batch),小批量(mini-Batch),隨機三個變種,為了簡化描述,這裡我們以最基本的批量梯度下降法為例來描述反向傳播演算法。實際上在業界使用最多的是mini-Batch的梯度下降法。不過區別僅僅在於迭代時訓練樣本的選擇而已。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]