反向傳播BP算法

前向傳播模型

通常咱們使用的公式是:
\[ a=\frac{1}{1+\exp \left(-\left(w^{T} x+b\right)\right)} = \frac{1}{1+\exp \left(-\left[w^{T} \quad b\right] \cdot[x \quad 1]\right)} \]
對於隱層有多個神經元的狀況就是:
\[ \begin{array}{l}{a_{1}=\frac{1}{1+\exp \left(w^{(1) T} x+b_{1}\right)}} \\ {\vdots} \\ {a_{m}=\frac{1}{1+\exp \left(w^{(m) T} x+b_{m}\right)}}\end{array} \]
記爲:\(z=W x+b\)
\[ \left[ \begin{array}{c}{a^{(1)}} \\ {\vdots} \\ {a^{(m)}}\end{array}\right]=\sigma(z)=\sigma(W x+b) \]網絡

反向傳播中的微積分計算

如今假設咱們有一個三層神經網絡,咱們簡單的表示成:
\[ C\left(w_{1}, b_{1}, w_{2}, b_{2}, w_{3}, b_{3}\right) \]
咱們須要調整的就是這些變量,咱們的目的就是但願這些變量做爲參數,損失函數梯度降低的最快,函數

如今假設咱們每層只有一個神經元,咱們將神經網絡最後一層得神經元用 \(a^{(L)}\)來表示,這一個損失函數咱們能夠表示成:\(\operatorname{cost} \longrightarrow C_{0}(\ldots)=\left(a^{(L)}-y\right)^{2}\)優化

咱們從倒數第二層 \(a^{(L-1)}\)\(a^{(L)}\) 層的時候,由下面的公示的獲得:
\[ \begin{aligned} z^{(L)} &=w^{(L)} a^{(L-1)}+b^{(L)} \\ a^{(L)} &=\sigma\left(z^{(L)}\right) \end{aligned} \]
這個是前向傳播的公式:如今咱們想要損失函數降低的越快,那麼 \(C\)\(w\) 越敏感,降低得越快。這裏咱們將上面的求導用鏈式法則,只是簡單的列出來,
\[ \frac{\partial C_{0}}{\partial w^{(L)}}=\frac{\partial z^{(L)}}{\partial w^{(L)}} \frac{\partial a^{(L)}}{\partial z^{(L)}} \frac{\partial C 0}{\partial a^{(L)}} \]
如今咱們分別對上面公式後面的三個求導:
\[ \begin{aligned} \frac{\partial C_0}{\partial a^{(L)}} &=2\left(a^{(L)}-y\right) \\ \frac{\partial a^{(L)}}{\partial z^{(L)}} &=\sigma^{\prime}\left(z^{(L)}\right) \\ \frac{\partial z^{(L)}}{\partial w^{(L)}} &=a^{(L-1)} \end{aligned} \]
而後咱們獲得下面的公式:
\[ \frac{\partial C_{0}}{\partial w^{(L)}}=\frac{\partial z^{(L)}}{\partial w^{(L)}} \frac{\partial a^{(L)}}{\partial z^{(L)}} \frac{\partial C _{0}}{\partial a^{(L)}}=a^{(L-1)} \sigma^{\prime}\left(z^{(L)}\right) 2\left(a^{(L)}-y\right) \]
對於這個式子,說明了梯度與哪些因素相關:因爲上面的式子,咱們只考慮了最終輸出的一個元素,因爲最後的網絡輸出的是一層,因此最後一層的神經元求得偏置應該是:
\[ \frac{\partial C}{\partial w^{(L)}}=\frac{1}{n} \sum_{k=0}^{n-1} \frac{\partial C_{k}}{\partial w^{(L)}} \]
上述只是對一個偏置 \(w(L)\) 求梯度,而咱們要對全部的偏置求梯度,那就是:
\[ \nabla C=\left[ \begin{array}{c}{\frac{\partial C}{\partial w^{(1)}}} \\ {\frac{\partial C}{\partial b^{(1)}}} \\ {\vdots} \\ {\frac{\partial C}{\partial w^{(L)}}} \\ {\frac{\partial C}{\partial b^{(L)}}}\end{array}\right] \]spa

每層有多個神經元時

前面咱們假設的是每層只有一個神經元,如今咱們假設每層有多個神經元,咱們表示神經網絡以下:blog

咱們下一層的計算方法本質上是同樣的:
\[ z_{j}^{(L)}=w_{j 0}^{(L)} a_{0}^{(L-1)}+w_{j 1}^{(L)} a_{1}^{(L-1)}+w_{j 2}^{(L)} a_{2}^{(L-1)}+b_{j}^{(L)} \]class

\[ a_{j}^{(L)}=\sigma\left(z_{j}^{(L)}\right) \]變量

上面的公式若是寫成向量的形式,本質上與每層只有一個神經元是同樣的。神經網絡

此時咱們的損失函數就是:
\[ C_{0}=\sum_{j=0}^{n_{L}-1}\left(a_{j}^{(L)}-y_{j}\right)^{2} \]
損失函數對偏置求導:
\[ \frac{\partial C_{0}}{\partial w_{j k}^{(L)}}=\frac{\partial z_{j}^{(L)}}{\partial w_{j k}^{(L)}} \frac{\partial a_{j}^{(L)}}{\partial z_{j}^{(L)}} \frac{\partial C_{0}}{\partial a_{j}^{(L)}} \]
這個公式和每層只有一個神經元本質是同樣的。方法

這裏咱們求的是最後一層,而反向傳播的本質是要不斷的向後,也就是從最後一層到倒數第二層,一直反向。上面咱們求的是倒數第二層到最後一層的 \(w_{j k}^{(L)}\) 對最後一層損失函數的影響,那麼再日後該怎麼計算呢?因此咱們要知道倒數第二層的指望值,因此咱們用最後一層對倒數第二層求偏導:
\[ \frac{\partial C_{0}}{\partial a_{k}^{(L-1)}}=\sum_{j=0}^{n_{L}-1} \frac{\partial z_{j}^{(L)}}{\partial a_{k}^{(L-1)}} \frac{\partial a_{j}^{(L)}}{\partial z_{j}^{(L)}} \frac{\partial C_{0}}{\partial a_{j}^{(L)}} \]
這樣咱們能夠獲得指望的 \(a ^{(L-1)}\), 也就算到了倒數第二層,而後咱們再用這一層繼續日後修正神經網絡中的參數就能夠了。im

本質上就是,每一層的損失函數有三個參數:
\[ \begin{aligned} z^{(L)} &=w^{(L)} a^{(L-1)}+b^{(L)} \\ a^{(L)} &=\sigma\left(z^{(L)}\right) \end{aligned} \]
分別是 \(w^{(L)}\)\(a^{(L-1)}\) 以及$ b^{(L)}$. 因此咱們對他們三個求偏導,也就是梯度降低求最優解來優化這三個參數。

相關文章
相關標籤/搜索