循环神经网络(RNN)
原创约 845 字大约 4 分钟
循环神经网络(RNN)
- 在之前的网络中我们都是在关心层与层之间的协作,同层节点之间是无连接状态,信息按顺序从上一层到下一层,这种网络如果要处理一些上下文强关联的问题便显得无能为力。例如在NLP中要预测下一个单词则需要处理前文包含的各种特征,此时提出了一种新的神经网络,循环神经网络(Recurrent Neural Network,RNN),它对于序列化数据有很强的拟合能力。
延迟器
在RNN隐藏层之中的节点不再是相互独立的,每个节点将包含三部分输入数据
上一层的输出、自身上一时刻输出、上一节点输出。
可以看到隐藏层中的节点不仅有来自输入层的连接,还有节点之间的自连和互连。
其中节点的自连接代表节点的输出会再次作为节点的输入,但这并不是马上完成的,数据会经过延迟器在下一时刻再进入该节点。
也就是说在RNN中包含了对时序特征的处理,对于同一数据根据其前文不同也将得到不同的输出。这也便是RNN中最重要的特征,通过引入延迟器来让网络模型包含“记忆”。
延迟器只是一个虚拟单元,也称为RNN的记忆单元,它的作用便是保存上一次的节点状态信息,每次节点计算时将使用上一次的状态信息参与进行并更新状态,可以理解为一个动态偏置,状态信息的计算与神经元计算类似,它也包含权重参数
其中代表时刻信息,是一个非线性激活函数,分别为输入的权重参数和状态的权重参数。
Bi-RNN
双向(Bidirectional)循环神经网络是在RNN的基础上改进而来,刚才我们介绍了RNN的网络结构,通过记忆单元使得网络模型有了对前文的联系,但是在日常中仅仅有上文的联系还不够,我们可能需要联系完整的上下文。此时BRNN应运而生。
在Bi-RNN中将隐藏层细分为了正向层和反向层。这两层分别处理输入数据的正向序列和反向序列。网络机构如下:
训练时可以正向计算和反向计算同时进行,将最终的结果加权求和得到输出。当然Bi-RNN也不代表能够解决所有问题,每个记忆单元只保留了上一个时刻的信息,所以对于间隔较远的数据其关联性也不能很好的利用,所以对于RNN还有更多正向/反向层的深度循环神经网络。
同时在RNN中,因为引入了时序的概念,其计算的优化也是一个问题。对于此类问题将在RNN的各类变体以及实际例子中再做记录。