加入收藏 | 设为首页 | 会员中心 | 我要投稿 滨州站长网 (https://www.0543zz.cn/)- CDN、边缘计算、物联网、云计算、运营!
当前位置: 首页 > 大数据 > 正文

双向长短时记忆循环神经网络详解(Bi-directional LSTM RNN)

发布时间:2021-02-20 01:07:20 所属栏目:大数据 来源:网络整理
导读:1. Recurrent Neural Network (RNN) 尽管从多层感知器(MLP)到循环神经网络(RNN)的扩展看起来微不足道,但是这对于序列的学习具有深远的意义。循环神经网络(RNN)的使用是用来处理序列数据的。在传统的神经网络中模型中,层与层之间是全连接的,每层之间
副标题[/!--empirenews.page--]

1. Recurrent Neural Network (RNN)

尽管从多层感知器(MLP)到循环神经网络(RNN)的扩展看起来微不足道,但是这对于序列的学习具有深远的意义。循环神经网络(RNN)的使用是用来处理序列数据的。在传统的神经网络中模型中,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题是无能为力的。比如,预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。循环神经网络(RNN)指的是一个序列当前的输出与之前的输出也有关。具体的表现形式为网络会对前面的信息进行记忆,保存在网络的内部状态中,并应用于当前输出的计算中,即隐含层之间的节点不再无连接而是有链接的,并且隐含层的输入不仅包含输入层的输出还包含上一时刻隐含层的输出。理论上,循环神经网络能够对任何长度的序列数据进行处理,但是在实践中,为了减低复杂性往往假设当前的状态只与前面的几个状态相关。

下图展示的是一个典型的循环神经网络(RNN)结构。

这里写图片描述

图1 循环神经网络(RNN)结构

将循环神经网络(RNN)可视化的一种有效方法是考虑将其在时间上进行展开,得到如图2结构。

这里写图片描述

图2 循环神经网络(RNN)在时间上展开

图中展示的是一个在时间上展开的循环神经网络(RNN),其包含输入单元(Input Units),输入集标记为{ x0,x1,...,xt?1,xt,xt+1,... },输出单元(Output Units),输出集标记为{ y0,y1,...,yt?1,yt,yt+1,... },以及隐含单元(Hidden Units),输出集标记为{ s0,s1,...,st?1,st,st+1,... },这些隐含单元完成了最为主要的工作。图中,从输入层连接到隐含层的权值被标记为U,从隐含层到自己的连接权值被标记为W,从隐含层到输出层的权值被标记为V。注意,在每一个时步的时候同样的权值被再使用。同时,为了表示清晰,偏置的权值在这里被忽略。

在循环神经网络中(RNN),有一条单向流动的信息流是从输入单元到达隐含单元的,与此同时,另一条单向流动的信息流从隐含单元到达输出单元。在某些情况下,循环神经网络(RNN)会打破后者的限制,引导信息从输出单元返回隐含单元,这些被称为“Back projections”,并且隐含层的输入还包括上一层隐含层的输出,即隐含层内的节点是可以自连也可以互连的。

对于图2网络的计算过程如下:

1) xt 表示第t,t=1,2,3,… 步的输入

2) st 为隐含层第t步的状态,它是网络的记忆单元。 st 根据当前输入层的输出和上一步隐含层的输出进行计算 st=f(Uxt+Wst?1) ,其中f一般为非线性的激活函数,如tanh或ReLU(后面会用到LSTM),在计算 s0 时,即第一个的隐含状态,需要用到 st?1 ,但其并不存在,在现实中一般被设置为0向量。

3) ot 是第t步的输出, ot=softmax(Vst)

需要注意的是:

隐含层状态 st 被认为是网络的记忆单元。 st 包含了前面所有步的隐含层状态。而输出层的 ot 只与当前步的 st 有关。在实践中,为了降低网络的复杂度,往往 st 只包含前面若干步而不是所有步的隐含层输出。

在传统神经网络中,每一个网络层的参数是不共享的。而在循环神经网络(RNN)中,每输入一步,每一层各自都共享参数U,V,W,其反映着循环神经网络(RNN)中的每一步都在做相同的事,只是输入不同。因此,这大大降低了网络中需要学习的参数。具体的说是,将循环神经网络(RNN)进行展开,这样变成了多层的网络,如果这是一个多层的传统神经网络,那么 xt st 之间的U矩阵与 xt+1 st+1 之间的U是不同的,而循环神经网络(RNN)中的却是一样的,同理对于隐含层与隐含层之间的W、隐含层与输出层之间的V也是一样的。

图中每一步都会有输出,但是每一步都要有输出并不是必须的。比如,我们需要预测一条语句所表达的情绪,我们仅仅需要关系最后一个单词输入后的输出,而不需要知道每个单词输入后的输出。同理,每步都需要输入也不是必须的。循环神经网络(RNN)的关键之处在于隐含层,隐含层能够捕捉序列的信息。

最后,对于整个循环神经网络(RNN)的计算过程如下:

向前推算(Forward pass):

对于一个长度为T的输入x,网络有I个输入单元,H个隐含单元,K个输出单元。定义 xti 为t时刻的第i个输入,定义 atj btj 分别表示为t时刻网络单元j的输入以及t时刻单元j非线性可微分激活函数的输出。对于完整序列的隐含单元我们可以从时间t = 1开始并通过递归的调用如下公式得到:

这里写图片描述

与此同时,对于网络的输出单元也可以通过如下公式计算出:

(编辑:滨州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读