梯度爆炸
在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。 这种现象叫梯度爆炸。
当梯度爆炸到更大的值时,就会发生这种情况。这可能是RNN结构在更大的时间步长下会遇到的问题之一。当每个偏导数大于1时,这种情况可能发生,并且这些偏导数的相乘会导致更大的值。这些较大的梯度值会导致权重值在每
梯度消失
出现在以梯度下降法和反向传播训练人工神经网络的时候。在每次训练的迭代中,神经网路权重的更新值与误差函数的偏导数成比例,然而在某些情况下,梯度值会几乎消失,使得权重无法得到有效更新,甚至神经网络可能完全无法继续训练。
论是RNN还是CNN,如果计算出的损失不得不返回很多,梯度消失可能是个问题。在CNN中,当有许多激活层时,如sigmoid或tanh,就会出现这个问题。损失必须一路返回到初始层,这些激活通常在它们到达初始层时稀释它们,这意味着初始层几乎没有权重更新,从而导致欠拟合。这在RNN中甚至很常见,因为即使一个网络有一个RNN层但有大量的时间步长,由于时间的反向传播,损失也必须在整个时间步长内传播。由于梯度是乘法的,如前面的广义导数表达式所示,这些值趋向于变低,并且权重在某个时间步长后不会更新。这意味着,即使向网络显示更多的时间步长,网络也不会受益,因为梯度不能一直往回传播。RNN中的这种限制是由于梯度消失造成的。
有状态与无状态
RNN有两种可用的操作模式:无状态模式和有状态模式。如果argument stateful=True,则表示你正在使用有状态模式,False表示无状态模式。
无状态模式基本上是说一个批处理中的一个例子与下一个批处理中的任何例子都不相关。也就是说,在给定的情况下,每个例子都是独立的。在每个例子之后,状态被重置。每个示例都有一定数量的时间步长,具体取决于模型结构。
在有状态模式下,批次1的示例i的状态被传递给批处理2的i+1示例。这意味着状态在批处理中从一个例子传递到下一个例子。因此,这些示例必须跨批次连续,不能是随机的