跳至主要內容

循环神经网络(RNN)

原创Xenny约 845 字大约 4 分钟深度学习深度学习神经网络RNN

循环神经网络(RNN)

  • 在之前的网络中我们都是在关心层与层之间的协作,同层节点之间是无连接状态,信息按顺序从上一层到下一层,这种网络如果要处理一些上下文强关联的问题便显得无能为力。例如在NLP中要预测下一个单词则需要处理前文包含的各种特征,此时提出了一种新的神经网络,循环神经网络(Recurrent Neural Network,RNN),它对于序列化数据有很强的拟合能力。

延迟器

  • 在RNN隐藏层之中的节点不再是相互独立的,每个节点将包含三部分输入数据

    上一层的输出、自身上一时刻输出、上一节点输出。

    RNN网络结构
    RNN网络结构

    可以看到隐藏层中的节点不仅有来自输入层的连接,还有节点之间的自连和互连。

  • 其中节点的自连接代表节点的输出会再次作为节点的输入,但这并不是马上完成的,数据会经过延迟器在下一时刻再进入该节点。

    也就是说在RNN中包含了对时序特征的处理,对于同一数据根据其前文不同也将得到不同的输出。这也便是RNN中最重要的特征,通过引入延迟器来让网络模型包含“记忆”。

  • 延迟器只是一个虚拟单元,也称为RNN的记忆单元,它的作用便是保存上一次的节点状态信息,每次节点计算时将使用上一次的状态信息参与进行并更新状态,可以理解为一个动态偏置,状态信息的计算与神经元计算类似,它也包含权重参数

    st=f(wxt+vst1) s_t = f(\boldsymbol{w}x_t + \boldsymbol{v}s_{t-1})

    其中tt代表时刻信息,ff是一个非线性激活函数,w,v\boldsymbol{w},\boldsymbol{v}分别为输入的权重参数和状态的权重参数。

Bi-RNN

  • 双向(Bidirectional)循环神经网络是在RNN的基础上改进而来,刚才我们介绍了RNN的网络结构,通过记忆单元使得网络模型有了对前文的联系,但是在日常中仅仅有上文的联系还不够,我们可能需要联系完整的上下文。此时BRNN应运而生。

    在Bi-RNN中将隐藏层细分为了正向层和反向层。这两层分别处理输入数据的正向序列和反向序列。网络机构如下:

    Bi-RNN
    Bi-RNN
  • 训练时可以正向计算和反向计算同时进行,将最终的结果加权求和得到输出。当然Bi-RNN也不代表能够解决所有问题,每个记忆单元只保留了上一个时刻的信息,所以对于间隔较远的数据其关联性也不能很好的利用,所以对于RNN还有更多正向/反向层的深度循环神经网络。

    同时在RNN中,因为引入了时序的概念,其计算的优化也是一个问题。对于此类问题将在RNN的各类变体以及实际例子中再做记录。