讓我們考慮一個反向傳播(BP)網絡的一個節點。它有多個輸入,併產生一個輸出值。我們希望對訓練使用糾錯,所以它也會根據節點的誤差估計更新權重。
每個節點都有一個偏差值,θ。你可以把它看作是一個內部的,不變的1.0值輸入的權重。
活化是的加權輸入和偏置值的總和。讓我們將我們感興趣的節點稱爲j,前一層中節點的值爲i,後一層中節點的值爲k。我們的節點j的激活則是:
淨Ĵ =Σ我(鄰我×瓦特 IJ)+θĴ
即, j的激活值是來自節點i的輸出與對應的權重鏈接節點i和j的輸出的乘積加上偏差值的總和。
我們的節點j的輸出是激活的傳遞函數:
öĴ = F(淨Ĵ)
f是常用的S形函數。
F(淨Ĵ)= 1 /(1 + E -net Ĵ)
的S形函數具有易於以指定一階導數:
F'(淨Ĵ)= F(淨Ĵ)×(1。0 - F(淨Ĵ))
我們使用哪種傳遞函數,我們需要知道如何計算它的一階導數。 BP通過連鎖規則通過梯度下降進行工作,所以這很重要。上面的等式將與不同的傳遞函數不同。到目前爲止,我們知道如何獲得輸入值,計算激活,計算輸出並計算激活的一階導數。現在我們需要處理錯誤和重量調整。
用於BP中的節點誤差估計值被稱爲δ。節點的δ與節點激活的一階導數和它接收的誤差項成正比。接收到的誤差項有兩個公式,一個用於輸出節點,另一個用於隱藏節點。
一般地,
δ= F '(淨)×(接收錯誤)
對於輸出節點,
δ輸出 = F'(淨)×(t - o)
其中t是該輸出節點的期望值,o是該輸出節點的實際輸出值。
對於我們隱藏的節點j,它是這樣的:
δĴ = F'(淨Ĵ)×Σķ(δķ×瓦特 JK)
我們節點j的δ,δ j,是我們的一階導數的乘積給定激活時間的sfer函數下一層(更接近輸出)的增量的總和乘以連接權重的值。有了這個,我們可以計算出如何調整前一層節點(接近輸入)的權重。
DW IJ = L×○我×δĴ
DW這裏表示 「重量變化」,所以什麼方程說的是,從在重量變化節點i到我們的節點j等於學習參數L(通常網絡中所有節點的相同值),節點i的輸出值和節點j的δ(誤差項)的乘積。
調整偏差值與調整權重類似。
DθĴ = L×F(θĴ)×δĴ
Dθ這裏表示 「在θ變化」。我們必須將傳遞函數應用於偏差值θ j以獲得類似於節點輸出的項。否則,它看起來就像另一個等式。
我應該注意到,計算重量變化應該在整個網絡範圍內進行,然後在計算完所有變化後應用變更。
這是一個相當廣泛的問題。你可能在http://dsp.stackexchange.com有更好的運氣。 – mtrw
你可以在http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html –
找到一個很好的解釋,附圖片,這是一個很好的解釋!雖然我不確定我是否理解差分位。 df(e)/ de是指相對於整個加權總和(e)的導數還是僅僅是連接誰輸入我們試圖更新的重量?所以說節點有一個線性激活函數,df(e)/ de總是等於1(f(e)= e - > df(e)/ de = 1)?或者它會始終等於我們正在更新的權重(f(e)= w1x1 + w2x2 - > df(e)/ dx1 = w1) –