最後一個節點在反向傳播的時候值一定為1
只考慮當前節點與前一個節點的關係 ⇒ 再將當前節點的variable值帶入即可獲得當前梯度
x ->
u -> v ->
x -> y
x ->
若一個節點有兩條線出去,則backpropagation的時候對該節點的總梯度為兩條線相加
-> x ->
s z
-> y ->
parameter sharing
x1 ->
u -> v ->
x2 -> y
x3 ->
第一層input為 $x$
第二層開始input為 $a^1,\ a^2...,\ a^{l-1}$
向量表示:
$z^1 = W^1x+b^1$
$a^1=\sigma(z^1)$
...
$z^{l-1}=W^{l-1}a^{l-2}+b^{l-1}$
$a^{l-1}=\sigma(z^{l-1})$
$z^{l}=W^{l}a^{l-1}+b^{l}$
$a^{l}=\sigma(z^{l})$
對特定參數$w_{ij}^l$求導
推導:
$L:loss\ function\qquad\qquad\theta:model\ parameter s\qquad\qquad N:N筆資料$
$\displaystyle\frac{\partial L(\theta)}{\partial w}= \frac{\partial (C^1(\theta)+C^2(\theta)+...+C^n(\theta))}{\partial w}= \frac{\partial C^1(\theta)}{\partial w}+...+\frac{\partial C^n(\theta)}{\partial w}$
結論:
$w_{ij}^l$代表 l-1 層的第 j 個neuron傳到 l 層第 i 個neuron所須相乘的參數(見上圖)
因為 $w_{ij}^l$ 只會影響到 $z_i^l$ ,結合1.之結論之求導公式如下:
$\displaystyle\frac{\partial C}{\partial w^l_{ij}}= \frac{\partial C}{\partial z_i^l} \frac{\partial z_i^l}{\partial w^l_{ij}}$
$where\ z_i^l= (w_{i1}^la_1^{l-1}+b_1^{l-1})+(w_{i2}^la_2^{l-1}+b_2^{l-1})+ ...+ (w_{ij}^la_j^{l-1}+b_j^{l-1})+...$
$其中:\\
\quad\quad\quad\displaystyle\frac{\partial C}{\partial z_i^l}=\delta_i^l,\quad\quad
\displaystyle\frac{\partial z_i^l}{\partial w_{ij}^l}=
\left \{
\begin{array}{ll}
a_j^{l-1}&l>1\\
x_j& l=1
\end{array}
\right.$
物理意義:在某層w對z的偏微分值 = 該層的輸入值 = 前一層的激活函數輸出值
Backward Pass
$\frac{\partial C}{\partial z^{L-1}}=\delta^{L-1}= \frac{\partial a}{\partial z^{L-1}}\frac{\partial C}{\partial a}= \frac{\partial \sigma(z^{L-1})}{\partial z^{L-1}}\frac{\partial C}{\partial a}=\sigma'(z^{L-1})\frac{\partial C}{\partial a}$
$其中\ \ \frac{\partial C}{\partial a}\ 代表前向出去的k條路徑傳回來相加$
$=\frac{\partial z_1^L}{\partial a} \frac{\partial C}{\partial z_1^L}+ \frac{\partial z_2^L}{\partial a} \frac{\partial C}{\partial z_2^L}+ ...+ \frac{\partial z_k^L}{\partial a} \frac{\partial C}{\partial z_k^L}$
$=w_1^L\delta_1^L+w_2^L\delta_2^L+...+w_k^L\delta_k^L$
$=(W^L)^{^\top}\cdot\delta^L$
$\delta^{L-1}=\sigma'(Z^{L-1})\cdot(W^L)^{^\top}\cdot\delta^L$