如何在ANN中計算誤差的偏導數
這是幾個月前我發表的這篇文章“用於時間序列預測的多層感知器(神經網路)”的後續問題。
我正在建構一個前饋人工神經網路,使用彈性傳播訓練。目前,我正在嘗試實現單個神經元輸入的權重更新算法。對於我的一生,我似乎無法找到一個明確而直接的答案來計算如何計算給定重量的誤差的偏導數。我在網上唯一能找到的是,神經元的權重更新是 $ \frac{dE}{dW} $ (參見原始論文
$$ p. 2 & 3 $$,或者這個 $$ p. 4 $$). 然而,這些論文都沒有真正概述如何計算這一點。
我理解數學意義上的偏導數的概念。我假設目前神經元輸入的權重變化計算是手頭的操作,而所有其他神經元輸入值保持不變。
因此,對於下面的每個神經元,我通過取總誤差(-0.3963277746392987)來計算每個輸入的單個誤差,該誤差乘以該神經元輸入的權重(每個 :calculated-error 是單個輸入誤差的總和)。
對於兩個神經元,每個輸入的權重變化是多少?
這是我的資料結構:
:輸入層 ({:calculated-error -1.0991814559154283, :計算值0.9908633780805893, :輸入 ({:錯誤-0.07709937922001887, : 計算 0.4377023624017325, :key :avolume, :值 2.25, :重量0.19453438328965889, :偏差0} {:錯誤-0.19625185888745333, :計算1.4855269156904067, :key :bvolume, :值 3.0, :重量 0.4951756385634689, :偏差0} {:錯誤-0.3072203938672436, :計算1.0261589301119642, :key :問, :值 1.32379, :重量 0.7751674586693994, :偏差0} {:錯誤-0.36920086975057054, :計算1.2332848282147972, :key :出價, :值 1.3239, :重量 0.9315543683169403, :偏差0} {:錯誤-0.14940895419014188, : 計算 0.5036129016361643, :鍵:時間, :值 1.335902400676, :重量0.37698330460468044, :bias 0}), :id "583c10bfdbd326ba525bda5d13a0a894b947ffc"}, ...) :輸出層 ({:calculated-error -1.1139741279964241, :計算值0.9275622253607013, :輸入 ({:錯誤-0.2016795955938916, :計算0.48962608882549025, :輸入ID“583c10bfdbd326ba525bda5d13a0a894b947ffb”, :重量0.5088707087900713, :偏差0} {:錯誤-0.15359996014735702, : 計算 0.3095962076691644, :輸入ID“583c10bfdbd326ba525bda5d13a0a894b947ffa”, :重量 0.38755790024342773, :偏差0} {:錯誤-0.11659507401745359 :計算0.23938733624830652, :輸入ID“583c10bfdbd326ba525bda5d13a0a894b947ff9”, :重量 0.2941885012312543, :偏差0} {:錯誤-0.2784739949663631, :計算0.6681581686752845, :輸入ID“583c10bfdbd326ba525bda5d13a0a894b947ff8”, :重量0.7026355778870271, :偏差0} {:錯誤-0.36362550327135884, :計算0.8430641676611533, :輸入ID“583c10bfdbd326ba525bda5d13a0a894b947ff7”, :重量 0.9174868039523537, :bias 0}), :id "583c10bfdbd326ba525bda5d13a0a894b947ff6"})
提前致謝
我有點不清楚你想要做什麼,也許更好的地方來問你的問題是Stats.SE但我鼓勵你去看看這個機器學習的線上課程,它提供了一個實現反向傳播算法。
您可以註冊或點擊預覽並轉到 NN:Learning 章節,但我建議您註冊並在 NN 上進行程式練習。也許這不是您想要做的,但我認為您可能會找到一個基本範例,說明如何計算誤差項的偏導數。
梯度的計算取決於神經元的啟動函式(更具體地說,是它們的導數)。此外,任何單個權重的梯度取決於稍後出現在網路中的權重和啟動——這是反向傳播算法背後的關鍵思想,它利用這一事實來計算梯度。你可以在這篇論文中找到關於反向傳播的非常詳細的描述。請注意,範例使用 sigmoid 啟動函式,但該方法適用於任何可微啟動。
還要注意,backprop 和 rprop 之間的主要區別在於,backprop 需要權重梯度的值,而 rprop 只需要它的符號。雖然 rprop 在這方面可能看起來更簡單,但我建議你先確保你完全理解 backprop。