本文目的:
以自己的理解,大致介紹神經網絡,並梳理神經網絡的正向和反向傳播公式。
神經網絡簡介
神經網絡是機器學習的分支之一,因為大量數據的出現和可供使用以及神經網絡因深度和廣度的增加對於大量數據的可擴展性,目前神經網絡逐漸變成了除常規機器學習方法外的另一個主流。人們所認識的神經網絡一般為Fig. 1所示:




前向傳播和反向傳播
說起典型的神經網絡的分析,那么就不得不提到前向傳播和反向傳播。前向傳播使得輸入可以通過神經網絡得到輸出,輸出和真實值可以反向矯正神經網絡的參數,使得得到一個適合具體問題的神經網絡。
前向傳播




矢量化詳解
從輸入\(X\)開始,我們的每個輸入\(X\)都有很多特征\(X = [x_1\,x_2\,x_3\,...\,x_n]^T\)而我們也會有很多的輸入,我們組成新的輸入\(X = [X^{(1)}\,X^{(2)}\,...\,X^{(m)}]\),因此\(X\)包含了所有的數據,每一列是一個數據,每個數據包含n個特征,一共有m個數據。因此\(Z = [z^{(1)}\,z^{(2)}\,...\,z^{(m)}]\),\(A = [a^{(1)}\,a^{(2)}\,...\,a^{(m)}]\)由此我們完成了矢量化。盡管使用了矢量化,正向傳播的公式也沒有變,\(b^{[l]}\)也可以通過python的廣播來完成:
\begin{equation}
\vec{A}^{[l]} = W{[l]T}\vec{A}{[l-1]} + b^{[l]}
\end{equation}
\begin{equation}
\vec{A}^{[l]} = g(\vec{Z}^{[l]})
\end{equation}
但是,因為參數\(W\in R^{l \times l-1}\)和\(b \in R^l\)的維度沒有變化,當使用反向傳播計算\(\frac{\partial L}{\partial W^{[l]}}\)和\(\frac{\partial L}{\partial b^{[l]}}\)的時候,我們需要乘\(\frac{1}{m}\):
\(\frac{\partial L}{\partial Z^{[l]}}A^{[l-1]T} = [dz^{[l](1)}\,...\,dz^{[l](m)}][a^{[l-1](1)}\,...\,a^{[l-1](m)}]^T\)
\(\frac{\partial L}{\partial Z^{[l]}}A^{[l-1]T} = dz^{[l](1)}a^{[l-1](1)} + ... +dz^{[l](m)}a^{[l-1](m)} = m\frac{\partial L}{\partial W^{[l]}}\)
同理,
\(\frac{\partial L}{\partial Z^{[l]}} = [dz^{[l](1)}\,...\,dz^{[l](m)}]\)
\(\frac{\partial L}{\partial b^{[l]}} = \frac{1}{m} \sum_{i = 1}^{m} dZ^{[l](i)}\)
反向傳播公式
目前我們得到了:\(\frac{\partial L}{\partial b^{[l]}}\) = \(\frac{1}{m} \sum_{i = 1}^{m} dZ^{[l](i)}\),\(\frac{\partial L}{\partial W^{[l]}}\) = \(\frac{1}{m}\frac{\partial L}{\partial Z^{[l]}}A^{[l-1]T}\)(為什么\(A^{[l-1]}是要轉置的呢?\)),但是為了計算\(\frac{\partial L}{\partial W^{[l]}}\)和\(\frac{\partial L}{\partial b^{[l]}}\),我們還需要求得\(\frac{\partial L}{\partial Z^{[l]}}\)。
正向傳播公式:\(A^{[l]} = g(Z^{[l]})\),\(\vec{Z}^{[l]} = W^{[l]T}\vec{A}^{[l-1]} + b^{[l]}\)
\begin{equation}
dA^{[L]} = \frac{\partial loss}{\partial A^{[L]}}
\end{equation}
\begin{equation}
dZ^{[l]} = dA{[l]}\dot{g(Z{[l]})}
\end{equation}
\begin{equation}
dA^{[l-1]} = W{[l]T}dZ{[l]}
\end{equation}
\begin{equation}
\frac{\partial L}{\partial W^{[l]}} = \frac{1}{m}\frac{\partial L}{\partial Z{[l]}}A{[l-1]T}
\end{equation}
\begin{equation}
\frac{\partial L}{\partial b^{[l]}} = \frac{1}{m} \sum_{i = 1}^{m} dZ^{[l] (i)}
\end{equation}