求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
我觉得这里的公式推导有点把梯度和Jacobian矩阵给用混淆了。
按照一般的习惯,求梯度是用列向量偏导算子,求Jacobian用的是行向量偏导算子,也就是说梯度通常写成列向量,Jacobian写成行向量,二者互为转置。
一般来说,用链式法则计算梯度信息传播用的是Jacobian,从左到右一项一项进行矩阵乘法,维数都是match的,对于公式(10.20)的第一项就是
,这是个行向量。
而如果用梯度来表示,就要对其转置,变成
,其中
就是梯度(好像打不出梯度符号),而
,所以公式(10.20)的第一项应该是:
, 也就是说diag这个因子应该写在最左边,不应该写在最右边。而如果写在最右边,就不能是矩阵乘法,而应该是element-wise乘法,即
, 这里
是个列向量。
另外楼主在描述里好像还有一个问题,目标函数L是个一元实值函数,并不是y维,因此梯度
是h维列向量,不是y*h维矩阵。
■网友
其实就是10.8和10.9式加链式法则的计算。把对角阵移到梯度向量左边就好。
10.9关于向量的函数是逐项计算,其他没有难推的东西。打公式忒麻烦,还要问建议复习下多元函数微积分(??ω??)?
另外个人觉得计算机科学家随性用记号,也不说采用爱因斯坦求和约定,导致的各种歧义和错误都是咎由自取2333
■网友
泻药,这几天实在非常累,没有力气推公式。让我想一下问题出在哪里。你的idea毛病在哪我一时还真没看出来。
■网友
10.21是错的,在最新版的书中已经更正了。
http://www.deeplearningbook.org/contents/rnn.htmldiag应该在W^T和delta_h(t+1) L中间,大家参考一下这个资料,就会推了,大概可能要学习一两天。我从接触rnn到弄懂这一步,过去了三年,不禁感叹如果当初没有急功近利,慢慢学早就会推了吧。欲速则不达,见小利则大事不成。
另外补充一句,看一下这里面的定理11,给出了非常优雅的形式,没有上面那么复杂,上面的答案推的有问题,jacobian矩阵中diag是W的左边的。
https://project.hupili.net/tutorial/hu2012-matrix-calculus/hu2012matrix-calculus.pdf
■网友
diag 的确不恰当。
由于 tanh 是逐元素的,所以右边的两项应该先逐元素乘,再和 w^T 矩阵乘。
【求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21】 然后这块和mlp的隐层差不多,都是仿射之后套激活函数,你可以看看那部分怎么讲的。
推荐阅读
- 大学要开始查文献le,求问有哪些中英文的文献网站或下载工具(最好是医药,生命科学类的),多谢啦?
- 求问:重启手机QQ,消息记录消失
- DeepTech深科技|美国监管机构对11.5万辆特斯拉展开悬架问题调查
- 《Programming Python》和《Learning Python》哪本实用一些
- 怎样用 torch7 做 multi-task learning?怎样 branch out?
- 产品经理同时接手多个项目,现略抓狂状态,求问有哪些工作方法或者提高效率的工具可以解决
- 求问codewar上的一道题
- 请问房产策划助理和4S店市场专员,饿了么的大客户BD哪个比较有前景求问
- 求问,这些淘宝上一块两块钱就能获得的上万留痕访问、浏览、点赞等是咋办到的(⊙o⊙)?
- 怎样评价阿里盖坤团队提出的深度兴趣网络点击率预估模型(deep interest network)?
