DNN原理推导二_机器学习

前言:

     这里主要通过反向传播,更新网络层的权重系数\delta^{i,l}=W^{l+1}^T\delta^{i,l+1} \odot \sigma^{'}(Z^{i,l})

 

目录

  1.       算法流程
  2.       权重系数更新原理
  3.       灵敏度更新原理      

一  算法流程

       输入: m个样本

       for  iter in range(Max)

                    for i to 1 to m:

                              a^{1}=x_i

                              #### 前向传播计算误差####

                              for l in range(2,L) 

                                       z^{i,l}=W^{l}a^{i,l-1}+b^{l}

                                       a^{i,l}=\sigma (z^{i,l})

                              ####反向计算输出层的灵敏度####

                               for  l = L-1  to 2

                                        \delta^{i,L}=(W^{l+1})^{T}\delta ^{i,l+1}\odot \sigma ^{'}(z^{i,l})

 

                    ####反向传播更新权重系数####

                    for l = 2 to L

                            W^l = W^{l}-\alpha\sum_{i} \delta^{i,l}(a^{i,l-1})^T

                             b^l= b^l-\alpha\sum_{i}\delta ^{i,l}

 

   


二  权重系数更新原理

      损失函数  J=||a^L-y||_2^2  是一个标量        

     

      某一层的权重系数为

       z^l =W^l a^{l-1}+b^l

      求该层的W^{l}  ,可以看出标量对矩阵的求导

          W^{l}->z^{l} ->J

        利用矩阵链式求导原理 

        可以得到

          \frac{\partial J}{\partial W^{l}}=\frac{\partial J}{\partial Z^{l}} (a^{l-1})^T

      其中   \delta^{l}=\frac{\partial J}{\partial Z^l}  称为该层的灵敏度


  三  灵敏度计算

       3.1 先计算最后一层的灵敏度

                 \delta^L

             设  D=a^L-y

       整个过程是标量对向量求导的链式过程      z^L->a^L->D->J  

     利用链式求导原理 

      \frac{\partial J}{\partial z^L} =(\frac{\partial D}{\partial a^L} \frac{\partial a^L}{\partial z^L} ) \frac{\partial J}{\partial D}

    其中

    \frac{\partial J}{\partial D}= a^L-y   标量对向量求导,分母形式

   \frac{\partial D}{\partial a^L}=E    为[n,1] 的向量对 [n,1]的向量求导,为[n*n]雅克比矩阵,单位矩阵

  \frac{\partial a^L}{\partial z^L} =diag(\sigma^{'}(z^L) ) 为[n,n]的对角矩阵

 

  所以

   \frac{\partial J}{\partial z^L} = (E diag(\sigma^{'}(z^L)))^T(a^L-y)

            = diag(\sigma^{'}(z^L))(a^L-y)   根据左行右列性质

             =\sigma^{'}(z^L)\odot (a^L-y)

    3.2  递归推导当层的\delta^{l}

       \frac{\partial J}{\partial z^l} =(\frac{\partial z^{l+1}}{\partial z^l} )^T\frac{\partial J}{\partial z^{l+1}}

             =(\frac{\partial z^{l+1}}{\partial z^l} )^T\ \delta^{l+1}

    其中

         z^{l+1}=w^{l+1}a^l+b^{l+1}

                  =w^{l+1}\sigma (z^l)+b^{l+1}

 

         \frac{\partial z^{l+1}}{\partial z^l} = \frac{\partial z^{l+1}}{\partial a^l} \frac{\partial a^{l}}{\partial z^l}(向量对向量求导)

            = w^{l+1}diag(\sigma^{'}(z^l))

 

  所以

        \frac{\partial J}{\partial z^l} =(w^{l+1}diag(\sigma^{'}(z^l)))^{T}\delta^l

                  =diag(\sigma^{'}(z^l)) (w^{l+1})^T\delta^l

                  =\sigma^{'}(z^l) \odot ((w^{l+1})^T\delta^l)

 

                 

              

 

 

 

        

 

        

                                       

你可能感兴趣的:(人工智能)