在之前介绍的全连接神经网络或卷积神经网络中,层与层之间是全连接或部分连接的,但每层的节点间是无连接的,这样当输入数据具有依赖性且是序列模式时,预测结果就会不太准确。因此,就有了循环神经网络(RNN)的诞生。RNN的主要用途是处理和预测序列数据。从网络结构上说,RNN会记忆之前的信息,并利用之前的信息影响后面节点的输出。也就是说,循环神经网络的隐藏层之间的节点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。
RNN在每一个时刻会有一个输入Xt,然后根据循环神经网络的当前状态At提供一个输出ht。而循环神经网络当前的状态At是根据上一时刻的状态A(t-1)和当前的输入Xt共同决定的。因此,RNN擅长解决与时间序列相关的问题。对于一个序列数据,可以将这个序列上不同时刻的数据依次传入RNN的输入层,而输出可以对序列中下一个时刻的预测,也可以是对当前时刻信息的处理结果。RNN要求每个时刻都有一个输入,但是不一定每个时刻都要有输出。
循环神经网络可以被看作同一神经网络结构在时间序列上被复制多次的结果,这个被复制多次的结构被称之为循环体。如何设置循环体的结构是循环神经网络解决实际问题的关键,循环体网络中的结构在不同时刻也是共享的。下面展示一个简单的循环神经网络前向传播的具体计算过程:
代码实现:
import numpy as