zoukankan      html  css  js  c++  java
  • 神经网络 误差逆传播算法推导 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)个隐层神经元,其中,( heta_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)第个神经元的输入(eta_j=sum_{h=1}^qw_{hj}b_h),输出(widehat{y}_j^k=f(eta_j- heta_j)),其中(f)函数是“激活函数”,(gamma_h)( heta_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}=-etafrac{partial E_k}{partial w_{ij}} hspace{2cm}(2) ]

      这里为什么是取负梯度方向呢?因为我们是要是均方误差最小,而
    (w)的更新估计式为

    [w=w+Delta whspace{2cm}(3) ]

    如果,(frac{partial E_k}{partial w_{ij}}>0),则表明减小(w)才能减小均方误差,所以(Delta w)应该小于零,反之,如果(frac{partial E_k}{partial w_{ij}}<0),则表明增大(w)的值可以减小均方误差,所以所以(Delta w)应该大于零,所以在这里取负的偏导,以保证权值的改变是朝着减小均方误差的方向进行。

      在这个神经网络中,(E_k)是有关(widehat{y}_j^k)的函数,(widehat{y}_j^k)是有关(eta_j)的函数,而(eta_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 eta_j}. frac{partial eta_j}{partial w_{ij}} hspace{2cm}(4) ]

    显然,

    [frac{partial eta_j}{partial w_{ij}}=b_h hspace{2cm}(5) ]

    而对Sigmoid函数有

    [f'(x)=f(x)(1-f(x)) hspace{2cm}(6) ]

    所以

    [egin{aligned}g_j&=-frac{partial E_k}{partialwidehat{y}_j^k}. frac{partialwidehat{y}_j^k}{partialeta_j}\ &=-(widehat{y}^k_j-y^k_j)f'(eta_j- heta_j)\ &=-(widehat{y}^k_j-y^k_j)f(eta_j- heta_j)(1-f(eta_j- heta_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 heta_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)中

    [egin{aligned}e_h&=-frac{partial E_k}{partial b_h}.frac{partial b_h}{partial alpha_h}\&=-sum_{j=1}^lfrac{partial E_k}{partial eta_j}.frac{partial eta_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_jend{aligned} hspace{2cm}(12) ]

      至此,误差逆传播算法的推导已经完成,我们可以回过头看看,该算法为什么被称为误差逆传播算法呢?误差逆传播,顾名思义是让误差沿着神经网络反向传播,根据上面的推导, (Delta w_{ij}=-eta(widehat{y}^k_j-y^k_j).frac{partial widehat{y}_j^k}{partial eta_j}.b_h=eta g_jb_h),其中,((widehat{y}^k_j-y^k_j))是输出误差,(frac{partial widehat{y}_j^k}{partial eta_j}) 是输出层节点的输出(y)对于输入(eta)的偏导数,可以看做是误差的调节因子,我们称(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上层节点的输出,算是对于误差逆向传播法表面上的通俗理解,有助于记忆。

  • 相关阅读:
    Java三大特性与实战
    Java数组
    Java流程控制,for,switch,while.break,continue,return
    洛谷——P1498 南蛮图腾
    洛谷——P1010 幂次方
    洛谷——P1147 连续自然数和
    洛谷——P1514 引水入城
    洛谷——1538 迎春舞会之数字舞蹈
    普及练习场之排序Ex
    普及练习场之排序
  • 原文地址:https://www.cnblogs.com/bambipai/p/7922981.html
Copyright © 2011-2022 走看看