機器學習 誤差逆傳播演算法 反向傳播演算法

2022-08-21 16:12:12 字數 2993 閱讀 9476

誤差逆傳播演算法(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...