问题:一个非常长的RNN网络。
对于像
在 how-to-effectively-apply-gradient-clipping-in-tensor-flow 中提到一种方法可以剪裁大的最终梯度。
但是如何剪裁那些中间的梯度呢?
一种方法可能是手动从 "N100 -> N99" 进行反向传播,剪裁梯度,然后从 "N99 -> N98" 等等进行,但这太复杂了。
因此,我的问题是:有没有更容易剪裁中间梯度的方法?(当然,严格来说,它们在数学意义上不再是梯度)
N1 -- N2 -- ... --- N100
对于像
AdamOptimizer
这样的优化器,compute_gradient()
会给出所有训练变量的梯度。然而,在某些步骤中可能会爆炸。在 how-to-effectively-apply-gradient-clipping-in-tensor-flow 中提到一种方法可以剪裁大的最终梯度。
但是如何剪裁那些中间的梯度呢?
一种方法可能是手动从 "N100 -> N99" 进行反向传播,剪裁梯度,然后从 "N99 -> N98" 等等进行,但这太复杂了。
因此,我的问题是:有没有更容易剪裁中间梯度的方法?(当然,严格来说,它们在数学意义上不再是梯度)