參考
這裡的推導都用矩陣和向量的形式,計算單個變數寫起來太麻煩。矩陣、向量求導可參見上面參考的部落格,個人覺得解釋得很直接很好。
前向傳播每一層的計算如下:z(
l+1)
=w(l
,l+1
)a(l
)+b(
l,l+
1)(1.1) a
(l+1
)=f(
z(l+
1))(1.2) f
是啟用函式。一般有sigmoid、tanh、relu等。
為了得到好的模型,我們要更新引數 w,
b,這裡就用到了反向傳播。
我們將神經網路的損失函式記為 j(
w,b)
,這裡的 w,
b 是指網路中所有的引數。損失函式可以是均方誤差、交叉熵等等。總之是衡量網路輸出的結果與真實標記之間的差異。
之後,就要計算 j(
w,b)
對每一層 w,
b 的梯度,對 w,
b 進行更新。所有引數更新完成後,再進行前向傳播。迴圈往復,直到達到要求為止。
反向傳播之所以和正向傳播這麼對比著說,是因為反向傳播也是一層一層地計算。首先看最後一層(假設最後一層沒有啟用):∂j
∂w(n
−1,n
)=∂j
∂z(n
)∂z(
n)∂w
(n−1
,n)(2.1) ∂
j∂b(
n−1,
n)=∂
j∂z(
n)∂z
(n)∂
b(n−
1,n)
(2.2)
我們記: δ(
n)=∂
j∂z(
n)(2.3)
通過(1.1)和(1.2)我們可以得出:∂z
(n)∂
w(n−
1,n)
=a(n
−1)(2.4) ∂
z(n)
∂b(n
−1,n
)=1(2.5)
將(2.3)-(2.5)代入(2.1)、(2.2)得:∂j
∂w(n
−1,n
)=δ(
n)a(
n−1)
t(2.6) ∂
j∂b(
n−1,
n)=δ
(n)(2.7)
下面我們看倒數第二層:∂j
∂w(n
−2,n
−1)=
∂j∂z
(n−1
)∂z(
n−1)
∂w(n
−2,n
−1)=
δ(n−
1)a(
n−2)
t(2.8) ∂
j∂b(
n−2,
n−1)
=∂j∂
z(n−
1)∂z
(n−1
)∂b(
n−2,
n−1)
=δ(n
−1)(2.9)
觀察(2.6)-(2.9)可以發現,形式都是相同的,所以問題就是, δ(
n−1)
怎麼求。還是用鏈式法則:δ(
n−1)
=∂j∂
z(n−
1)=∂
j∂z(
n)∂z
(n)∂
a(n−
1)∂a
(n−1
)∂z(
n−1)
=w(n
−1,n
)tδ(
n)⋅f
′(z(
n−1)
)(2.10)
由(2.10)可以看出,粉色部分是上輪更新後固定的,藍色部分是反向傳播時上一層計算好的,只有本層的棕色部分需要計算。
這樣,一層接著一層,直到將所有的 ∂j
∂w,∂
j∂b 都計算完畢,用負梯度更新所有的引數。再正向傳播,再反向傳播……迴圈……直到達到要求。
同時也可以看出,在計算梯度的時候,(2.10)中棕色的部分是導數,如果這個導數部分過大,則會產生所謂的「梯度**」的問題,如果過小,則會出現「梯度瀰散」的問題。比如
f 取 sigmoid函式,其導數值最大是0.25,如果網路很深,那導數項連乘,就會使得梯度變得很小,引數更新不動,這就是梯度瀰散。
BP神經網路模型及演算法推導
一,什麼是bp bp back propagation 網路是1986年由rumelhart和mccelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。bp網路能學習和存貯大量的輸入 輸出模式對映關係,而無需事前揭示描述這種對映關係的數學...
BP神經網路演算法推導
1 前饋神經網路 反饋神經網路 bp網路等,他們之間的關係 前饋型神經網路 取連續或離散變數,一般不考慮輸出與輸入在時間上的滯後效應,只表達輸出與輸入的對映關係 在此種神經網路中,各神經元從輸入層開始,接收前一級輸入,並輸入到下一級,直至輸出層。整個網路中無反饋,可用乙個有向無環圖表示。常見的前饋神...
BP神經網路演算法推導
目錄正向計算 反向傳播 設損失函式為f vec 則f vec delta f vec nabla cdot delta 其中 nabla 是 f vec 的梯度 所以當 delta eta nabla f vec eta 0 時,下降速率最快 即 delta eta frac 設當前啟用函式為f x...