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

  • 相关阅读:
    显示磁盘信息
    给VG增加磁盘,给文件目录增加空间
    第8.11节 Python类中记录实例变量属性的特殊变量__dict__
    Python中format_map与format字符串格式化的区别
    生成器函数与函数的区别
    什么是Python生成器?与迭代器的关系是什么?
    第8.10节 使用__class__查看Python中实例对应的类
    Python运算符的优先级是怎样的?
    Python怎么控制将一个整数输出成指定长的十六进制数?
    Python中函数的参数带星号是什么意思?
  • 原文地址:https://www.cnblogs.com/objectDetect/p/5849605.html
Copyright © 2011-2022 走看看