热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

反向传播(BackPropagation)

在利用梯度下降法对神经网络权重等参数进行训练时,需要利用反向传播去计算损失函数对权重参数的偏导数。反向传播下面分析是如何反向传播的(分析时不考虑偏置项),参考上图,①对于一个神经元

在利用梯度下降法对神经网络权重等参数进行训练时,需要利用反向传播去计算损失函数对权重参数的偏导数。

反向传播

下面分析是如何反向传播的(分析时不考虑偏置项),
在这里插入图片描述

参考上图,
① 对于一个神经元
   
   
     
     
       j
     
     
     
      j      
   
   j,它的输出被定义为,

   
     
     
       
       
         
          (1.1)
         
       
       
         
         
           
            O
           
           
            j
           
         
         
           =
         
         
           φ
         
         
           (
         
         
           n
         
         
           e
         
         
           
            t
           
           
            j
           
         
         
           )
         
         
           =
         
         
           φ
         
         
           (
         
         
           
            ∑
           
           
           
             k
           
           
             =
           
           
             1
           
           
           
            N
           
         
         
           
            w
           
           
           
             k
           
           
             j
           
           
         
         
           
            O
           
           
            k
           
         
         
           )
         
         
       
       
     
     
        O_j = \varphi(net_j)=\varphi(\sum_{k=1}^N w_{kj}O_k) \tag{1.1}
     
     
    Oj=φ(netj)=φ(k=1∑NwkjOk)(1.1)
其中,
   
   
     
     
       
        w
       
       
       
         k
       
       
         j
       
       
     
     
     
      w_{kj}      
   
   wkj表示神经元
   
   
     
     
       k
     
     
     
      k      
   
   k到
   
   
     
     
       j
     
     
     
      j      
   
   j之间的权重,
   
   
     
     
       
        O
       
       
        k
       
     
     
     
      O_k      
   
   Ok是上一层神经元的输出。
   
   
     
     
       φ
     
     
     
      \varphi      
   
   φ为激活函数,这里取为
   
   
     
     
       l
     
     
       o
     
     
       g
     
     
       i
     
     
       s
     
     
       t
     
     
       i
     
     
       c
     
     
     
      logistic      
   
   logistic函数,

   
     
     
       
       
         
          (1.2)
         
       
       
         
         
           φ
         
         
           (
         
         
           z
         
         
           )
         
         
           =
         
         
           
            1
           
           
           
             1
           
           
             +
           
           
             
              e
             
             
             
               −
             
             
               z
             
             
           
           
         
         
       
       
     
     
        \varphi(z)=\frac{1}{1+ e^{-z} } \tag{1.2}
     
     
    φ(z)=1+e−z1(1.2)

   
   
     
     
       l
     
     
       o
     
     
       g
     
     
       i
     
     
       s
     
     
       t
     
     
       i
     
     
       c
     
     
     
      logistic      
   
   logistic函数的求导公式为,

   
     
     
       
       
         
          (1.3)
         
       
       
         
         
           
           
             d
           
           
             φ
           
           
             
              (
             
             
              z
             
             
              )
             
           
           
           
           
             d
           
           
             z
           
           
         
         
           =
         
         
           φ
         
         
           
            (
           
           
            z
           
           
            )
           
         
         
           
            (
           
           
            1
           
           
            −
           
           
            φ
           
           
           
             (
           
           
             z
           
           
             )
           
           
           
            )
           
         
         
       
       
     
     
        \dfrac {d\varphi \left( z\right) }{dz}=\varphi\left( z\right) \left( 1-\varphi\left( z\right) \right) \tag{1.3}
     
     
    dzdφ(z)=φ(z)(1−φ(z))(1.3)
② 损失函数定义为,

   
     
     
       
       
         
          (1.4)
         
       
       
         
         
           E
         
         
           =
         
         
           
            1
           
           
            2
           
         
         
           
           
             (
           
           
             t
           
           
             −
           
           
             y
           
           
             )
           
           
           
            2
           
         
         
       
       
     
     
        E=\dfrac {1}{2}\left( t-y\right) ^{2} \tag{1.4}
     
     
    E=21(t−y)2(1.4)
其中,
   
   
     
     
       y
     
     
     
      y      
   
   y为输出层的输出,
   
   
     
     
       t
     
     
     
      t      
   
   t为期望输出。

