zoukankan      html  css  js  c++  java
  • 神经网络向量化求反向传播梯度

    实现神经网络功能时,为了计算效率考虑,可以通过向量化的方式实现。向量化实现反向传播的话,求梯度时就要涉及到矩阵的求导,学校里根本没有学习过这个概念,所以在学习cs31n时,对反向传播求梯度时的代码很是疑惑,不理解矩阵为什么需要进行转置。查看matrix cookbook这本书也没有解决我的疑惑。后来发现了闲话矩阵求导这里对矩阵求导的解释说明,通过维度分析来理解矩阵求导的过程,大概理解了反向传播求梯度的代码实现,记录一下自己的理解。

     1. 前向传播

    神经网络前向传播的公式:

          

    计算中使用向量化表示数据,每一个变量的维度信息:

         

     变量说明:

      X 所有数据构成的矩阵,N为样本总数,D为每一个样本的维度;

           W 所有权重工程的参数矩阵,D为每一个样本的维度,M为输出节点的总数;

      b 为偏置矩阵

           Y 为输出      

    2. 反向传播

    利用反向传播算法更新参数时,涉及到的参数梯度的求解,需要求解的变量有dW, dX, db。

    假设损失函数为L, 是一个标量。

    2.1 dX的分析

    根据导数的链式法则,dX的梯度可以表示成下面的形式:

    维度分析:

    dX的维度要和X保持一致  

    的维度要和Y保持一致,并且标量对矩阵求偏导,矩阵的维度不变

     

    应该和W有关,但是至于维度是多少需要根据矩阵乘法进行分析:

    (1)dX的维度为N*D, 的维度为N*M,根据这两个变量的维度,以及上面dX的公式,

    可以分析出的维度;

     ( 2)dX公式用维度信息可以表示成这样:    

    根据矩阵相乘的分析,我们可以得到 的维度应该是   M*D  ,由于是和W相关的,W的维度是D*M,

    所以我们可以得出结论   的结果是权重矩阵W的转置。所以

    2.2 dW的分析

    了解了2.1中dX的分析过程,dW的结果就不难理解了。

    dW的公式表示:


    应该和X有关,但是至于维度是多少需要根据矩阵乘法进行分析:

    dW公式用维度信息可以表示成这样:  

     根据矩阵相乘的分析,我们可以得到 的维度应该是   D*N  ,由于是和X相关的,X的维度是N*D,

    所以我们可以得出结论   的结果是样本矩阵X的转置。所以

    2.3 db的分析

    db的公式表示:

    根据矩阵乘法分析:

    所以:

    参考:  

    闲话矩阵求导

    2 cs231n面向视觉识别的CNN

    [cs231n][7]Layers的forward&backward

  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/objectDetect/p/5849605.html
Copyright © 2011-2022 走看看