反向传播(Back Propagation)

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

反向传播

下面分析是如何反向传播的(分析时不考虑偏置项),
反向传播(Back Propagation)

参考上图,
① 对于一个神经元                            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)

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

一个例子

下面以一个简单的网络来对上面的反向传播结果进行验证,如下图所示,
反向传播(Back Propagation)
                                                    (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)完全对应,上述过程充分体现了链式法则

上一篇:2021/3/14 OJ每日一题 回形取数


下一篇:数据结构C++版 王红梅 OJ习题