目录
- RNN为何能记忆以及它面临的问题
- LSTM的网络结构
- LSTM的思想
- LSTM的详细网络结构
步骤1:存什么,丢什么(forget gate layer:忘记门)
步骤2:更新什么信息(输入门)
步骤3:开始更新信息
步骤4:当前时刻的输出 - 你可能会问关于LSTM的问题
- LSTM的变种(GRU)
- 总结
1.RNN为何能记忆以及它面临的问题
当你在看一部电影的时候,你使用传统的神经网络无法预测在下一时刻,这部电影的内容将是什么?循环神经网络解决了这个问题:因为循环神经网络能够记忆。
在上面这个例子中,像A这个的cell有一堆,然后他们连起来,当有一个输入信息 Xt 的时候,会输出 ht ,这个可能是一个人说了”我爱”,然后预测词库里出现每个词的概率,当然出现“你“的概率应该是比较大的。因为有了这个循环的操作,使得循环神经网络有了存储信息,记忆的能力。
上一篇文章中(没有看过的点我)我们用RNN解决了序列型信息的之间的依赖问题,如图:
我们可以用之前出现的句子,比如根据“我是中国“这几个词预测下一个词是什么。
但有一个非常大的问题是:信息之间存在长期依赖问题。
比如有这么一段话:我出生在中国,但从小就去美国了,从小就接受美国式的教育,在美国有很多非常好的大学,·········,尽管我上的是美国最好的大学,但我不太会说普通话。你会发现这段信息很长,但真正重要的是第一句。
随着时间间隔的增大,RNN会丧失连接到很远的信息的能力,也就是当你上大四的要考研的时候,你发现你大一学的内容很多都不记得了,那该怎么办呢?
2.LSTM的网络结构
很高兴LSTM解决了这个问题。
LSTM和RNN的网络结构相差无几,区别是LSTM的cell被改造过了。它是被设计来解决长期依赖问题的,它有一种能力:把该记的东西记下来,不该记的东西忘掉。就像你准备考研,或者准备高考的时候一样,重点学那些老师说重点复习,可能会考的内容,而那些大家觉得不怎么重要的内容就直接不复习了。
在标准的RNN结构中,它有很多重复的cell,而且通过一个简单的tanh来激活,如图:
与标准RNN不同的是,LSTM的cell是被改造过的,可以发现RNN只有一层网络,但LSTM有四层:
我们来一层一层看一下他们具体干了啥事,在此之前,先来定义一下我们的符号,其中Pointwise Operation表示逐点运算。
3.LSTM的思想
LSTM的本质是多了一条传送带之类的东西,我比较喜欢称呼它传送带,所以下文都以传送带称呼;还有细胞状态(cell state)指的是一个cell的变化。传送带会跟每个网络交互,可以存储信息,也可以删除信息,在传送带上记录着所有有用的信息,删除没用的信息,
它会通过门来选择是否让信息通过,在神经网络中,什么过滤信息的效果最好呀?当然是激活函数呀,这里选用了sigmoid函数。
为什么选用sigmoid函数呢?因为sigmoid函数的函数值是0-1的,这就是一个概率嘛,它能衡量到底让信息过去多少。如果是0,就什么也不让它过去,如果是1,就把全部信息放过去。
让我们现在一步一步来了解它每一层都做了什么吧。
4.LSTM的详细网络结构
步骤1:存什么,丢什么(forget gate layer:忘记门)
首先应该考虑的是什么信息该存起来,什么信息不该存起来。起这个决策作用的是forget gate layer,它是一个sigmoid层,如果是1,意味着存下所有的信息,如果是0,意味着丢弃所有的信息。其中 ht−1 是截止到上一时刻的记忆, xt 是当前时刻的输入。
比如上一时刻是“我是中国人“,但当前时刻是“我是中国共青团员“,我们就希望把‘人‘忘记,填上‘共青团员‘。也就是在传送带上用新的信息代替旧的信息。
步骤2:更新什么信息(输入门)
下一步就是看一下什么样的新信息应该存到传送带。这一步分为两部分,第一部分就是sigmoid层(input gate layer,不知道怎么翻译的好),它决定我们哪部分的信息应该更新。第二部分就是tanh层,它为每个能放到传送带上值(候选值)创建一个向量