【深度學習】前向傳播和反向傳播(四)

【深度學習】前向傳播和反向傳播(四)

寫在最前面的話:今天要梳理的知識點是深度學習中的前/反向傳播的計算,所需要的知識點涉及高等數學中的導數運算。

在深度學習中,一個神經網絡其實就是多個複合函數組成。函數的本質就是將輸入x映射到輸出y中,即f(x)=yf(x)=y,而函數中的係數就是我們通過訓練確定下來的,那麼如何訓練這些函數從而確定參數呢?這就涉及網絡中的兩個計算:前向傳播和反向傳播。

前向傳播

前向傳播(Forward Propagation)的理解較爲簡單,從輸入經過一層層隱層計算得到輸出的過程即爲前向過程,也稱前向傳播。舉個栗子,假設網絡中只有一個神經元,
單個神經元網絡
單個神經元網絡中,正向傳播是:(公式1)
y=Wx+By=W*x+B
而反向傳播則是根據(標籤值Y-預測值y),來調整W和B。

反向傳播

反向傳播(Backward Propagation)則是與前向傳播的計算方向相反,它是通過輸出值與真實值之間的誤差,來更新訓練參數,具體來說反向傳播是根據損失函數,通過網絡反向流動來計算每一層參數的梯度(偏導數),從而更新參數。反向傳播解決了神經網絡中訓練模型時參數的更新問題,所以理解反向傳播較爲重要!對於上面單個神經元網絡的栗子,它的損失函數假設爲(標籤值Y-預測值y)不考慮正則化問題,即:
L=Y(Wx+B)L=Y-(W*x+B)
如果我們想要知道參數W和B對y做了多少貢獻(即當W和B改變時,y如何變化),分別對(公式1)中W和B求導。可得到W的貢獻爲x,而B的貢獻爲1,因此,我們可以得到W=ϑLϑW=x\bigtriangleup W=\frac{\vartheta L}{\vartheta W}=xB=ϑLϑB=1\bigtriangleup B=\frac{\vartheta L}{\vartheta B}=1,因此可得更新參數W=W+W,B=B+BW'=W+\bigtriangleup W, B'=B+\bigtriangleup B
最後通過觀察W,B與loss之間的關係:

  • 如果正比關係,那麼需要降低W/B值,來減少損失值loss
  • 如果反比關係,那麼需要增大W/B值,來減少損失值loss

以上就是簡單的單個神經元網絡中的反向傳播。如果神經網絡較爲複雜,我們需要用到鏈式法則:ϑLϑx=ϑLϑyϑyϑx\frac{\vartheta L}{\vartheta x}=\frac{\vartheta L}{\vartheta y}\frac{\vartheta y}{\vartheta x }

太簡單的例子相對比較好理解。爲了加深上面的理解,我們再舉一個多層神經網絡,先借用一幅圖:
多層
上圖顯示了多層網絡中的L1、L2和L3層,經過L2層的輸出爲ai(2)a_i^{(2)},經過L3層後的輸出爲hW,bh_{W,b},其中每一層對應的表達式爲:
a1(2)=f(u11(1)x1+u12(1)x2+u13(1)x3+v1(1))a_1^{(2)}=f(u_{11}^{(1)}x_1+u_{12}^{(1)}x_2+u_{13}^{(1)}x_3+v_1^{(1)})
a2(2)=f(u21(1)x1+u22(1)x2+u23(1)x3+v2(1))a_2^{(2)}=f(u_{21}^{(1)}x_1+u_{22}^{(1)}x_2+u_{23}^{(1)}x_3+v_2^{(1)})
a3(2)=f(u31(1)x1+u32(1)x2+u33(1)x3+v3(1))a_3^{(2)}=f(u_{31}^{(1)}x_1+u_{32}^{(1)}x_2+u_{33}^{(1)}x_3+v_3^{(1)})
hW,b(x)=f(W11(2)a1(2)+W12(2)a2(2)+W13(2)a3(2)+b1(2))h_{W,b}(x)=f(W_{11}^{(2)}a_1^{(2)}+W_{12}^{(2)}a_2^{(2)}+W_{13}^{(2)}a_3^{(2)}+b_1^{(2)})
其中Wi,jW_{i,j}ui,ju_{i,j}是相鄰兩層神經元之間的權重(對應圖中的相鄰兩層之間的每一條連線),爲深度學習中訓練的參數。爲了簡化上面表達式,我們將上角標去掉,得到:
ai=f(ui1x1+ui2x2+ui3x3+vi)=f(UiXi+Vi)a_i=f(u_{i1}x_1+u_{i2}x_2+u_{i3}x_3+v_i)=f(U_iX_i+V_i)
hW,b=f(Wi1a1+Wi2a2+Wi3a3+bi)=f(Wiai+bi)h_{W,b}=f(W_{i1}a_1+W_{i2}a_2+W_{i3}a_3+b_i)=f(W_ia_i+b_i)
通常我們採用誤差的平方來衡量損失,因此損失函數爲:
Error=(hy)Cost=(Error)2=(hy)2Error=(h-y),Cost=(Error)^2=(h-y)^2

根據鏈式法則,我們可以得到:
ϑCostϑW=ϑCϑhϑhϑW=2×(hy)a\frac{\vartheta Cost}{\vartheta W}=\frac{\vartheta C}{\vartheta h}\frac{\vartheta h}{\vartheta W}=2\times(h-y)\cdot a
ϑCostϑU=ϑCϑhϑhϑaϑaϑU=2×(hy)wx\frac{\vartheta Cost}{\vartheta U}=\frac{\vartheta C}{\vartheta h}\frac{\vartheta h}{\vartheta a}\frac{\vartheta a}{\vartheta U}=2\times(h-y)\cdot w\cdot x
因此,可以得到參數更新的差值W=ϑCostϑW\bigtriangleup W=\frac{\vartheta Cost}{\vartheta W}U=ϑCostϑU\bigtriangleup U=\frac{\vartheta Cost}{\vartheta U}

總結

本文簡單梳理了前向傳播和反向傳播,以及相關計算。梳理得有點簡單,往後想到再繼續補充吧~

參考文章:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章