考虑
   
   
     
     
       
        w
       
       
       
         k
       
       
         j
       
       
     
     
     
      w_{kj}      
   
   wkj对于
   
   
     
     
       E
     
     
     
      E      
   
   E的影响,是
   
   
     
     
       
        O
       
       
        j
       
     
     
     
      O_j      
   
   Oj间接影响的,因此可得下面的公式(这里假设
   
   
     
     
       j
     
     
     
      j      
   
   j前一层神经元为
   
   
     
     
       i
     
     
     
      i      
   
   i,即求对
   
   
     
     
       
        w
       
       
       
         i
       
       
         j
       
       
     
     
     
      w_{ij}      
   
   wij的偏导数),

   
     
     
       
       
         
          (1.5)
         
       
       
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               i
             
             
               j
             
             
           
           
         
         
           =
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
              j
             
           
           
         
         
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
              j
             
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               i
             
             
               j
             
             
           
           
         
         
       
       
     
     
        \dfrac {\partial E}{\partial w_{ij}}=\dfrac {\partial E}{\partial O_{j}}\dfrac {\partial O_{j}}{\partial net_{j}}\dfrac {\partial net_{j}}{\partial w_{ij}} \tag{1.5}
     
     
    ∂wij∂E=∂Oj∂E∂netj∂Oj∂wij∂netj(1.5)
其中,后两个偏导数可以直接求出,
   
   
     
     
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
       
       
         ∂
       
       
         n
       
       
         e
       
       
         
          t
         
         
          j
         
       
       
     
     
     
      \frac{\partial O_{j}}{\partial net_{j}}      
   
   ∂netj∂Oj参考公式
   
   
     
     
       1.3
     
     
     
      {1.3}      
   
   1.3,
   
   
     
     
       
       
         ∂
       
       
         n
       
       
         e
       
       
         
          t
         
         
          j
         
       
       
       
       
         ∂
       
       
         
          w
         
         
         
           i
         
         
           j
         
         
       
       
     
     
       =
     
     
       
        O
       
       
        i
       
     
     
     
      \dfrac {\partial net_{j}}{\partial w_{ij}}=O_i      
   
   ∂wij∂netj=Oi。但是此时,
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
     
     
     
      \dfrac{\partial E}{\partial {O_j}}      
   
   ∂Oj∂E,依然无法求出。不过如果
   
   
     
     
       j
     
     
     
      j      
   
   j是输出层,因为
   
   
     
     
       
        O
       
       
        j
       
     
     
       =
     
     
       y
     
     
     
      O_j=y      
   
   Oj=y,此时可求出
   
   
     
     
       E
     
     
     
      E      
   
   E对
   
   
     
     
       
        O
       
       
        j
       
     
     
     
      O_j      
   
   Oj的偏导数,

   
     
     
       
       
         
          (1.6)
         
       
       
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
           =
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             y
           
           
         
         
           =
         
         
           
            ∂
           
           
           
             ∂
           
           
             y
           
           
         
         
           
            1
           
           
            2
           
         
         
           
           
             (
           
           
             t
           
           
             −
           
           
             y
           
           
             )
           
           
           
            2
           
         
         
           =
         
         
           y
         
         
           −
         
         
           t
         
         
       
       
     
     
        \dfrac {\partial E}{\partial O_{j}}=\dfrac {\partial E}{\partial y}=\dfrac {\partial }{\partial y}\dfrac {1}{2}\left( t-y\right) ^{2}=y-t \tag{1.6}
     
     
    ∂Oj∂E=∂y∂E=∂y∂21(t−y)2=y−t(1.6)
