本文章参考《python深度学习》
理解循环神经网络
密集连接网络和卷积神经网络都有一个主要特点,就是没有记忆,它们单独处理每个输入,在输入与输入之间没有保存任何状态。对于这 样的网络,要想处理数据点的序列或时间序列,你需要向网络同时展示整个序列,即将序列转换成单个数据点。例如,你在IMDB
示例中就是这么做的:将全部电影评论转换为一个大向量, 然后一次性处理。这种网络叫作前馈网络(feedforward network
)。
与此相反,当你在阅读这个句子时,你是一个词一个词地阅读(或者说,眼睛一次扫视一 次扫视地阅读),同时会记住之前的内容。这让你能够动态理解这个句子所传达的含义。生物智能以渐进的方式处理信息,同时保存一个关于所处理内容的内部模型,这个模型是根据过去的信息构建的,并随着新信息的进入而不断更新。
循环神经网络(RNN,recurrent neural network
)采用同样的原理,不过是一个极其简化的版本:它处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息。实际上,RNN
是一类具有内部环的神经网络。
在处理两个不同的独立序列(比如两条不同的IMDB
评论)之间,RNN
状态会被重置,因此,你仍可以将一个序列看作单个数据点,即网络的单个输入。真正改变的是,数据点不再是在单个步骤中进行处理, 相反,网络内部会对序列元素进行遍历。
在介绍使用Numpy
模拟实现RNN
的前向传递之前先补充一些Numpy
中张量点积的知识