中文技術博客上描述的反向傳播算法有一些跳躍性非常大,對於理解神經網絡乃至深度學習的過程非常不利,我在網上找到一篇Backpropagation 的推導過程實例(https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/),寫得明白透徹,按照最典型的梯度下降算法來進行推導,現將學習過程記錄如下。
1. loss 函數的優化
籠統來講:
設計loss函數是爲了衡量網絡輸出值和理想值之間的差距,儘管網絡的直接輸出並不顯式的包含權重因子,但是輸出是同權重因子直接相關的,因此仍然可以將loss函數視作在權重因子空間中的一個函數。
可以將loss 記爲E(w),這裏爲了便於說明,省去了偏值項,正則項等等,僅僅將loss認爲是w的函數,
訓練網絡:
對網絡訓練的目標在數學上的顯示錶現就是使得loss取值最小化,這個問題就變成了在權重空間w中求loss全局極值的一個優化問題,對於這種問題,通常的解決方案是對loss求w的偏導
2. 鏈式推導過程
假定如下圖示的神經元結構:
很顯然對於E的w偏導數,可以利用鏈式法則得到如下表示:(根據上述引用材料的記載Etotal由out1和out2構成,具體數值由材料所給出)
outo1是由sigmoid**函數給出,因此如下所示:
由上圖所示:
此時可以得到關於E和w5的偏導公式的各個組元,然後將數據代入,可以得到偏導數的值
在往常的一些記載中會使用如下的記法來表示:
所以最終的偏導可以記爲:
根據梯度下降算法的思路,爲了修正w5,認爲對w5的更新項,應當如下式表示:
其中偏導前的係數爲人爲設置的常數,就是常說的學習率,這裏設置爲0.5,這樣整個迴路就完成了對權重因子w5的更新
有了以上的實例,再看UFDL 的介紹就更加明白了(http://deeplearning.stanford.edu/wiki/index.php/Backpropagation_Algorithm)