反向傳播算法


反向傳播算法, Backpropagation, BP


1986年, Hinton, 深度學習之父, 和他的合作者發表了論文"Learning Representations by Back-propagating errors", 首次系統地描述了如何利用BP算法有訓練神經網絡. 從這一年開始, BP在有監督的神經網絡算法中占着核心地位. 它描述了如何利用錯誤信息, 從最后一層(輸出層)開始到第一個隱層, 逐步調整權值參數, 達到學習的目的.

以MLP為例說明BP的詳細過程. 假設這個多層神經網絡共有L層, 輸入層為layer 1, 輸出層為layer L, 中間的\(L-2\)層為隱層. 第\(l\)層第\(i\)個神經元的凈輸出(過激活函數之前的輸出)為\(net^l_i\), 它的(激活)輸出為\(a^l_i\). 同一層神經元使用相同的激活函數\(f^{l}(net_l)\)

BP算法從整體上來說分為兩步: 前向反饋(feedforward)與反向傳播(Backpropagate).

Feedforward

feedforward 的過程是指信息從輸入層開始單向向前傳播, 經過隱層, 最后到輸出層, 得到整個網絡的輸出. 一句話概括就是第\(l-1\)層的輸出作為第\(l\)層的輸入.

輸入層:

\[a^1 = x \]

其中, \(x\)為輸入的樣本, 一個\(c^1\)維列向量.

隱層:

\[a^l = f^{l-1}(W^la^{l-1} + b^l) \]

\(f^{l-1}\)為第\(l-1\)層的激活函數. \(W^l, b^l\)分別為第\(l\)層的權值矩陣與bias. \(W^l: c^l \times c^{l-1}\), \(b: c^l \times 1\)

輸出層:

\[output = a^L \]

Backpropagation

輸出層的梯度計算

錯誤信息指的是網絡的輸出與目標值的差異. 差異的大小用損失函數表示. 先考慮在單個樣本\(x\)上的損失:

\[J = J(x, y, W^L, W^{L-1}, \dots, W^1, b^L, b^{L-1}, \dots, b^1) \]

它是一個關於輸入樣本\(x\), 目標值\(y\), 和神經網絡參數\(W,b\)的多變量函數.

然后根據\(J\)調整輸出層layer \(L\)的參數\(W^L, b^l\). 先從單個參數開始, 一步步地從實數計算到矩陣計算. 第\(L\)層第\(i\)個神經元的權值參數為\(w^L_i\), 它的第\(j\)個值為\(w^L_{ij}\). 利用chain rule求\(J\)關於它的偏導:
\begin{equation}\label{wholechain}
\frac {\partial J}{\partial w^L_{ij}} = \frac {\partial J}{\partial net^L_{i}} \frac {\partial net^L}{\partial w^L_{ij}}
\end{equation}

