LSTM的引入
*虽然RNN的训练过程和多层神经网络差异不大,写程序较简单,但是Rnn的训练是十分困难的,而且很难学到长期依赖,因为当对参数进行求导更新时,式子中会使用链式法则不断乘积和求导,如在对参数w更新的式子中,会需要使用链式法则,这样当对一个变量针对变量函数求导时,会得到一个雅可比矩阵,这样就会出现两个问题。
[1].如果雅可比阵中有较小数时,经过多次矩阵相乘,梯度值会快速收缩,从而导致较远时刻贡献的梯度接近0,使得更新时无法学习到长期依赖而结束,这也就是梯度消散问题。(主要问题)
[2].如果雅可比阵中有较大数时,经过多次矩阵相乘,梯度值会快速增长,这也就是梯度爆炸问题。
*RNN结构也会遇到长期依赖问题,在一些简单场景,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。
*但是在一些复杂的环境中,假设我们试着去预测“I grew up in France... I speak fluent French”最后的词French 时。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。
*不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。在理论上,RNN 绝对可以处理这样的长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN没能成功学习到这些知识,有专门的证明。
*梯度消失的问题使得隐层的输入对于网络输出的影响随着网络环路的不断递归而衰减(有点绕口),为了解决这一问题,我们引入了长短时记忆模块lstm,它会将一个加强版的组件组装到循环神经网络中,通过改造记忆细胞s来解决长期梯度问题。
*Lstm核心组件起到对信息的限制作用,里面会有一