研一的時候上過深度學習的課,但是很久沒複習忘得差不多了,趁着找工作準備筆試面試的機會把之前模糊的概念再複習一下。
假設初始的三層網絡結構如圖,其中激活函數爲sigmod函數,損失函數C爲均方誤差。
首先進行前向傳播:
同理,下一級:
最終的損失爲:
先將鏈式法則中需要用到的函數列出:
然後根據鏈式法則,計算:
關於橙色部分的推導爲:
則更新後的weights爲:
其中,奇怪的希臘字母是學習率。
同理,可以計算其他所有的weights,這裏再舉一例:
-------------------------------------------------------------------------------------------
再從頭理一遍:
前向傳播的意思就是往前計算,即從x經過w到y的過程,y = wx
反向傳播的意思就是往後計算,即通過y和y_out的偏差,反向推導出偏導數,來更新w成爲w'的過程;
之後神經網絡又通過更新了的參數w',計算y'=w'x
再反向,求出w''
……
如此循環往復,就會使得y'''''(很多')'''逐漸接近y_out
這就是BP算法。
-------------------------------
最後一個小點就是學習率(那個奇怪的希臘字母)
它控制的是參數更新的“步長”
圖中黑色是要擬合的曲線,假設橙色的步長爲0.001,綠色的步長爲0.1,步長小的能夠更好的擬合曲線,但是訓練較慢,步長大的訓練快,但是可能會錯過最優解。
所以訓練中一般是先用大的學習率,一段時間後將學習率逐步變小。