人工智能A7论坛 >> Tensorflow和深度学习笔记_论坛版 >> 7.循环神经网络(RNN) 基础 >> 7.4 RNN的训练

7.4.2 LSTM,让RNN的训练更简单

    1997年,LSTM的提出就是为了解决RNN的梯度弥散的问题(gradient vanish)。那么LSTM比普通的RNN好在哪呢?LSTM为什么能够解决gradient vanish 的问题

 

LSTM如何避免梯度消失

RNN的本质是在网络内部维护了一个状态,其中表示时间且可递归计算。

· 传统的RNN总是用覆写的方式计算状态:,其中表示仿射变换外面在套一个Sigmoid表示输入序列在时刻的值。根据求导的链式法则,这种形式直接导致梯度被表示为连成积的形式,以致于造成梯度消失——粗略的说,很多个小于1的项连乘就很快的逼近零。

· 现代的RNN(包括但不限于使用LSTM单元的RNN)使用累加的形式计算状态:,其中的显示依赖序列输入稍加推导即可发现,这种累加形式导致导数也是累加形式,因此避免了梯度消失。

参考文献:
[1] Rafa Jozefowicz et al. An Empirical Exploration of Recurrent Network Architectures.
[2] Junyoung Chung et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling.

 

   虽然LSTM并没有解决梯度爆炸的问题,但是梯度膨胀(gradient explosion)不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)具体可以参考“附录”中“梯度裁剪”部分

 

经验:

   训练LSTM 要保证forget gate多数情况下 都是开启的;

97年最开始提出LSTM就是为了解决梯度弥散的问题,最开始LSTM是没有forget gate的,forget gate是后来才加上的。