下面就到了最关键的一步,此时对于非输出层,我们无法直接求出
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
     
     
     
      \frac{\partial E}{\partial {O_j}}      
   
   ∂Oj∂E,考虑将
   
   
     
     
       
        O
       
       
        j
       
     
     
     
      O_j      
   
   Oj对
   
   
     
     
       E
     
     
     
      E      
   
   E的作用向
   
   
     
     
       j
     
     
     
      j      
   
   j的下一层迭代,我们把
   
   
     
     
       E
     
     
     
      E      
   
   E考虑成一个输入由
   
   
     
     
       L
     
     
       =
     
     
       u
     
     
       ,
     
     
       v
     
     
       …
     
     
       ,
     
     
       w
     
     
     
      L=u,v \dots,w      
   
   L=u,v…,w这些神经元组成的函数,
   
   
     
     
       
        O
       
       
        j
       
     
     
     
      O_j      
   
   Oj是
   
   
     
     
       u
     
     
       ,
     
     
       v
     
     
       ,
     
     
       w
     
     
     
      u,v,w      
   
   u,v,w这些神经元的输入,
   
   
     
     
       
        O
       
       
        j
       
     
     
     
      O_j      
   
   Oj直接构成了对
   
   
     
     
       n
     
     
       e
     
     
       
        t
       
       
        u
       
     
     
       ,
     
     
       n
     
     
       e
     
     
       
        t
       
       
        v
       
     
     
       ,
     
     
       n
     
     
       e
     
     
       
        t
       
       
        w
       
     
     
     
      net_u,net_v,net_w      
   
   netu,netv,netw的影响。

   
     
     
       
       
         
          (1.7)
         
       
       
         
         
           
           
             ∂
           
           
             E
           
           
             
              (
             
             
             
               O
             
             
               j
             
             
             
              )
             
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
           =
         
         
           
           
             ∂
           
           
             E
           
           
             
              (
             
             
              n
             
             
              e
             
             
             
               t
             
             
               u
             
             
             
              ,
             
             
              n
             
             
              e
             
             
             
               t
             
             
               v
             
             
             
              ,
             
             
              …
             
             
              ,
             
             
              n
             
             
              e
             
             
             
               t
             
             
               w
             
             
             
              )
             
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
       
       
     
     
        \dfrac {\partial E\left( O_{j}\right) }{\partial O_{j}}=\dfrac {\partial E\left( net_u,net_v,\ldots ,net_{w}\right) }{\partial O_{j}} \tag{1.7}
     
     
    ∂Oj∂E(Oj)=∂Oj∂E(netu,netv,…,netw)(1.7)
利用全微分形式,可以获取到一个递归方程,

   
     
     
       
       
         
          (1.8)
         
       
       
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
           =
         
         
           
            ∑
           
           
           
             l
           
           
             ∈
           
           
             L
           
           
         
         
           
            (
           
           
           
             
              ∂
             
             
              E
             
           
           
             
              ∂
             
             
              n
             
             
              e
             
             
             
               t
             
             
               l
             
             
           
           
           
           
             
              ∂
             
             
              n
             
             
              e
             
             
             
               t
             
             
               l
             
             
           
           
             
              ∂
             
             
             
               O
             
             
               j
             
             
           
           
           
            )
           
         
         
           =
         
         
           
            ∑
           
           
           
             l
           
           
             ∈
           
           
             L
           
           
         
         
           
            (
           
           
           
             
              ∂
             
             
              E
             
           
           
             
              ∂
             
             
             
               O
             
             
               l
             
             
           
           
           
           
             
              ∂
             
             
             
               O
             
             
               l
             
             
           
           
             
              ∂
             
             
              n
             
             
              e
             
             
             
               t
             
             
               l
             
             
           
           
           
           
             w
           
           
             
              j
             
             
              l
             
           
           
           
            )
           
         
         
       
       
     
     
        \dfrac {\partial E}{\partial O_{j}}=\sum _{l\in L}\left( \dfrac {\partial E}{\partial net_{l}}\dfrac {\partial net_{l}}{\partial O_j}\right) =\sum _{l\in L}\left( \dfrac {\partial E}{\partial O_l}\dfrac {\partial O_l}{\partial net_l}w_{jl}\right) \tag{1.8}
     
     
    ∂Oj∂E=l∈L∑(∂netl∂E∂Oj∂netl)=l∈L∑(∂Ol∂E∂netl∂Olwjl)(1.8)

通过递归方程,我们可以从输出层开始对需要求的偏导数进行递归,因此得名反向传播。

一个例子

下面以一个简单的网络来对上面的反向传播结果进行验证,如下图所示,
在这里插入图片描述

   
     
     
       
       
         
          (1.9)
         
       
       
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               j
             
             
               −
             
             
               1
             
             
               ,
             
             
               j
             
             
           
           
         
         
           =
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
              j
             
           
           
         
         
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
              j
             
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               j
             
             
               −
             
             
               1
             
             
               ,
             
             
               j
             
             
           
           
         
         
       
       
     
     
        \dfrac {\partial E}{\partial w_{j-1,j}}=\dfrac {\partial E}{\partial O_j}\dfrac {\partial O_j}{\partial net_j}\dfrac {\partial net_j}{\partial w_{j-1,j}} \tag{1.9}
     
     
    ∂wj−1,j∂E=∂Oj∂E∂netj∂Oj∂wj−1,j∂netj(1.9)

