Lec 4 BP神經網路詳細推導
本篇部落格主要記錄一下Coursera上Andrew機器學習BP神經網路的前向傳播演算法和反向傳播演算法的具體過程及其詳細推導。方便後面手擼一個BP神經網路。
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 深度學習