【深度學習】前向傳播和反向傳播(四)
寫在最前面的話:今天要梳理的知識點是深度學習中的前/反向傳播的計算,所需要的知識點涉及高等數學中的導數運算。
在深度學習中,一個神經網絡其實就是多個複合函數組成。函數的本質就是將輸入x映射到輸出y中,即f(x)=y,而函數中的係數就是我們通過訓練確定下來的,那麼如何訓練這些函數從而確定參數呢?這就涉及網絡中的兩個計算:前向傳播和反向傳播。
前向傳播
前向傳播(Forward Propagation)的理解較爲簡單,從輸入經過一層層隱層計算得到輸出的過程即爲前向過程,也稱前向傳播。舉個栗子,假設網絡中只有一個神經元,
單個神經元網絡中,正向傳播是:(公式1)
y=W∗x+B
而反向傳播則是根據(標籤值Y-預測值y),來調整W和B。
反向傳播
反向傳播(Backward Propagation)則是與前向傳播的計算方向相反,它是通過輸出值與真實值之間的誤差,來更新訓練參數,具體來說反向傳播是根據損失函數,通過網絡反向流動來計算每一層參數的梯度(偏導數),從而更新參數。反向傳播解決了神經網絡中訓練模型時參數的更新問題,所以理解反向傳播較爲重要!對於上面單個神經元網絡的栗子,它的損失函數假設爲(標籤值Y-預測值y)不考慮正則化問題,即:
L=Y−(W∗x+B)
如果我們想要知道參數W和B對y做了多少貢獻(即當W和B改變時,y如何變化),分別對(公式1)中W和B求導。可得到W的貢獻爲x,而B的貢獻爲1,因此,我們可以得到△W=ϑWϑL=x,△B=ϑBϑL=1,因此可得更新參數W′=W+△W,B′=B+△B:
最後通過觀察W,B與loss之間的關係:
- 如果正比關係,那麼需要降低W/B值,來減少損失值loss
- 如果反比關係,那麼需要增大W/B值,來減少損失值loss
以上就是簡單的單個神經元網絡中的反向傳播。如果神經網絡較爲複雜,我們需要用到鏈式法則:ϑxϑL=ϑyϑLϑxϑy。
太簡單的例子相對比較好理解。爲了加深上面的理解,我們再舉一個多層神經網絡,先借用一幅圖:
上圖顯示了多層網絡中的L1、L2和L3層,經過L2層的輸出爲ai(2),經過L3層後的輸出爲hW,b,其中每一層對應的表達式爲:
a1(2)=f(u11(1)x1+u12(1)x2+u13(1)x3+v1(1))
a2(2)=f(u21(1)x1+u22(1)x2+u23(1)x3+v2(1))
a3(2)=f(u31(1)x1+u32(1)x2+u33(1)x3+v3(1))
hW,b(x)=f(W11(2)a1(2)+W12(2)a2(2)+W13(2)a3(2)+b1(2))
其中Wi,j和ui,j是相鄰兩層神經元之間的權重(對應圖中的相鄰兩層之間的每一條連線),爲深度學習中訓練的參數。爲了簡化上面表達式,我們將上角標去掉,得到:
ai=f(ui1x1+ui2x2+ui3x3+vi)=f(UiXi+Vi)
hW,b=f(Wi1a1+Wi2a2+Wi3a3+bi)=f(Wiai+bi)
通常我們採用誤差的平方來衡量損失,因此損失函數爲:
Error=(h−y),Cost=(Error)2=(h−y)2
根據鏈式法則,我們可以得到:
ϑWϑCost=ϑhϑCϑWϑh=2×(h−y)⋅a
ϑUϑCost=ϑhϑCϑaϑhϑUϑa=2×(h−y)⋅w⋅x
因此,可以得到參數更新的差值△W=ϑWϑCost,△U=ϑUϑCost。
總結
本文簡單梳理了前向傳播和反向傳播,以及相關計算。梳理得有點簡單,往後想到再繼續補充吧~
參考文章:
https://www.cnblogs.com/cation/p/11664741.html
https://blog.csdn.net/qq_16137569/article/details/81449209
https://www.zhihu.com/question/27239198?rf=24827633