![6f60026ca3134e2d3678e05223f21d99.png](https://i-blog.csdnimg.cn/blog_migrate/87d545dc77abc5cb1d24405076e1abd4.jpeg)
长短期记忆网络(LSTM),作为一种改进之后的循环神经网络,不仅能够解决 RNN无法处理长距离的依赖的问题,还能够解决神经网络中常见的梯度爆炸或梯度消失等问题,在处理序列数据方面非常有效。
有效背后的根本原因有哪些?本文结合简单的案例,带大家了解关于 LSTM 的五个秘密,也解释了 LSTM如此有效的关键所在。
秘密一:发明LSTM是因为RNN 发生严重的内存泄漏
之前,我们介绍了递归神经网络(RNN),并演示了如何将它们用于情感分析。
RNN 的问题是远程内存。例如,它们能够预测出“the clouds are in the…”这句话的下一个单词“sky”,但却无法预测出下面这句话中缺失的单词:“她在法国长大。现在到中国才几个月。她说一口流利的 …”(“She grew up in France. Now she has been in China for few months only. She speaks fluent …”)
随着间隔的拉长,RNN变得无法学会信息连接。 在此示例中,最近的信息表明,下一个词可能是一种语言的名称,但是如果我们想缩小哪种语言的范围,那么就需要到间隔很长的前文中去找“法国”。 在自然语言文本中,这种问题,完全有可能在相关信息和需要该信息的地方出现很大的差异。这种差异在德语中也很常见。
![3c8265c3b45a3c1c5ef1c1affd8a4258.png](https://i-blog.csdnimg.cn/blog_migrate/ec8f6225b7da37c389002a3466912ff9.png)
图片来自FB Engineering Tejas Patil的博客上
为什么RNN在长序列文本方面存在巨大的问题? 根据设计,RNN 在每个时间步长上都会接受两个输入:一个输入向量(例如,输入句子中的一个词)和一个隐藏状态(例如,以前词中的记忆表示)。
RNN下一个时间步长采用第二个输入向量和第一隐藏状态来创建该时间步长的输出。 因此,为了捕获长序列中的语义,我们需要在多个时间步长上运行RNN,将展开的RNN变成一个非常深的网络。
阅读参考:
长序列并不是RNN的唯一麻烦制造者。 就像任何非常深的神经网络一样,RNN也存在梯度消失和爆炸的问题,因此需要花费大量时间进行训练。人们已经提出了许多技术来缓解此问题,但还无法完全消除该问题,这些技术包括:
仔细地初始化参数
使用非饱和激活函数,如ReLU
应用批量归一化、梯度消失、舍弃网络细胞等方法