誤差逆傳播算法(error BackPropagation,BP)是神經網絡中常用的傳播算法。BP算法不僅可以應用於多層前饋神經網絡,還可以應用於其他類型的神經網絡,如訓練遞歸神經網絡。通常所說的“BP網絡”一般是指用BP算法訓練的多層前饋神經網絡。
給定訓練集 $ D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),..., (x_{m},y_{m})\right \},x_{i}\in \mathbb{R}^{d},y_{i}\in \mathbb{R}^{l} $ ,即輸入由 $ d $ 個屬性描述,輸出 $ l $ 維實值向量。為便於討論,給出有 $ d $ 個神經元、 $ l $ 個輸出神經元、 $ q $ 個隱層神經元的多層前饋網絡結構,其中輸出層第 $ j $ 個神經元的閾值用 $ \theta _{j} $ 表示,隱層第 $ h $ 個神經元的閾值用 $ \gamma _{h} $ 表示。輸入層第 $ i $ 個神經元與隱層第 $ h $ 個神經元之間的連接權重為 $ v_{ih} $ ,隱層第 $ h $ 個神經元與輸出層第 $ j $ 個神經元之間的連接權重為 $ w_{ih} $ 。
記隱層第 $ h $ 個神經元接收到的輸入為
$$
\begin{align}
\alpha _{h}=\sum_{i=1}^{d}v_{ih}x_{i}\nonumber
\end{align}
$$
輸出層第 $ j $ 個神經元接收到的出入為
$$
\begin{align}
\beta _{j}=\sum_{h=1}^{q}w_{hj}b_{h}\nonumber
\end{align}
$$
其中 $ b_{h} $ 為隱層第 $ h $ 個神經元的輸出。假設隱層和輸出層的激活函數為Sigmoid函數。
對訓練集 $ (x_{k}, y_{k}) $ ,假定神經網絡的輸出為
$$
\begin{align}
\hat y_{k}=\left (\hat y_{1}^{k}, \hat y_{2}^{k}, ..., \hat y_{l}^{k} \right )\nonumber
\end{align}
$$
即
$$
\begin{align}
\hat y_{l}^{k}=f\left ( \beta _{j}-\theta _{j} \right )
\end{align}
$$
則網絡在 $ (x_{k}, y_{k}) $ 上的均方誤差為
$$
\begin{align}
E_{k}=\frac{1}{2}\sum_{j=1}^{l}\left ( \hat y_{j}^{k}- y_{j}^{k} \right )^{2}
\end{align}
$$
網絡中需要更新的參數個數為 $ \left ( d+l+1 \right )q+l $ 個:輸入層到隱層的 $ d\times q $ 個權值、隱層到輸出層的 $ q\times l $ 個權值、 $ q $ 個隱層神經元的閾值, $ l $ 個輸出層神經元的閾值。BP是一個迭代學習算法,在迭代的每一輪中,采用廣義的感知機學習規則對參數進行更新估計。對任意參數 $ v $ 的跟新估計為
$$
\begin{align}
v\leftarrow v+\Delta v\nonumber
\end{align}
$$
BP算法基於梯度下降策略,以目標的負梯度方向對參數進行調整,對式子(2)的 $ E_{k} $ ,給定學習率 $ \eta $ ,有
$$
\begin{align}
\Delta w_{hj}=-\eta \frac{\partial E_{k}}{\partial w_{hj}}
\end{align}
$$
注意到, $ w_{hj} $ 先影響到第 $ j $ 個輸出層神經元的輸入值 $ \beta _{j} $ ,再影響到其輸出值 $ \hat y_{j}^{k} $ ,然后影響到 $ E_{k} $ ,有
$$
\begin{align}
\frac{\partial E_{k}}{\partial w_{hj}}=\frac{\partial E_{k}}{\partial \hat y_{j}^{k}}\cdot \frac{\partial \hat y_{j}^{k}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial w_{hj}}
\end{align}
$$
根據 $ \beta _{j} $ 定義,顯然有:
$$
\begin{align}
b_{h}= \frac{\partial \beta _{j}}{\partial w_{hj}}{\partial w_{hj}}
\end{align}
$$
Sigmoid函數的導數為:
$$
\begin{align}
{f}'\left ( x \right )=f\left ( x \right )\left ( 1-f\left ( x \right ) \right )
\end{align}
$$
於是根據式子(1)和(2)有
$$
\begin{align}
g_{j} \nonumber
&=-\frac{\partial E_{k}}{\partial \hat y_{j}^{k}}\cdot \frac{\partial \hat y_{j}^{k}}{\partial \beta _{j}}\nonumber\\
&=-\left ( \hat y_{j}^{k}- y_{j}^{k}\right ){f}'\left ( \beta _{j}-\theta _{j} \right )\nonumber\\
&=\hat y_{j}^{k}\left ( 1- \hat y_{j}^{k}\right )\left ( y_{j}^{k} -\hat y_{j}^{k}\right )
\end{align}
$$
將式子 (5)、(7)帶入式子(4),再帶入式子(3)得到BP算法中關於 $ w_{hj} $ 的跟新公式:
$$
\begin{align}
\Delta w_{hj}=\eta g_{j}b_{h}
\end{align}
$$
類似地可以得到:
$$
\begin{align}
\theta _{j}=-\eta g_{j}
\end{align}
$$
$$
\begin{align}
v _{ih}=-\eta e_{h}x_{i}
\end{align}
$$
$$
\begin{align}
\gamma _{h}=-\eta e_{h}
\end{align}
$$
其中式子(10)、(11)中的 $ e_{h} $ 為,
$$
\begin{align}
e_{h}\nonumber
&=-\frac{\partial E_{k}}{\partial b_{h}}\cdot \frac{\partial b_{h}}{\partial \alpha _{h}}\nonumber\\
&=-\sum_{j=1}^{l}\frac{\partial E_{k}}{\partial \beta _{j}}\cdot \frac{\partial \beta _{j}}{\partial b_{h}}{f}'\left ( \alpha _{h}-\gamma _{h} \right )\nonumber\\
&=\sum_{j=1}^{l}w_{hj}g_{j}{f}'\left ( \alpha _{h}-\gamma _{h} \right )\nonumber\\
&=b_{h}\left ( 1- b_{h}\right )\sum_{j=1}^{l}w_{hj}g_{j}
\end{align}
$$
對於每一個訓練樣本,BP算法執行的步驟為:先將輸入樣本提供給輸入層神經元,然后逐層將信號前傳,指導產生輸出層的結果;然后計算出輸出層的誤差,再將誤差逆向傳播到隱層神經元,最后根據隱層神經元的誤差來對連接權重和閾值(偏量)進行調整。該過程為循環進行,直到滿足某一過程為止。