誤差逆傳播演算法(error backpropagation,bp)是神經網路中常用的傳播演算法。bp演算法不僅可以應用於多層前饋神經網路,還可以應用於其他型別的神經網路,如訓練遞迴神經網路。通常所說的「bp網路」一般是指用bp演算法訓練的多層前饋神經網路。
給定訓練集 $ d=\left \,y_),(x_,y_),..., (x_,y_)\right \},x_\in \mathbb^,y_\in \mathbb^ $ ,即輸入由 $ d $ 個屬性描述,輸出 $ l $ 維實值向量。為便於討論,給出有 $ d $ 個神經元、 $ l $ 個輸出神經元、 $ q $ 個隱層神經元的多層前饋網路結構,其中輸出層第 $ j $ 個神經元的閾值用 $ \theta _ $ 表示,隱層第 $ h $ 個神經元的閾值用 $ \gamma _ $ 表示。輸入層第 $ i $ 個神經元與隱層第 $ h $ 個神經元之間的連線權重為 $ v_ $ ,隱層第 $ h $ 個神經元與輸出層第 $ j $ 個神經元之間的連線權重為 $ w_ $ 。
記隱層第 $ h $ 個神經元接收到的輸入為
$$\begin
\alpha _=\sum_^v_x_\nonumber
\end
$$輸出層第 $ j $ 個神經元接收到的出入為
$$\begin
\beta _=\sum_^w_b_\nonumber
\end
$$其中 $ b_ $ 為隱層第 $ h $ 個神經元的輸出。假設隱層和輸出層的啟用函式為sigmoid函式。
對訓練集 $ (x_, y_) $ ,假定神經網路的輸出為
$$\begin
\hat y_=\left (\hat y_^, \hat y_^, ..., \hat y_^ \right )\nonumber
\end$$即
$$\begin
\hat y_^=f\left ( \beta _-\theta _ \right )
\end
$$則網路在 $ (x_, y_) $ 上的均方誤差為
$$\begin
e_=\frac\sum_^\left ( \hat y_^- y_^ \right )^
\end
$$網路中需要更新的引數個數為 $ \left ( d+l+1 \right )q+l $ 個:輸入層到隱層的 $ d\times q $ 個權值、隱層到輸出層的 $ q\times l $ 個權值、 $ q $ 個隱層神經元的閾值, $ l $ 個輸出層神經元的閾值。bp是乙個迭代學習演算法,在迭代的每一輪中,採用廣義的感知機學習規則對引數進行更新估計。對任意引數 $ v $ 的跟新估計為
$$\begin
v\leftarrow v+\delta v\nonumber
\end
$$bp演算法基於梯度下降策略,以目標的負梯度方向對引數進行調整,對式子(2)的 $ e_ $ ,給定學習率 $ \eta $ ,有
$$\begin
\delta w_=-\eta \frac}}
\end
$$注意到, $ w_ $ 先影響到第 $ j $ 個輸出層神經元的輸入值 $ \beta _ $ ,再影響到其輸出值 $ \hat y_^ $ ,然後影響到 $ e_ $ ,有
$$\begin
\frac}}=\frac}^}\cdot \frac^}}\cdot \frac}}
\end
$$根據 $ \beta _ $ 定義,顯然有:
$$\begin
b_= \frac}}}
\end
$$sigmoid函式的導數為:
$$\begin
'\left ( x \right )=f\left ( x \right )\left ( 1-f\left ( x \right ) \right )
\end
$$於是根據式子(1)和(2)有
$$\begin
g_ \nonumber
&=-\frac}^}\cdot \frac^}}\nonumber\\
&=-\left ( \hat y_^- y_^\right )'\left ( \beta _-\theta _ \right )\nonumber\\
&=\hat y_^\left ( 1- \hat y_^\right )\left ( y_^ -\hat y_^\right )
\end
$$將式子 (5)、(7)帶入式子(4),再帶入式子(3)得到bp演算法中關於 $ w_ $ 的跟新公式:
$$\begin
\delta w_=\eta g_b_
\end
$$類似地可以得到:
$$\begin
\theta _=-\eta g_
\end
$$$$
\begin
v _=-\eta e_x_
\end
$$$$
\begin
\gamma _=-\eta e_
\end
$$其中式子(10)、(11)中的 $ e_ $ 為,
$$\begin
e_\nonumber
&=-\frac}}\cdot \frac}}\nonumber\\
&=-\sum_^\frac}}\cdot \frac}}'\left ( \alpha _-\gamma _ \right )\nonumber\\
&=\sum_^w_g_'\left ( \alpha _-\gamma _ \right )\nonumber\\
&=b_\left ( 1- b_\right )\sum_^w_g_
\end
$$對於每乙個訓練樣本,bp演算法執行的步驟為:先將輸入樣本提供給輸入層神經元,然後逐層將訊號前傳,指導產生輸出層的結果;然後計算出輸出層的誤差,再將誤差逆向傳播到隱層神經元,最後根據隱層神經元的誤差來對連線權重和閾值(偏量)進行調整。該過程為迴圈進行,直到滿足某一過程為止。
BP誤差反向傳播演算法
bp演算法通過將輸出誤差反向傳播,將誤差分配到每個權值上,利用梯度更新對所有引數進行調整以達到輸出累計誤差最小 來自andrew ng的machine learning課程 為了簡化概念,先不加上偏置單元 符號介紹 zl i 第 l 層第 i節點的誤差zl i 第 l 層第i節點的輸入值al i 第...
反向誤差傳播演算法學習筆記
構建cost function的表示式的函式,其神經網路圖如下,其 1和 2已經訓練好。輸入x為5000 400的矩陣 5000個元素,400個畫素 y為5000 1的矩陣 其中有5000個結果,以1,2,3,4,5,6,7,9,10 代表0 為label a1 ones size x,1 1 x ...
python實現誤差逆傳播演算法
最近學習神經網路,自己參照源 把誤差逆傳播重新寫了一遍,其實挺簡單的,關鍵是要把逆傳播的幾個過程搞清楚以及每一步是為了得到什麼,然後知道numpy的矩陣運算操作,廢話不多說,直接上 反向傳播演算法 defbackpro weights,bs,x,y,nums 逆傳播計算引數的梯度 param wei...