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


  誤差逆傳播算法是迄今最成功的神經網絡學習算法,現實任務中使用神經網絡時,大多使用BP算法進行訓練。
  給定訓練集\(D={(x_1,y_1),(x_2,y_2),......(x_m,y_m)},x_i \in R^d,y_i \in R^l\),即輸入示例由\(d\)個屬性描述,輸出\(l\)個結果。如圖所示,是一個典型的單隱層前饋網絡,它擁有\(d\)個輸入神經元、\(l\)個輸出神經元、\(q\)個隱層神經元,其中,\(\theta_j\)表示第\(j\)個神經元的閾值,\(\gamma_h\)表示隱層第\(h\)個神經元的閾值,輸入層第\(i\)個神經元與隱層第\(h\)個神經元連接的權值是\(v_{ih}\),隱層第\(h\)個神經元與輸出層第\(j\)個神經元連接的權值是\(w_{hj}\)

  於是,按照神經網絡的傳輸法則,隱層第\(h\)個神經元接收到的輸入\(\alpha_h=\sum_{i=1}^dv_{ih}x_i\),輸出\(b_h=f(\alpha_h-\gamma_h)\),輸出層\(j\)第個神經元的輸入\(\beta_j=\sum_{h=1}^qw_{hj}b_h\),輸出\(\widehat{y}_j^k=f(\beta_j-\theta_j)\),其中\(f\)函數是“激活函數”,\(\gamma_h\)\(\theta_j\)分別是隱藏層和輸出層的閾值,選擇Sigmoid函數\(f(x)=\frac{1}{1+e^{-x}}\)作為激活函數。
  對訓練樣例\((x_k,y_k)\),通過神經網絡后的輸出是\(\widehat{y}_k=(\widehat{y}_1^k,\widehat{y}_2^k,......,\widehat{y}_l^k)\),則其均方誤差為

\[E_k=\frac{1}{2}\sum_{j=1}^{l}(\widehat{y}_j^k-y_j^k)^2 \hspace{2cm}(1) $$為了使輸出的均方誤差最小,我們以均方誤差對權值的負梯度方向進行調整,給定學習率$\eta$, $$\Delta w_{ij}=-\eta\frac{\partial E_k}{\partial w_{ij}} \hspace{2cm}(2) $$這里為什么是取負梯度方向呢?因為我們是要是均方誤差最小,而 $w$的更新估計式為$$w=w+\Delta w \hspace{2cm}(3) $$如果,$\frac{\partial E_k}{\partial w_{ij}}>0$,則表明減小$w$才能減小均方誤差,所以$\Delta w$應該小於零,反之,如果$\frac{\partial E_k}{\partial w_{ij}}<0$,則表明增大$w$的值可以減小均方誤差,所以所以$\Delta w$應該大於零,所以在這里取負的偏導,以保證權值的改變是朝着減小均方誤差的方向進行。 &emsp;&emsp;在這個神經網絡中,$E_k$是有關$\widehat{y}_j^k$的函數,$\widehat{y}_j^k$是有關$\beta_j$的函數,而$\beta_j$是有關$w_{ij}$的函數,所以有 $$\frac{\partial E_k}{\partial w_{ij}}=\frac{\partial E_k}{\partial \widehat{y}_j^k}.\frac{\partial \widehat{y}_j^k}{\partial \beta_j}. \frac{\partial \beta_j}{\partial w_{ij}} \hspace{2cm}(4) $$顯然, $$\frac{\partial \beta_j}{\partial w_{ij}}=b_h \hspace{2cm}(5) $$而對Sigmoid函數有 $$f'(x)=f(x)(1-f(x)) \hspace{2cm}(6) $$所以 $$\begin{aligned}g_j&=-\frac{\partial E_k}{\partial\widehat{y}_j^k}. \frac{\partial\widehat{y}_j^k}{\partial\beta_j}\\ &=-(\widehat{y}^k_j-y^k_j)f'(\beta_j-\theta_j)\\ &=-(\widehat{y}^k_j-y^k_j)f(\beta_j-\theta_j)(1-f(\beta_j-\theta_j))\\ &=-(\widehat{y}^k_j-y^k_j)\widehat{y}^k_j(1-\widehat{y}^k_j)\end{aligned} \hspace{2cm} (7) $$將式(7)代入式(3)和式(4),就得到BP算法中關於$\Delta w_{ij}$的更新公式 $$\Delta w_{ij}=\eta g_jb_h \hspace{2cm}(8) $$類似可得, $$\Delta \theta_j=-\eta g_j \hspace{2cm}(9) $$$$\Delta v_{ih}=\eta e_hx_i \hspace{2cm} (10) $$$$\Delta \gamma_h=-\eta e_h \hspace{2cm}(11) $$其中,式(10)和式(11)中 $$\begin{aligned}e_h&=-\frac{\partial E_k}{\partial b_h}.\frac{\partial b_h}{\partial \alpha_h}\\&=-\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j}.\frac{\partial \beta_j}{\partial b_h}f'(\alpha_h-\gamma_h)\\&=\sum_{j=1}^lw_{hi}g_jf'(\alpha_h-\gamma_h)\\&=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j\end{aligned} \hspace{2cm}(12)\]

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


免責聲明!

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



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