循环神经网络(recurrent neural network,RNN)是一类用于处理序列数据的神经网络。
RNN和CNN对比:
CNN: 借助卷积核(kernel)提取特征后,送入后续网络(如全连接网络 Dense)
进行分类、目标检测等操作。CNN 借助卷积核从空间维度提取信息,卷积核参数空间共享。
RNN: 借助循环核(cell)提取特征后,送入后续网络(如全连接网络 Dense)
进行预测等操作。RNN 借助循环核从时间维度提取信息,循环核参数时间共享。
为什么需要RNN:
传统的神经网络都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。
但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
RNN的结构
RNN主要又输入层、隐藏层、输出层组层,隐藏层里有若干个循环核。
循环核
循环核是RNN中隐藏层最基本的构成。
其中包含了多干个时间状态节点,每个状态节点都有一个状态信息h_t
X为输入向量,它包含了不同时间的数据序列,X=[x1,x2,x3,…,xt]
Wxh为输入数据x的权重,Whh为前一时刻状态信息h_t-1在输入到下一时刻状态时的权重、bh为输入其偏置
tanh为激活函数
每一个状态在对应时刻节点的输出为yt
其由该状态信息ht和对应输出权重Why及偏置项by组成,经过softmax函数得到输出值yt
循环核展开之后,就类似于这样:
总的来说就是,对于输入数据X,循环核内的不同结点会处理与其对应时刻的数据
拥有不同循环核的RNN
不同类型的RNN
一对一、一对多、多对一、多对多(输入X的序列数和输出序列数可能相等或不相等)