神經網絡的正向和反向傳播


本文目的:

以自己的理解,大致介紹神經網絡,並梳理神經網絡的正向和反向傳播公式。

神經網絡簡介

神經網絡是機器學習的分支之一,因為大量數據的出現和可供使用以及神經網絡因深度和廣度的增加對於大量數據的可擴展性,目前神經網絡逐漸變成了除常規機器學習方法外的另一個主流。人們所認識的神經網絡一般為Fig. 1所示:

Fig. 1 基本神經網絡結構圖
神經網絡的結構圖由三部分組成,分別是輸入層、輸出層以及隱藏層。對於一個神經網絡來講,層次的結構並不單純是這樣簡單的,目前還有很多種神經網絡的結構,包括不限於卷積神經網絡、循環神經網絡和殘差網絡等。
卷積神經網絡結構圖
循環神經網絡結構圖
殘差網絡結構圖
神經網絡並不單純地是基礎我們常見的神經網絡,因此不要好高騖遠認為自己什么都懂了。神經網絡雖然種類很多並且該學的也很多,但同時也不能着急想一口氣吃個胖子,慢慢來。

前向傳播和反向傳播

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

前向傳播

Fig. 2 典型神經網絡
從Fig. 2可以看到,一個典型的神經網絡一般由輸入層,隱藏層和輸出層組成。而每層與層直接的連線,實際上是一個數學運算,運算的系數的整體稱為神經網絡的參數$\theta$,它其中包含了乘法運算$W$和線性疊加$b$。經過運算我們可以算出隱藏層中間矢量$\vec{z} = [a_4\,a_5\,a_6\,a_7]^T$與輸入$X = [x_1\,x_2\,x_3]^T$的關系: \begin{equation} \vec{z} = W^TX + b \end{equation} 或: \begin{equation} \vec{z} = \theta X \end{equation} 如圖Fig. 3, 當隱藏層很多的時候,我們用參數$W^{[l]}$和$b^{[l]}$來表示是第幾層的參數,因此一般來說中間量$\vec{z}^{[l]}$與前一項$\vec{a}^{[l-1]}$的關系為: \begin{equation} \vec{z}^{[l]} = W^{[l]T}\vec{a}^{[l-1]} + b^{[l]} \end{equation} 而為什么我們叫$\vec{z}^{(l)}$為中間量,並且什么是$\vec{a}$呢?其實在神經網絡里面,每一個圓圈不僅是一個線性的運算,還包含了一個非線性的預算,這個非線性的運算我們可以叫它激勵函數用$g()$來表示。如果沒有涉及這個非線性運算的話,那么無論是多深多廣的神經網絡都可以用一個神經元來替代了(請自行證明),因此神經網絡的正向傳播公式為: \begin{equation} \vec{z}^{[l]} = W^{[l]T}\vec{a}^{[l-1]} + b^{[l]} \end{equation} \begin{equation} \vec{a}^{[l]} = g(\vec{z}^{[l]}) \end{equation}
Fig. 3 多層神經網絡
####反向傳播 反向傳播是矯正神經網絡參數的步驟,同時反向傳播在典型神經網絡里也是一個比較容易出錯的知識點。
Fig. 4 正向反向傳播示意圖
#####Loss函數 由Fig.4 可見,我們已經完成了正向傳播,即已知輸入和參數后算出輸出層的值。但是想計算反向傳播,我們還需要定義Loss函數也就是常說的交叉熵: \begin{equation} -(ylog(a^{[L]}) + (1-y)log(1- a^{[L]})) \end{equation} 但是以上僅是對於一個數據來說的Loss函數,對於多個數據的Loss函數來說我們定義$y^{(i)}$表示其第i個數據,一共m個數據的Loss函數為: \begin{equation} -\frac{1}{m} \sum\limits_{i = 1}^{m} (y^{(i)}\log\left(a^{[L] (i)}\right) + (1-y^{(i)})\log\left(1- a^{[L] (i)}\right)) \end{equation} #####矢量化 完成了Loss函數的定義之后,讓我們深入看Fig. 5用以了解反向傳播的公式:
Fig. 5 反向傳播
我們的目標是求得$\frac{\partial L}{\partial W^{[l]}}$和$\frac{\partial L}{\partial b^{[l]}}$。由正向傳播公式$\vec{Z}^{[l]} = W^{[l]T}\vec{A}^{[l-1]} + b^{[l]}$得知,$\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}$。通過以上公式發現兩個疑惑點,為什么之前公式里的$z$變成了$Z$,同時$a$,變成了$A$呢?並且,$\frac{1}{m}$又是何來呢? 首先解釋$a,z$和$A,Z$的問題: 當我們計算Loss函數的時候我們意識到,我們不僅是有一個數據,我們會有很多很多的數據用來優化神經網絡的參數。使用多個數據有兩個辦法: 1. 使用循環: 但是使用循環有一個缺陷就在於數據太大的時候會大大降低運行時間 2. 矢量化: 將數據全部矢量化,使得去除循環。
矢量化詳解

從輸入\(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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM