"truncated gradients" 在 LSTM 中是什么意思?

What does "truncated gradients" mean in LSTM?

我正在学习有关 LSTM 的 tensorflow 教程:Truncated Backpropagation

本节说代码使用"truncated backpropagation",那么这到底是什么意思呢?

在一般的神经网络设置中(嗯,大部分时间),您在训练期间执行两个步骤:

前传球

  • 显示网络的一些输入,并检查输出
  • 计算输出的损失(相对于标签,或相对于您想要的某些行为)

向后传球

  • 根据计算出的损失和网络状态,您可以计算要应用于网络权重的梯度,以便网络进行学习。
  • 这些渐变是从输出层向后应用的。

在反向传递中,出于某种原因,您可能只想训练顶层或网络的某些特定部分。在这种情况下,您可能希望在该点停止向后传递梯度。这就是截断反向传播所做的(通常通过 https://www.tensorflow.org/versions/r0.9/api_docs/python/train.html#stop_gradient).

截断反向传播旨在通过计算 "short" 序列而不是完整序列的近似梯度来加速学习序列(例如使用 LSTM)。我想这就是文档通过制作 "the learning process tractable".

的意思

这种方法似乎起源于 Mikolov 在 "Statistical Language Models based on Neural Networks"(他的论文)上的工作。正如 Alex Graves 在 well-cited paper(第 9 页)中所解释的那样:

This form of truncated back propagation has been considered before for RNN language modelling [23], and found to speed up training (by reducing the sequence length and hence increasing the frequency of stochastic weight updates) without affecting the network’s ability to learn long-range dependencies.

[23]是米科洛夫的论文。


简而言之,截断反向传播是一种 "trick" 加速序列学习的方法,不会丢失(太多)重要信息。请注意,截断过多会导致回溯(即丢失重要信息)。

除了@friesel的回答,我想说的是,截断反向传播不仅用于加速梯度计算的过程,而且还缓解了递归神经网络中的一些潜在问题(例如梯度消失和梯度爆炸)。

对于遇到此问题的其他人 post,'truncated gradient' 也可以参考 LASSO-type 正则化的在线版本。例如参见 [​​=10=].