前向傳播
通過輸入樣本x及參數\(w^{[1]}\)、\(b^{[1]}\)到隱藏層,求得\(z^{[1]}\),進而求得\(a^{[1]}\);
再將參數\(w^{[2]}\)、\(b^{[2]}\)和\(a^{[1]}\)一起輸入輸出層求得\(z^{[2]}\),進而求得\(a^{[2]}\);
最后得到損失函數:\(\mathcal{L}(a^{[2]},y)\),這樣一個從前往后遞進傳播的過程,就稱為前向傳播(Forward Propagation)。
前向傳播過程中:
\[z^{[1]} = w^{[1]T}X + b^{[1]} \]
\[a^{[1]} = g(z^{[1]}) \]
\[z^{[2]} = w^{[2]T}a^{[1]} + b^{[2]} \]
\[a^{[2]} = σ(z^{[2]}) = sigmoid(z^{[2]}) \]
\[{\mathcal{L}(a^{[2]}, y)=-(ylog\ a^{[2]} + (1-y)log(1-a^{[2]}))} \]
在訓練過程中,經過前向傳播后得到的最終結果跟訓練樣本的真實值總是存在一定誤差,這個誤差便是損失函數。想要減小這個誤差,當前應用最廣的一個算法便是梯度下降,於是用損失函數,從后往前,依次求各個參數的偏導,這就是所謂的反向傳播(Back Propagation),一般簡稱這種算法為BP算法。
反向傳播
sigmoid函數的導數為:
\[{a^{[2]’} = sigmoid(z^{[2]})’ = \frac{\partial a^{[2]}}{\partial z^{[2]}} = a^{[2]}(1 - a^{[2]})} \]
由復合函數求導中的鏈式法則,反向傳播過程中:
\[da^{[2]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} = -\frac{y}{a^{[2]}} + \frac{1 - y}{1 - a^{[2]}} \]
\[dz^{[2]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} = a^{[2]} - y \]
\[dw^{[2]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}}\cdot \frac{\partial z^{[2]}}{\partial w^{[2]}} = dz^{[2]}\cdot a^{[1]T} \]
\[db^{[2]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}}\cdot \frac{\partial z^{[2]}}{\partial b^{[2]}} = dz^{[2]} \]
\[da^{[1]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}} = dz^{[2]} \cdot w^{[2]} \]
\[dz^{[1]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}} \cdot \frac{\partial a^{[1]}}{\partial z^{[1]}}= dz^{[2]} \cdot w^{[2]} × g^{[1]’}(z^{[1]}) \]
\[dw^{[1]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}} \cdot \frac{\partial a^{[1]}}{\partial z^{[1]}} \cdot \frac{\partial z^{[1]}}{\partial w^{[1]}}= dz^{[1]} \cdot X^T \]
\[db^{[1]} = \frac{\partial \mathcal{L}(a^{[2]}, y)}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}} \cdot \frac{\partial a^{[1]}}{\partial z^{[1]}} \cdot \frac{\partial z^{[1]}}{\partial b^{[1]}}= dz^{[1]} \]
這便是反向傳播的整個推導過程,在具體的算法實現過程中,使用梯度下降的方法,不斷進行更新。