參考《ml lecture 7: backpropagation》:
假設乙個比較簡單的網路結構如下:
我們取其中一部分做詳細的分析:
對於乙個輸入 $$,它能計算出對應的 loss $c(x;\theta)$,我們如果想要更新引數 $\theta = \$,就要計算 $\nabla_\theta c(\theta)$,即所有的 $\frac, \frac$。
對於上圖,第乙個神經元的三個引數有
其中 $\frac$ 不好算,但是 $\frac, \frac, \frac$ 是很好算的
這其實對於所有的神經元都是一樣的,某個神經元中的求和結果 $z$ 對於 weight 的偏導就是對應的 input(即這條有向邊的起點),對於 bias 的偏導就是 $1$。這就是 forward pass,在引數確定、輸入確定的情況下,可以很快的計算出所有的 $\frac, \frac$。
然後就是比較難的問題,怎麼計算 $\frac$ 呢?
記 $a = \sigma (z)$ 是乙個啟用函式,就有
而對於 $\frac$ 又有
所以計算 $\frac$ 的表示式是這樣的
在輸入確定的情況下 $\sigma ' (z)$ 就也是確定的(相當於乘乙個放縮係數),很明顯能看出一種逆推的關係
其實這時已經能感受到反向傳播的味道了。為了更加易懂,不妨來看看這個網路的最後一層(假設是如下圖的引數,$y_1, y_2$ 是網路的輸出)
那麼就有
其中 $\frac, \frac$ 取決於你的函式 $c$,假設你的函式 $c = \sum_ y_i^2 = y_1^2 + y_2^2$,那麼 $\frac = 2y_1, \frac = 2y_2$,再把網路的輸出,確定的 $y_1, y_2$ 值代入就好了。至於 $\frac = \sigma'(z'), \frac = \sigma'(z'')$ 之前就講過了,相當於乙個確定的放縮係數。
所以,我們就可以從網路的最後一層,往前一層一層地逆推出所有的 $\frac$,這就是 backward pass。
這樣一來,我們經過一次 forward pass 得到了所有的 $\frac, \frac$,又經過一次 backward pass 得到了所有的 $\frac$,兩者相乘就可以得到所有的 $\frac, \frac$,即 $\nabla_\theta c(\theta)$。
反向傳播演算法
首先我們對數學符號做一些約定。我們首先考慮簡單的情況 前饋神經網路,如圖 所示。我們先假設任意兩層之間沒有權值共享。方向傳播演算法本質上就是梯度下降演算法,所以我們要對損失函式關於每個引數求導。設單個輸入例項 x 損失函式為 j x 那麼我們要求解 j wi 和 j bi i 1,2,n 對 j 關...
彈性反向傳播
正常使用的反向傳播演算法有兩個缺點待解決,其一為學習過程中學習率的選擇較難,一旦學習率選擇不當會造成學習效果不好 其二為反向傳播演算法的梯度瀰散作用,即距離輸出層越遠的神經元學習的速度越慢。martin riedmiller也因此提出了彈性反向傳播演算法 rprop 反向傳播演算法中的學習率為使用者...
反向傳播演算法
反向傳播演算法的工作機制為對 錯誤的神經元施以懲罰。從輸出層開始,向上層次查詢 錯誤的神經元,微調這些神經元輸入值的權重,以達到修復輸出錯誤的目的。神經元之所以給出錯誤的 原因在於它前面為其提供輸入的神經元,更確切地說是由兩個神經元之間的權重及輸入值決定的。我們可以嘗試對權重進行微調。每次調整的幅度...