神經網路 誤差逆傳播演算法推導 BP演算法

2022-08-05 18:36:16 字數 2712 閱讀 6257

誤差逆傳播演算法是迄今最成功的神經網路學習演算法,現實任務中使用神經網路時,大多使用bp演算法進行訓練。

給定訓練集\(d=,x_i \in r^d,y_i \in r^l\),即輸入示例由\(d\)個屬性描述,輸出\(l\)個結果。如圖所示,是一個典型的單隱層前饋網路,它擁有\(d\)個輸入神經元、\(l\)個輸出神經元、\(q\)個隱層神經元,其中,\(\theta_j\)表示第\(j\)個神經元的閾值,\(\gamma_h\)表示隱層第\(h\)個神經元的閾值,輸入層第\(i\)個神經元與隱層第\(h\)個神經元連線的權值是\(v_\),隱層第\(h\)個神經元與輸出層第\(j\)個神經元連線的權值是\(w_\)。

於是,按照神經網路的傳輸法則,隱層第\(h\)個神經元接收到的輸入\(\alpha_h=\sum_^dv_x_i\),輸出\(b_h=f(\alpha_h-\gamma_h)\),輸出層\(j\)第個神經元的輸入\(\beta_j=\sum_^qw_b_h\),輸出\(\widehat_j^k=f(\beta_j-\theta_j)\),其中\(f\)函式是“啟用函式”,\(\gamma_h\)和\(\theta_j\)分別是隱藏層和輸出層的閾值,選擇sigmoid函式\(f(x)=\frac}\)作為啟用函式。

對訓練樣例\((x_k,y_k)\),通過神經網路後的輸出是\(\widehat_k=(\widehat_1^k,\widehat_2^k,......,\widehat_l^k)\),則其均方誤差為

\[e_k=\frac\sum_^(\widehat_j^k-y_j^k)^2 \hspace(1)

\]為了使輸出的均方誤差最小,我們以均方誤差對權值的負梯度方向進行調整,給定學習率\(\eta\),

\[\delta w_=-\eta\frac} \hspace(2)

\]這裡為什麼是取負梯度方向呢?因為我們是要是均方誤差最小,而

\(w\)的更新估計式為

\[w=w+\delta w\hspace(3)

\]如果,\(\frac}>0\),則表明減小\(w\)才能減小均方誤差,所以\(\delta w\)應該小於零,反之,如果\(\frac}<0\),則表明增大\(w\)的值可以減小均方誤差,所以所以\(\delta w\)應該大於零,所以在這裡取負的偏導,以保證權值的改變是朝著減小均方誤差的方向進行。

在這個神經網路中,\(e_k\)是有關\(\widehat_j^k\)的函式,\(\widehat_j^k\)是有關\(\beta_j\)的函式,而\(\beta_j\)是有關\(w_\)的函式,所以有

\[\frac}=\frac_j^k}.\frac_j^k}. \frac} \hspace(4)

\]顯然,

\[\frac}=b_h \hspace(5)

\]而對sigmoid函式有

\[f'(x)=f(x)(1-f(x)) \hspace(6)

\]所以

\[\beging_j&=-\frac_j^k}. \frac_j^k}\\

&=-(\widehat^k_j-y^k_j)f'(\beta_j-\theta_j)\\

&=-(\widehat^k_j-y^k_j)f(\beta_j-\theta_j)(1-f(\beta_j-\theta_j))\\

&=-(\widehat^k_j-y^k_j)\widehat^k_j(1-\widehat^k_j)\end \hspace (7)\]

將式(7)代入式(3)和式(4),就得到bp演算法中關於\(\delta w_\)的更新公式

\[\delta w_=\eta g_jb_h \hspace(8)

\]類似可得,

\[\delta \theta_j=-\eta g_j \hspace(9)

\]\[\delta v_=\eta e_hx_i \hspace (10)

\]\[\delta \gamma_h=-\eta e_h \hspace(11)

\]其中,式(10)和式(11)中

\[\begine_h&=-\frac.\frac\\&=-\sum_^l\frac.\fracf'(\alpha_h-\gamma_h)\\&=\sum_^lw_g_jf'(\alpha_h-\gamma_h)\\&=b_h(1-b_h)\sum_^lw_g_j\end \hspace(12)

\]至此,誤差逆傳播演算法的推導已經完成,我們可以回過頭看看,該演算法為什麼被稱為誤差逆傳播演算法呢?誤差逆傳播,顧名思義是讓誤差沿著神經網路反向傳播,根據上面的推導, \(\delta w_=-\eta(\widehat^k_j-y^k_j).\frac_j^k}.b_h=\eta g_jb_h\),其中,\((\widehat^k_j-y^k_j)\)是輸出誤差,\(\frac_j^k}\) 是輸出層節點的輸出\(y\)對於輸入\(\beta\)的偏導數,可以看做是誤差的調節因子,我們稱\(g_j\)為“被梯度調節後的誤差”;而\(\delta v_=\eta e_hx_i\),\(e_h=b_h(1-b_h)\sum_^lw_g_j=\frac\sum_^lw_g_j\),所以\(e_h\)可以看做是“調節後的誤差”\(g_j\)通過神經網路後並經過調節的誤差,並且我們可以看出:權值的調節量=學習率x調節後的誤差x上層節點的輸出,算是對於誤差逆向傳播法表面上的通俗理解,有助於記憶。