其中,上式
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
     
     
       =
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         y
       
       
     
     
     
      \dfrac {\partial E}{\partial O_j}=\dfrac {\partial E}{\partial y}      
   
   ∂Oj∂E=∂y∂E,三项偏导数都可求出。接着求
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          w
         
         
         
           j
         
         
           −
         
         
           2
         
         
           ,
         
         
           j
         
         
           −
         
         
           1
         
         
       
       
     
     
     
      \dfrac {\partial E}{\partial w_{j-2,j-1}}      
   
   ∂wj−2,j−1∂E,


   
     
     
       
       
         
          (1.10)
         
       
       
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               j
             
             
               −
             
             
               2
             
             
               ,
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
           =
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              O
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
           
           
             ∂
           
           
             
              O
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               j
             
             
               −
             
             
               2
             
             
               ,
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
           =
         
         
           
           
             ∂
           
           
             E
           
           
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
         
         
           
           
             ∂
           
           
             
              O
             
             
              j
             
           
           
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
              j
             
           
           
         
         
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
              j
             
           
           
           
           
             ∂
           
           
             
              O
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
           
           
             ∂
           
           
             
              O
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
           
           
             ∂
           
           
             n
           
           
             e
           
           
             
              t
             
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
           
           
             ∂
           
           
             
              w
             
             
             
               j
             
             
               −
             
             
               2
             
             
               ,
             
             
               j
             
             
               −
             
             
               1
             
             
           
           
         
         
       
       
     
     
        \dfrac {\partial E}{\partial w_{j-2,j-1}}=\dfrac {\partial E}{\partial O_{j-1}}\dfrac {\partial O_{j-1}}{\partial net_{j-1}}\dfrac {\partial net_{j-1}}{\partial w_{j-2,j-1}}=\dfrac {\partial E}{\partial O_{j}}\dfrac {\partial O_j}{\partial net_j}\dfrac {\partial net_j}{\partial O_{j-1}}\dfrac {\partial O_{j-1}}{\partial net_{j-1}}\dfrac {\partial net_{j-1}}{\partial w_{j-2,j-1}} \tag{1.10}
     
     
    ∂wj−2,j−1∂E=∂Oj−1∂E∂netj−1∂Oj−1∂wj−2,j−1∂netj−1=∂Oj∂E∂netj∂Oj∂Oj−1∂netj∂netj−1∂Oj−1∂wj−2,j−1∂netj−1(1.10)

在上式中,
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
         
           j
         
         
           −
         
         
           1
         
         
       
       
     
     
       =
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
     
     
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
       
       
         ∂
       
       
         n
       
       
         e
       
       
         
          t
         
         
          j
         
       
       
     
     
       
       
         ∂
       
       
         n
       
       
         e
       
       
         
          t
         
         
          j
         
       
       
       
       
         ∂
       
       
         
          O
         
         
         
           j
         
         
           −
         
         
           1
         
         
       
       
     
     
     
      \dfrac {\partial E}{\partial O_{j-1}}=\dfrac {\partial E}{\partial O_{j}}\dfrac {\partial O_j}{\partial net_j}\dfrac {\partial net_j}{\partial O_{j-1}}      
   
   ∂Oj−1∂E=∂Oj∂E∂netj∂Oj∂Oj−1∂netj,求
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
         
           j
         
         
           −
         
         
           1
         
         
       
       
     
     
     
      \dfrac {\partial E}{\partial O_{j-1}}      
   
   ∂Oj−1∂E时先求出
   
   
     
     
       E
     
     
     
      E      
   
   E对上一层的
   
   
     
     
       
        O
       
       
        j
       
     
     
     
      O_j      
   
   Oj的偏导数
   
   
     
     
       
       
         ∂
       
       
         E
       
       
       
       
         ∂
       
       
         
          O
         
         
          j
         
       
       
     
     
     
      \dfrac {\partial E}{\partial O_{j}}      
   
   ∂Oj∂E,公式(1.10)和(1.8)完全对应,上述过程充分体现了链式法则


推荐阅读
author-avatar
不懂珍惜的林记热_713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有