RNN最主要的问题就是长期依赖问题,也就是RNN很容易接受和处理最近的上下文信息,比如“天气预报说明天早上要下大雨,出门一定要记得带_____。”像这样的短期信息,由于相关信息“下大雨”和要填的词之间的距离比较短,RNN就可以很容易地学会利用过去的信息,预测出来_____里面应该填“雨伞”。可是当有些时候当相关的信息距离需要预测的位置比较远时,比如:“我出生在中国,但是后来随父母移民到了美国,我......(省略200个字),因此我能讲一口流利的_____。” 现在再用RNN来预测_____里面的词时就存在一定的困难,依靠最近的信息很难预测出下一个词是什么。
为什么RNN 不可以很好的解决长期依赖问题呢?可以参考下面的公式:
也就是说,序列过长时,RNN会出现梯度消失或者梯度爆炸。或者在复杂语言场景中,有用信息的间隔有长有短,RNN的性能也会受到限制。长短时记忆网络(long short term memory,LSTM)的设计就是为了解决这个问题。
其实,长短时记忆网络的思路比较简单。原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:
新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!