前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反向传播算法的矩阵维度分析

反向传播算法的矩阵维度分析

作者头像
云时之间
发布2018-04-11 10:28:22
1.2K0
发布2018-04-11 10:28:22
举报
文章被收录于专栏:云时之间云时之间

各位小伙伴们大家好,这几天我在群里看见了一位小伙伴提出了关于BP神经网络的反向传播算法的梯度维度的问题,我对这个问题也很有兴趣,所以希望通过这篇文章来去和大家探讨下这方面的知识.

在我们学习神经网络的时候,我们为了不断地迭代更新目标函数,我们总是不断地往复更新迭代神经网络中的各个参数和权值,而在实际过程中我们一般都是使用的矩阵向量化的方式去计算量化,但是如果我们能够了解这个矩阵求导的过程的话,我们对于反向传播算法中的梯度问题应该就能够很好的理解.(很多有疑惑的伙伴应该是看过CS231n吧,我记得没有读懂他的那个反向传播算法梯度的代码).

神经网络前向传播:

在这里因为上边也提到了,我们都是用的矩阵向量来去表示数据,这里的话每一个变量都是有自己的一个维度的信息的:

神经网络的反向传播:

在使用反向传播去更新参数的时候,一般情况下都需要涉及到参数梯度的求解,那么根据上边的神经网络前向传播公式得到,我们求解的变量的话这时候有dw,dx,db.

现在我们不妨设损失函数loss()=L,并且这个损失函数是一个标量(因为标量对于矩阵的求偏导数的话,矩阵的维度不会发生变化).那这时候我们挨个来,求求dx,dw,db的梯度:

1:dx的梯度:

在这里我们要用到链式求导法则,如果有不熟悉的小伙伴请去:

http://61.139.105.132/gdsx/dzja/7/4.htm

回忆下知识再来看这篇文章,效果更好.

根据链式求导法则,dx的梯度可以表达为:

由神经网络的前向传播中我们知道,每一个变量的维度都是一致的,这时候dx,dw,db的维度分别和x,w,b的维度都是一致的,那么这时候我们就可以得到这样的条件:

那这时候&y/&x的导数就需要计算下了,这个时候我们就需要矩阵的乘法运算来去计算分析:

1:由上文得,dx的维度是N*D,&L/&y的维度是N*M,那个根据矩阵运算公式,我们可以计算出

那么这时候我们可以得到&y/&x的矩阵维度是M*D,那么这时候我们回头看一看前边的条件,W的矩阵维度是D*M,那么&y/&x的矩阵维度岂不是W矩阵的转置?其实就是这样.

我们最后得出一个结论:&y/&x的结果是矩阵w的转置,然后得到以下公式:

那这个时候我们再去求dw,db就会变得非常的toy了,因为思路是相同的:

dw的公式表示为:

再去计算一下:

dw的维度信息如下:

我们这时候可以发现&y/&w的维度是D*N,而x的维度是N*D,这时候其实&y/&w可以看作为一个X的转置,这样的话可以表示为:

那db也就可以更快的推出来了:

链式求导为:

再来个矩阵乘法:

得到:

另外这里有几篇比较好的文章推荐给大家:

http://cs231n.github.io/optimization-2/

http://blog.csdn.net/han_xiaoyang/article/details/50321873

https://zhuanlan.zhihu.com/p/25496760

希望大家可以能够有所收获,也请各位多多指教

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档