Lec 4 BP神經網絡詳細推導
本篇部落客要記錄一下Coursera上Andrew機器學習BP神經網絡的前向傳播算法和反向傳播算法的具體過程及其詳細推導。友善後面手撸一個BP神經網絡。
目錄
- Lec 4 BP神經網絡詳細推導
- 4.1 網絡結構
- 4.1.1 損失函數
- 4.1.2 網絡結構
- 4.2 Forward Propagation
- 4.3 Back Propagation
- 4.3.1 第三層權重偏導的求法
- 4.3.2 第二層權重偏導的求法
- 4.3.3 第一層權重偏導的求法
- 4.3.4 直覺感受
- 4.3.5 整合
- 4.4 整合FP、BP
- Ref
- 4.1 網絡結構
4.1 網絡結構
4.1.1 損失函數
我們選用正規化後的交叉熵函數:
\(J(\Theta) = -\frac{1}{m} \sum\limits_{i=1}^{m} \sum\limits_{k=1}^{K} \left[ {y_k}^{(i)} \log{(h_\Theta(x^{(i)}))}_k + \left( 1 - y_k^{(i)} \right) \log \left( 1- {\left( h_\Theta \left( x^{(i)} \right) \right)} \right)_k \right] + \frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2\)
其中各記号意義如下:
記号 | 意義 |
---|---|
\(m\) | 訓練集樣本個數 |
\(K\) | 分類數目,也即輸出層單元個數 |
\(x^{(i)}\) | 訓練集的第i個樣本輸入 |
\(y^{(i)}\) | 訓練集的第i個樣本輸出 |
\(y_k^{(i)}\) | 訓練集\(y^{(i)}\)的第k個分量值 |
\(h_\Theta\) | 激活函數,這裡是sigmoid函數 |
\(L\) | 網絡的層數 |
\(s_l\) | 第 l 層單元的個數 |
4.1.2 網絡結構
同時考慮到推導過程的簡潔性和一般性,我們選用如下的網絡結構:
即4層神經網絡,2個隐含層,輸入層4個神經元,輸出層2個神經元,兩層隐含層每層3個神經元。
4.2 Forward Propagation
從Andrew的網課上我們知道,正向傳播算法的大緻流程如下圖所示:
注意,上圖的網絡結構不是我們的網絡結構。隻是懶得寫前向傳播算法的具體過程從網課上截下來的圖。我們的網絡結構見上一節。否則後面的推導會比較迷惑
在我們的網絡上,大緻就對應如下的過程:
第一層的激活值,即我們訓練集中的輸入:
\[a^{(1)}=\begin{bmatrix}a^{(1)}_0 \\ a^{(1)}_1 \\ a^{(1)}_2\\a^{(1)}_3\end{bmatrix}\tag{1}
\]
第一層的權重,應該為一個2$\times$4的矩陣,如下:
\[\Theta^{(1)}=\begin{bmatrix}\theta^{(1)}_{10} & \theta^{(1)}_{11} & \theta^{(1)}_{12} &\theta^{(1)}_{13} \\
\theta^{(1)}_{20} & \theta^{(1)}_{21} & \theta^{(1)}_{22} & \theta^{(1)}_{23}
\end{bmatrix}\tag{2}
\]
注意,這裡的\(\Theta\)矩陣中的元素的角标前一個對應的是下一層的神經元序号,後一個對應的是本層神經元的序号。并且本文中的推導全部遵循這個規定。
對第一層的激活值權重,得到z向量:
\[z^{(2)}=\Theta^{(1)} \times a^{(1)} = \begin{bmatrix}
z^{(2)}_1\\
z^{(2)}_2
\end{bmatrix}\tag{3}
\]
對z向量應用激活函數,其後補充第二層的偏置單元,得到第三層的激活值:
\[g(z^{(2)})=\begin{bmatrix}a^{(2)}_1 \\ a^{(2)}_2\end{bmatrix}\tag{4}\\
\]
\[a^{(2)}=[1; g(z^{(2)})]=\begin{bmatrix}
a^{(2)}_0 \\ a^{(2)}_1 \\ a^{(2)}_2
\end{bmatrix}\tag{5}
\]
其中,這裡的激活函數是早期神經網絡喜歡使用的sigmoid函數:
\[g(z)=\frac{1}{1+e^{-z}}
\]
其導數具有如下性質:
\[g^{\'}(z)=g(z)*(1-g(z))
\]
同理有:
\[\Theta^{(2)}=\begin{bmatrix}\theta^{(2)}_{10} & \theta^{(2)}_{11} & \theta^{(2)}_{12} \\
\theta^{(2)}_{20} & \theta^{(2)}_{21} & \theta^{(2)}_{22}
\end{bmatrix}\tag{6}
\]
\[z^{(3)}=\Theta^{(2)} \times a^{(2)} = \begin{bmatrix}z^{(3)}_1\\z^{(3)}_2\end{bmatrix}\tag{7}
\]
\[a^{(3)}=[1; g(z^{(3)})]=\begin{bmatrix}
a^{(3)}_0 \\ a^{(3)}_1 \\ a^{(3)}_2
\end{bmatrix}\tag{8}
\]
\[\Theta^{(3)}=\begin{bmatrix}\theta^{(3)}_{10} & \theta^{(3)}_{11} & \theta^{(3)}_{12} \\
\theta^{(3)}_{20} & \theta^{(3)}_{21} & \theta^{(3)}_{22}
\end{bmatrix}\tag{9}
\]
快結束了,我們的前向傳播算法隻剩最後的輸出層了:
\[z^{(4)}=\Theta^{(3)} \times a^{(3)} = \begin{bmatrix}z^{(4)}_1\\z^{(4)}_2\end{bmatrix}\tag{10}
\]
注意,已經到輸出層了,在這一層不需要添加偏置項:
\[a^{(4)}=h_\Theta(x^{(i)})=g(z^{(4)})=\begin{bmatrix}
a^{(4)}_1\\
a^{(4)}_2
\end{bmatrix}\tag{11}
\]
已經根據我們的訓練樣本得到了預測值了,接下來就是如何使用梯度下降法更新\(\Theta\)矩陣來使損失函數收斂到一個局部最小值了。這就涉及到了反向傳播算法。
4.3 Back Propagation
算法流程:
我們知道反向傳播算法是基于梯度下降法的,而梯度下降法的核心在于如何求出損失函數J關于權重矩陣\(\Theta\)的偏導,即梯度。
要了解這一部分的内容,必須要對多元函數的鍊式求導法則有一個比較好的掌握,具體可以參考3b1b的The Essence of Calculus和Visualizing the chain rule and product rule。
首先,我們可以畫出如下的求導鍊:
在這裡,我們先隻關注圖的上半部分,從求導鍊中可以看出,如果我們想要減小損失函數的值,有三種辦法:
- 求J關于\(\Theta\)的偏導,使損失函數J沿下降比較快的方向下降,也即調整\(\Theta\)矩陣(weights)
- 減小上一層的激活值\(a^{(L-1)}\)
- 減小偏置值(bias)
不知道Andrew的神經網絡模型是在嚴格模仿神經元激活的門檻值基本不變還是什麼原因,Andrew的每個ML模型都沒有調整bias的大小。是以,我們這裡也依照課程裡的BP神經網絡,不調整bias的大小。自然而然地,我們的正規化也不懲罰偏置項。是以,我們就隻調整\(\Theta\)矩陣的值以及減小上一層的激活值,而上一層的激活值顯然可以層層的向後傳播下去。是以,整體來看,我們隻用調整權重\(\Theta\)矩陣的值。
是以,接下來的部分我們就看看如何求解損失函數關于\(\Theta\)的偏導。
4.3.1 第三層權重偏導的求法
我們考慮腳标先求解一個損失函數J關于第三層的權重\(\theta_{10}^{(3)}\)的偏導:
先看損失函數:
\(J(\Theta) = -\frac{1}{m} \sum\limits_{i=1}^{m} \sum\limits_{k=1}^{K} \left[ {y_k}^{(i)} \log{(h_\Theta(x^{(i)}))}_k + \left( 1 - y_k^{(i)} \right) \log \left( 1- {\left( h_\Theta \left( x^{(i)} \right) \right)} \right)_k \right] + \frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2\)
簡化一下,我們知道正規化這一部分\(\frac{\lambda}{2m} \sum\limits_{l=1}^{L-1} \sum\limits_{i=1}^{s_l} \sum\limits_{j=1}^{s_{l+1}} \left( \Theta_{ji}^{(l)} \right)^2\)的求導比較容易,是以在接下來的求導過程中暫且忽略這一項,放在最後整合的時候再考慮;然後代入第三層的參數,可以得到:
\[\begin{align*}
J(\Theta) &= -\frac{1}{m}\sum_{i=1}^m\sum_{k=1}^K\left[y_k^{(i)}log(a_k^{(4)}) + (1-y_k^{(i)})log(1-a_k^{(4)})\right]\\\\
\frac{\partial J}{\partial a_1^{(4)}} &= -\frac{1}{m}\sum_{i=1}^m\left[y_1^{(i)}\frac{1}{a_1^{(4)}} - (1-y_1^{(i)})\frac{1}{1-a_1^{(4)}}\right]\\\\
\frac{\partial a_1^{(4)}}{\partial z_1^{(4)}} &= \frac{\partial g(z_1^{(4)})}{\partial z_1^{(4)}} \\&= g(z_1^{4})(1-g(z_1^{(4)})) \\
&=a_1^{(4)}(1-a_1^{(4)})\\\\
\frac{\partial z_1^{(4)}}{\partial\theta^{(3)}_{10}} &= a_0^{(3)}
\end{align*}
\]
注意看網絡結構圖,\(\theta_{10}^{(3)}\)隻會影響到\(z_1^{(4)}\)進而影響到\(a_1^{(4)}\)(是以,熟悉多元微分的鍊式求導法則的朋友應該知道上述向量求導中有一項為0的偏導連乘沒有寫出來)
根據鍊式求導圖上的求導鍊,将上述三者相乘:
\[\frac{\partial J}{\partial \theta_{10}^{(3)}} = \frac{1}{m}\sum_{i=1}^m\left[a_1^{(4)} - y_1^{(i)}\right]a_0^{(3)}
\]
同理,我們可以直接寫第三層其他所有權重的偏導:
\[\frac{\partial J}{\partial \theta_{11}^{(3)}} = \frac{1}{m}\sum_{i=1}^m\left[a_1^{(4)} - y_1^{(i)}\right]a_1^{(3)}\\\\
\frac{\partial J}{\partial \theta_{12}^{(3)}} = \frac{1}{m}\sum_{i=1}^m\left[a_1^{(4)} - y_1^{(i)}\right]a_2^{(3)}\\\\
\frac{\partial J}{\partial \theta_{20}^{(3)}} = \frac{1}{m}\sum_{i=1}^m\left[a_2^{(4)} - y_2^{(i)}\right]a_0^{(3)}\\\\
\frac{\partial J}{\partial \theta_{21}^{(3)}} = \frac{1}{m}\sum_{i=1}^m\left[a_2^{(4)} - y_2^{(i)}\right]a_1^{(3)}\\\\
\frac{\partial J}{\partial \theta_{22}^{(3)}} = \frac{1}{m}\sum_{i=1}^m\left[a_2^{(4)} - y_2^{(i)}\right]a_2^{(3)}
\]
4.3.2 第二層權重偏導的求法
好像有點規律,接下來我們再求損失函數J關于第二層的權重\(\theta^{(2)}_{10}\)的偏導:
根據網絡結構圖和求導鍊可以知道:
\[\begin{align*}
\frac{\partial J}{\partial \theta^{(2)}_{10}}&=\left(\bigg(
\frac{\partial J}{\partial a^{(4)}_1}\cdot\frac{\partial a^{(4)}_1}{\partial z^{(4)}_1}\bigg)\cdot \frac{\partial z^{(4)}_1}{\partial a^{(3)}_1}
+ \bigg(\frac{\partial J}{\partial a^{(4)}_2}\cdot \frac{\partial a^{(4)}_2}{\partial z^{(4)}_2}\bigg)\cdot \frac{\partial z^{(4)}_2}{\partial a^{(3)}_1 }
\right)\cdot \frac{\partial a^{(3)}_1}{\partial z^{(3)}_1} \cdot \frac{\partial z^{(3)}_1}{\partial \theta^{(2)}_{10}}\\
&=\left(
\frac{\partial J}{\partial a^{(4)}_1}\cdot\frac{\partial a^{(4)}_1}{\partial z^{(4)}_1}\cdot \frac{\partial z^{(4)}_1}{\partial a^{(3)}_1}
+ \frac{\partial J}{\partial a^{(4)}_2}\cdot \frac{\partial a^{(4)}_2}{\partial z^{(4)}_2}\cdot \frac{\partial z^{(4)}_2}{\partial a^{(3)}_1 }
\right)\cdot \frac{\partial a^{(3)}_1}{\partial z^{(3)}_1} \cdot \frac{\partial z^{(3)}_1}{\partial \theta^{(2)}_{10}}\\
\end{align*}
\]
仔細看上面的求導鍊可以發現,實際上在算第二層權重的偏導的時候,有些項(比如\(\frac{\partial J}{\partial a_1^{(4)}}, \frac{\partial a_1^{(4)}}{\partial z_1^{(4)}}\)都已經被計算過了,我們在這裡可以直接代入進去。
\[\begin{align*}
\frac{\partial J}{\partial \theta^{(2)}_{10}}&=\left[\frac{1}{m}\sum_{i=1}^m\left[a_1^{(4)} - y_1^{(i)}\right]\cdot \theta_{11}^{(3)}
+ \frac{1}{m}\sum_{i=1}^m\left[a_2^{(4)} - y_2^{(i)}\right] \cdot \theta_{21}^{(3)}
\right] \cdot g^{\'}(z_1^{(3)})\cdot a^{(2)}_0\\
&=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)})\cdot a^{(2)}_0\\
\end{align*}
\]
類似的,我們可以寫出其餘幾項:
\[\frac{\partial J}{\partial \theta_{11}^{(2)}}=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)})\cdot a^{(2)}_1\\
\]
\[\frac{\partial J}{\partial \theta_{12}^{(2)}}=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)})\cdot a^{(2)}_2\\
\]
\[\frac{\partial J}{\partial \theta_{20}^{(2)}}=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{12}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{22}^{(3)}
\right]\cdot g^{\'}(z_2^{(3)})\cdot a^{(2)}_0\\
\]
\[\frac{\partial J}{\partial \theta_{21}^{(2)}}=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{12}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{22}^{(3)}
\right]\cdot g^{\'}(z_2^{(3)})\cdot a^{(2)}_1\\
\]
\[\frac{\partial J}{\partial \theta_{20}^{(2)}}=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{12}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{22}^{(3)}
\right]\cdot g^{\'}(z_2^{(3)})\cdot a^{(2)}_2\\
\]
4.3.3 第一層權重偏導的求法
好像規律還不是很明顯,那接下來我們求第一層的權重的偏導。
首先,還是可以寫出如下的求導鍊:
\[\begin{align*}
\frac{\partial J}{\partial \theta_{10}^{(1)}} &=
\left[
\left(
\frac{\partial J}{\partial a^{(4)}_1}\cdot\frac{\partial a^{(4)}_1}{\partial z^{(4)}_1}\cdot \frac{\partial z^{(4)}_1}{\partial a^{(3)}_1}
+ \frac{\partial J}{\partial a^{(4)}_2}\cdot \frac{\partial a^{(4)}_2}{\partial z^{(4)}_2}\cdot \frac{\partial z^{(4)}_2}{\partial a^{(3)}_1 }
\right) \cdot \frac{\partial a_1^{(3)}}{\partial z_1^{(3)}} \cdot \frac{\partial z_1^{(3)}}{\partial a_1^{(2)}} \\
+
\left(
\frac{\partial J}{\partial a^{(4)}_1}\cdot\frac{\partial a^{(4)}_1}{\partial z^{(4)}_1}\cdot \frac{\partial z^{(4)}_1}{\partial a^{(3)}_2}
+ \frac{\partial J}{\partial a^{(4)}_2}\cdot \frac{\partial a^{(4)}_2}{\partial z^{(4)}_2}\cdot \frac{\partial z^{(4)}_2}{\partial a^{(3)}_2}
\right)\cdot \frac{\partial a_2^{(3)}}{\partial z_2^{(3)}} \cdot \frac{\partial z_2^{(3)}}{\partial a_1^{(2)}}
\right]\cdot \frac{\partial a_1^{(2)}}{\partial z_1^{(2)}}\cdot \frac{\partial z_1^{(2)}}{\partial \theta_{10}^{(1)}}
\end{align*}
\]
看起來真的是個很複雜的求導公式,但是如果我們自習觀察這個式子和第二層的求導鍊,我們會發現,好像又有很多重複項,比如:
\[\frac{\partial J}{\partial a^{(4)}_1}\cdot\frac{\partial a^{(4)}_1}{\partial z^{(4)}_1}\cdot \frac{\partial z^{(4)}_1}{\partial a^{(3)}_1}
+ \frac{\partial J}{\partial a^{(4)}_2}\cdot \frac{\partial a^{(4)}_2}{\partial z^{(4)}_2}\cdot \frac{\partial z^{(4)}_2}{\partial a^{(3)}_1 }
\]
以及
\[\frac{\partial J}{\partial a^{(4)}_1}\cdot\frac{\partial a^{(4)}_1}{\partial z^{(4)}_1}\cdot \frac{\partial z^{(4)}_1}{\partial a^{(3)}_2}
+ \frac{\partial J}{\partial a^{(4)}_2}\cdot \frac{\partial a^{(4)}_2}{\partial z^{(4)}_2}\cdot \frac{\partial z^{(4)}_2}{\partial a^{(3)}_2}
\]
那又有什麼關系呢?不妨再求一下損失函數J關于第一層權重的偏導:
由于第一層的權重矩陣的大小為:\(2\times4\)屬實有點多,我們這裡隻寫出\(\frac{\partial J}{\theta_{10}^{(1)}}\),其餘的根據求導鍊求是類似的:
\[\begin{align*}
\frac{\partial J}{\partial \theta_{10}^{(1)}} &=
\left[
\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)}) \cdot \theta_{11}^{(2)} \\
+
\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{12}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{22}^{(3)}
\right]\cdot g^{\'}(z_2^{(3)})\cdot \theta_{21}^{(2)}
\right]\cdot g^{\'}(z_1^{(2)})\cdot a_0^{(1)}\\\\
&=\frac{1}{m}\sum_{i=1}^m
\left[
\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)}) \cdot \theta_{11}^{(2)}
\\+
\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{12}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{22}^{(3)}
\right]\cdot g^{\'}(z_2^{(3)})\cdot \theta_{21}^{(2)}
\right]\cdot g^{\'}(z_1^{(2)})\cdot a_0^{(1)}
\end{align*}
\]
好像越算越複雜,确實。
不過這個式子有沒有一些比較好的性質呢?有!
\[\frac{\partial J}{\partial \theta_{10}^{(1)}} = \frac{1}{m} \sum_{i=1}^m\cdot
\left[
(\Theta^{(2)})^T\times(\Theta^{(3)})T\times(a^{(4)}-y^{(i)}) \quad.* \quad g^{\'}(z^{(3)})\quad .* \quad g^{\'}(z^{(2)})
\right]_i \cdot a_0^{(1)}
\]
怎麼能想到這個式子呢?可以仔細看一看上面的求導結果,就會很想向量化。
4.3.4 直覺感受
Neurals fire together if they wire together.
我們不妨把損失函數關于三層的第一個權重的偏導放在一起看看:
\[\begin{align*}
\frac{\partial J}{\partial \theta_{10}^{(3)}} &= \frac{1}{m}\sum_{i=1}^m\left[a_1^{(4)} - y_1^{(i)}\right]a_0^{(3)}\\\\
\frac{\partial J}{\partial \theta^{(2)}_{10}}&=\frac{1}{m}\sum_{i=1}^m\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)})\cdot a^{(2)}_0\\\\
\frac{\partial J}{\partial \theta_{10}^{(1)}}&=\frac{1}{m}\sum_{i=1}^m
\left[
\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{11}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{21}^{(3)}
\right]\cdot g^{\'}(z_1^{(3)}) \cdot \theta_{11}^{(2)}
\\+
\left[
\left(a_1^{(4)} - y_1^{(i)}\right)\cdot \theta_{12}^{(3)}
+ \left(a_2^{(4)} - y_2^{(i)}\right) \cdot \theta_{22}^{(3)}
\right]\cdot g^{\'}(z_2^{(3)})\cdot \theta_{21}^{(2)}
\right]\cdot g^{\'}(z_1^{(2)})\cdot a_0^{(1)}
\end{align*}
\]
好像有些東西在一次又一次的被計算,看不出來規律沒問題,我們再看看我們的求導鍊:
在這裡我們隻關注圖的下半部分,我們會發現:
\[\begin{align*}
\frac{\partial J}{\partial z^{(4)}} &= a^{(4)}-y^{(i)}, we\quad denoted \quad this \quad term \quad by \quad \delta^{(4)}\\\\
\frac{\partial J}{\partial z^{(3)}} &= \delta^{(3)}=(\Theta^{(3)})^T\delta^{(4)} \quad .* \quad g^{\'}(z^{(3)})\\\\
\frac{\partial J}{\partial z^{(2)}} &= \delta^{(2)}=(\Theta^{(2)})^T\delta^{(3)} \quad .* \quad g^{\'}(z^{(2)})
\end{align*}
\]
分别對應上圖下半部分紅色線,綠色線,藍色線劃出的内容,也就是:
同時也能了解:
然後,再看
\[\frac{\partial J}{\partial \theta_{10}^{(1)}} = \frac{1}{m} \sum_{i=1}^m\cdot
\left[
(\Theta^{(2)})^T\times(\Theta^{(3)})T\times(a^{(4)}-y^{(i)}) \quad.* \quad g^{\'}(z^{(3)})\quad .* \quad g^{\'}(z^{(2)})
\right]_i \cdot a_0^{(1)}
\]
會發覺:
\[\frac{\partial J}{\partial \theta_{10}^{(1)}} = \frac{1}{m} \sum_{i=1}^m\cdot \delta^{(2)}_1 \cdot a_0^{(1)}
\]
顯然,其餘的所有權重的偏導都可以寫成這麼一個很簡潔明了的式子。okay,推導過程雖然很繁雜但結果還是挺漂亮的。
我們再回想一下,\(\delta^{(4)}\)說明了我們\(\Theta\)的調整和我們預測值與實際值之間的距離有關,而反向傳播的過程其實正好展現在了\(\delta^{(4)}, \delta^{(3)}, \delta^{(2)}\)的求法上,我們調整\(\Theta\)的值,使得幾個\(\delta\)逐漸減小。
4.3.5 整合
别忘了,我們還有正規化項沒有考慮。考慮正規化項,整合之後:
\[\begin{equation}
\frac{\partial}{\partial \Theta^{(l)}_{ij}}J(\Theta) =
\begin{cases}
\frac{1}{m}\Delta^{(l)}_{ij}+\lambda\Theta^{(l)}_{ij}& if\quad j \ne 0, \\\\
\frac{1}{m}\Delta^{(l)}_{ij}&if\quad j=0
\end{cases}, \\\\
\text{where } \Delta^{(l)}_{ij}=\sum_{i=1}^ma_j^{(l)}*\delta^{(l+1)}
\end{equation}
\]
4.4 整合FP、BP
剛學完BP神經網絡:神經網絡就這?
看完BP算法:啥啥啥?這都啥
推完BP算法:什麼嘛?整個BP算法就鍊式求導法則啊
其實仔細想想,神經網絡好像也就一個多元函數的優化問題,不過上世紀受限于計算能力,沒有興盛起來。而随着計算能力的發展,我們存儲鍊式求導中的每一條邊的值,使得反向傳播的過程成為了可能。也就是為什麼神經網絡在如今流行起來了。
Ref
1 吳恩達機器學習
2 3b1b 深度學習