\(\frac {\partial J}{\partial net^L_{i}}\)這部分用\(\delta^L_i\)表示, 稱為這個神經元的敏感度, 什么對什么的敏感度呢? 錯誤程度對凈輸出\(net\)的敏感度.
\begin{equation}\label{sensitivityOfLi}
\delta^L_i = \frac {\partial J}{\partial net^L_i} = \frac {\partial J}{\partial a^L_i} \frac{\partial a^L_i}{\partial net^L_i} = \frac {\partial J}{\partial a^L_i} f^{L'}(net^L_i)
\end{equation}

\(L-1\)層的輸出傳入\(L\)層的時候, 與\(w^L_{ij}\)相乘的值為\(a^{L-1}_j\)
\begin{equation}\label{weightOutput}
\frac {\partial net^L}{\partial w^L_{ij}} = a^{L-1}-j
\end{equation}

\((\ref{weightOutput})\)\((\ref{sensitivityOfLi})\)代入\((\ref{wholechain})\)得:
\begin{equation}\label{wholechain2}
\Delta w^L_{ij} = \frac {\partial J}{\partial w^L{ij}} = \delta^L_i a^{L-1}_j
\end{equation}

然后算\(b^L_i\)的偏導:

\[\Delta b^L_i = \frac {\partial J}{\partial b^L_i} = \frac {\partial J}{\partial net^L_{i}} \frac {\partial net^L}{\partial b^L_i} = \delta^L_i \]

也就是說神經元的\(bias\)偏導值等於它的敏感度\(\delta\).

接下來看整個神經元的權值梯度:

\[\Delta w^L_i = \left[\begin{matrix} \Delta w^L_{i1}\\ \Delta w^L_{i2}\\ \vdots \\ \Delta w^L_{ic^{L-1}} \end{matrix}\right] = \delta^L_i a^{L-1} \]

然后是整個第\(L\)層的權值梯度:

\[\Delta w^L = \left[\begin{matrix} \Delta {w^L_{1}}^T\\ \Delta {w^L_{2}}^T\\ \vdots \\ \Delta {w^L_{c^L}}^T \end{matrix}\right] = \delta^L {a^{L-1}}^T \]

隱層的梯度計算

隱層的計算比輸出層要復雜一些. 先計算第\(l\)層第\(j\)個神經元的敏感度.

\[\delta^{l}_j = \frac {\partial J}{\partial net^l_j} = \frac {\partial J}{\partial a^l_j} \frac {\partial a^l_j}{\partial net^l_j} = \frac {\partial J}{\partial a^l_j} f^{l'}(net^l_j) \]

麻煩的一部分就是\(\frac {\partial J}{\partial a^l_j}\). 因為\(a^l_j\)會作為輸入的一部分傳入到下一層與它相連的所有神經元里. 因為這里是以全連接的MLP為例, 所以是\(l+1\)層的所有神經元, 若不是全連接層, 如conv層, 就不是\(l+1\)層的所有神經元.

\[\frac {\partial J}{\partial a^l_j} = \sum_{i = 1}^{c^{l+1}} \frac {\partial J} {\partial net^{l+1}_i} \frac {\partial net^{l+1}_i}{\partial a^{l}_j} = \sum_{i = 1}^{c^{l+1}} \delta^{l+1}_i w^{l+1}_{ij} \]

代入上一個式子得:

\[\delta^{l}_j = \frac {\partial J}{\partial net^l_j} = \sum_{i = 1}^{c^{l+1}} \delta^{l+1}_i w^{l+1}_{ij} f^{l'}(net^l_j) \]

這是一個很重要的式子, 因為它說明\(l\)層的神經元敏感度與第\(l+1\)層中跟它連接的神經元敏感度的加權和成正比.

\(l\)層的敏感度為:

\[\delta^{l} = W^{l + 1} \delta^{l + 1} \circ f^{l'}(net^l_j) \]

\(\circ\)代表element-wise向量乘法, 例如\((a_1, a_2)\circ(b_1, b_2) = (a_1b_1, a_2b_2)\).

根據之前推導過的輸出層的形式, 可以直接寫出第\(l\)層的權值梯度

\[\Delta w^l = \delta^l {a^{l-1}}^T \]

bias的梯度值就是當前層的敏感度:

\[\Delta b^l = \delta^l \]

更新參數

\[W^l \gets W^l - \Delta W^l \]

\[b^l \gets b^l - \Delta b^l \]


以上就是BP算法的核心推導過程了. # 需要記住的要點 可以看出**它的關鍵就在於各層神經元敏感度的計算**. 需要記住**第$l$層的神經元敏感度與第$l+1$層與之連接的神經元敏感度的加權和成正比. 比例因子為各自激活函數的導數值**, 即 $$ \delta^l = W^{l+1} \delta^{l+1} \circ {f^l}'(net^l) $$ 得到敏感度后就可以得到梯度值: $$ \Delta W^l = \delta^l {a^{l-1}}^T $$ $$ \Delta b^l = \delta^l $$


免責聲明!

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



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