http://zh.diveintodeeplearning.org/chapter_recurrent-neural-networks/bptt.html
你可以多写几项找规律。。
感觉智商受到了摧残,哭死:joy:
对 RNN 中的 loss 的反向传播有个问题。简化讨论,假定 batch_size = 1, num_steps = 3。每个 step 对应的loss 分别为 L1, L2 和 L3。
Loss 做反传时, 按 Aston 的讲解,应该是先对 L1, L2 和 L3 取平均得到 L_ave, 对它做反传。
但参考 RNN 训练的代码 (gluon-tutorials-zh/chapter_recurrent-neural-networks/rnn-scratch.md)
outputs = nd.concat(*outputs, dim=0)
# 经上述操作,outputs和label已对齐。
loss = softmax_cross_entropy(outputs, label)
loss.backward()
没有看到 Loss 求平均,而是将每个 step 的 Loss 反传。
并且,感觉后者更合理。因为 L1 并不依赖于将来时刻的变量(h2, h3…),对不同时刻的 Loss 取平均再反传反而不合理。
后面的loss因为是一个向量,会先对它们求和(和平均道理是一样的)再backprop
详见
https://mxnet.incubator.apache.org/tutorials/gluon/autograd.html
明白了。谢谢!
如何在 mxnet 设置 truncated backpropagation through time, 比如我只反向传播 1 或者 5 steps。
RNN的教程里是通过num_steps参数
不太理解矩阵对标量和矩阵对向量的求导,有人知道哪里有标准的数学定义吗?
嗯。13节我有看完,感谢老师。但是我感觉按形状匹配不一定是正确的呀,所以上网查找了一下,找到以下博客。
(以下是对标量对矩阵偏微分的理解)
https://blog.csdn.net/uncle_gy/article/details/78879131
这个博客讲述了分子布局个分母布局,按博客的描述并参照13节35:52的W1对s偏微分的式子,标量对矩阵的偏微分的结果可以是 lambda × W1 或者是 lambda × W1’。
(以下是对向量对矩阵偏微分的困惑)
按照以上理解,矩阵的微分应该会将矩阵保持不变或者变大(向量对向量的偏微分)
然而13节37:00,输出层O (y×1)对参数W2(y×h)偏微分得到结果是h’(1×h),要怎么做微分才能把一个大的矩阵变成一个小的矩阵(各行微分然后相加?).
再次感谢Aston老师的回复,希望得到您的解答
一般情况,标量对张量求导更容易用形状匹配,因为结果的形状是确定的。特殊情况是,当矩阵是方的(边长d)时,可能需要把两条边分别设d和d’,才更方便按形状匹配。
当张量对张量求导时,形状匹配可能不直观。常用的都总结在F.18到F.19之间的表里了:
出处:https://www.scribd.com/document/291105432/F-Matrix-Calculus
明白了!感谢老师
版主您好,首先谢谢大佬们的贡献和分享,关于RNN的BPTT算法的通项公式我写了多项还是没有找到规律,折腾了比较久自己还是没有写出来,可否帮忙在评论补充下其通项公式的推导过程,谢谢您,不胜感激
谢谢大佬的解惑,感激
请问教程中的求导公式是不是有问题呢,在最后一个公式里面
\frac{\partial{\boldsymbol{h_t}}}{\partial{\boldsymbol{W_{hh}}}}=\boldsymbol{h_{t-1}^T}
但是 \boldsymbol{h_{t-1}^T} 其实也是 {\boldsymbol{W_{hh}}} 的函数。
是不是应该等于
\frac{\partial{\boldsymbol{h_t}}}{\partial{\boldsymbol{W_{hh}}}}=\boldsymbol{h_{t-1}^T}+\boldsymbol{W_{hh}}*\frac{ \partial \boldsymbol{ h_{t-1}} }{ \partial \boldsymbol{ W_{hh}}}
然后还要进行递推呢?`
正文的最后一句话是这样解释的:
举例来说,参数梯度 ∂L/∂Whh∂L/∂Whh 的计算需要依赖隐藏状态在时间步 t=0,…,T−1t=0,…,T−1 的当前值 htht(h0h0 是初始化得到的)。这些值是通过从输入层到输出层的正向传播计算并存储得到的。
为什么 (∂ht+1)/ (∂ht) = Whh . ht是复合函数,那按照链式法则,对这个函数求导去哪了?