【发布时间】:2017-02-21 01:59:21
【问题描述】:
问题:一个很长的 RNN 网络
N1 -- N2 -- ... --- N100
对于像AdamOptimizer 这样的优化器,compute_gradient() 将为所有训练变量提供梯度。
但是,它可能会在某些步骤中爆炸。
类似how-to-effectively-apply-gradient-clipping-in-tensor-flow 的方法 可以裁剪大的最终渐变。
但是如何剪辑那些中间的呢?
一种方法可能是从“N100 --> N99”手动执行反向传播,剪切渐变,然后“N99 --> N98”等等,但这太复杂了。
所以我的问题是:有没有更简单的方法来剪辑中间渐变? (当然,严格来说,它们不再是数学意义上的梯度)
【问题讨论】:
-
粗略的想法——将你的每一层包装成一个使用自定义渐变的 py_func,就像 here 所做的那样。自定义梯度函数将采用后向值向量并返回裁剪后的版本。
-
裁剪权重和/或激活也可能有助于防止大梯度
标签: tensorflow deep-learning clipping gradient adam