求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21

我觉得这里的公式推导有点把梯度和Jacobian矩阵给用混淆了。
按照一般的习惯,求梯度是用列向量偏导算子,求Jacobian用的是行向量偏导算子,也就是说梯度通常写成列向量,Jacobian写成行向量,二者互为转置。
一般来说,用链式法则计算梯度信息传播用的是Jacobian,从左到右一项一项进行矩阵乘法,维数都是match的,对于公式(10.20)的第一项就是 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
,这是个行向量。
而如果用梯度来表示,就要对其转置,变成 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
,其中 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
就是梯度(好像打不出梯度符号),而 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
,所以公式(10.20)的第一项应该是: 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
, 也就是说diag这个因子应该写在最左边,不应该写在最右边。而如果写在最右边,就不能是矩阵乘法,而应该是element-wise乘法,即 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
, 这里求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
是个列向量。
另外楼主在描述里好像还有一个问题,目标函数L是个一元实值函数,并不是y维,因此梯度 求问deep learning书中关于RNN反向传播计算梯度的公式10.20和10.21
是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的隐层差不多,都是仿射之后套激活函数,你可以看看那部分怎么讲的。


    推荐阅读