长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
要讨论LSTM的话,需要了解一下RNN(循环神经网络),那到底什么是RNN呢?
循环神经网络(RNN)
我们每时每刻的思想,我们的语言并不是片面孤立的,也就是我们此刻的想法其实是跟前面的有联系,我们句子里面的当前的词语实际上是与前面出现过的词是保持着联系的。举个最通俗的例子,我们都做过英语的完形填空,知道第三人称单数的名字后面的动词要加‘s’,这就是一个语境的问题,动词的形式跟前面的有关。循环神经网络就是这样一个用途:它把“读”过的文字记下来,比如它读到了“Peter”(这里为了举例的方便,实际上RNN是每个字母地阅读),它就会更新当前的主语的状态,可能是把之前的主语“they”这个时候更新成了“Peter”,这样做的目的是,之后如果遇到一个动词了,当前的神经网络就可以根据前面更新过的主语,知道“Peter”是第三人称单数,接下里的动词应该要加“s”。所以,与传统的神经网络输入输出前后无关不同,RNN的输入和输出是前后联系的,克服了传统神经网络的短板。
神经网络可以认为它的中间层一直都在随着不同的输入在更新,每个阶段的神经网络都并不是完全一样的。
如果我们在时间上展开来看是以下这种形式的:
左边是没有展开,随着t时刻的输入值x_{t},中间绿色方块所代表的状态实际上更新了一遍,然后根据更新后的状态再输出对应的输出值。
也就是输入值→结合之前的状态更新状态→根据新状态输出值。
RNN长期记忆的依赖问题
理论上来说,RNN是可以存储长期记忆,并随时根据当前的输入来更新之前的状态的,但是实践上来说,很困难。
在上图中,我们可以看到每个神经元中都携带有以前神经元的上下文信息,这些问题我们并不需要长期记忆,通过x0和x1的位置就很容易判断h3的状态
但是有些问题,如果上下文内容隔得比较远,实际操作没有那么容易由于传递信息的路径过长,误差也就会增大,也许RNN无法获取准确的信息。
总之,rnn在处理问题是提出了马尔科夫假设,考虑了物体之前的连续性,但应该存在长期记忆的问题,对部分问题无法准确的处理,要进行音频或者连续序列的分析必须引入新的方法--短期记忆,关于这部分将在lstm模型中讲解