神经网络向量化求反向传播梯度

实现神经网络功能时,为了计算效率考虑,可以通过向量化的方式实现。向量化实现反向传播的话,求梯度时就要涉及到矩阵的求导,学校里根本没有学习过这个概念,所以在学习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

posted @ 2016-09-07 15:19  machineLearning  阅读(1698)  评论(1编辑  收藏  举报