RNN的输出层的渐变是否应该剪裁?

时间:2018-11-30 02:12:07

标签: machine-learning neural-network lstm recurrent-neural-network rnn

我目前正在训练LSTM RNN以进行时间序列预测。我了解,惯例是在RNN超过某个阈值时修剪RNN的梯度。但是,我不清楚它是否包括输出层。

如果我们调用RNN h的隐藏层,则输出为sigmoid(connected_weights * h + bias)。我知道用于确定隐藏层的权重的梯度已被裁剪,但是输出层也一样吗?

换句话说,connected_weights的梯度是否也在梯度剪切中被剪切?

1 个答案:

答案 0 :(得分:1)

虽然没有什么可以阻止您剪辑它们,但没有理由这样做。一篇有原因的好论文是here,我将尽力为您概述。

我们要通过梯度裁剪解决的问题是爆炸梯度的问题:假设您的RNN层是这样计算的:

 h_t = sigmoid(U * x + W * h_tm1 + b)

因此,暂时忘记非线性,您可以说当前状态h_t取决于某个更早的状态h_{t-T}作为h_t = W^T * h_tmT + input。因此,如果矩阵W使隐藏状态膨胀,则旧的隐藏状态的影响将随着时间呈指数增长。当您反向传播渐变时,也会发生同样的情况,从而导致渐变很可能使您到达参数空间中的某个无用的点。

另一方面,在向前和向后遍历过程中仅应用一次输出层,因此虽然可能会使学习复杂化,但仅取决于一个“恒定”因素,而与时间的展开无关。

更多一点技术性:决定是否得到爆炸梯度的关键量是W的最大特征值。如果它大于1(或小于-1,则很有趣:-)),那么您将得到爆炸的渐变。相反,如果它小于1,则会遭受消失的梯度的困扰,这使得学习长期依赖关系变得困难。您可以找到关于这些现象here的精彩讨论,其中包括指向古典文学的指针。

如果将S型曲面带回图片中,则爆炸梯度将变得更加困难,因为在通过它反向传播时,梯度会被衰减至少4倍。但是,如果特征值大于4,您将遇到冒险:-)仔细初始化非常重要,第二篇文章给出了一些提示。使用tanh,在零附近几乎没有衰减,并且ReLU只是通过传播梯度,因此它们很容易发生梯度爆炸,因此对初始化和梯度剪切敏感。

总体而言,LSTMs比普通RNN具有更好的学习性能。关于消失的梯度。尽管根据我的经验,通常也需要使用梯度剪切。

编辑:何时剪辑? 在权重更新之前,即您不改变反向支撑。事实是,梯度裁剪是一种肮脏的技巧。您仍然希望渐变尽可能精确,因此最好不要在反向传播器的中间使其变形。只是如果您看到渐变变得非常大,就说 Nah,这闻起来。我最好走一小步。剪裁是一种简单的方法(可能只有渐变的某些元素爆炸了,而其他元素仍然表现良好且信息丰富)。对于大多数工具包,您还是没有选择,因为反向传播是原子发生的。