通过时间反向传播 讨论区

http://zh.diveintodeeplearning.org/chapter_recurrent-neural-networks/bptt.html

1赞

新年小愿望,想知道这个推导的具体步骤:怎么得到的那个通项公式,想把这个当成数列通项公式,HT当成数列的第一项,但是Ot也是关于Ht的函数。。。。。

2赞

你可以多写几项找规律。。

感觉智商受到了摧残,哭死:joy::joy::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算法的通项公式我写了多项还是没有找到规律,折腾了比较久自己还是没有写出来,可否帮忙在评论补充下其通项公式的推导过程,谢谢您,不胜感激

4赞

谢谢大佬的解惑,感激

QQ%E6%88%AA%E5%9B%BE20181123093946


请问教程中的求导公式是不是有问题呢,在最后一个公式里面

\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是复合函数,那按照链式法则,对这个函数求导去哪了?