首页 > 编程知识 正文

lstm神经网络结构,双向长短期记忆网络

时间:2023-05-04 19:48:11 阅读:18228 作者:1267

1.recurrentneuralnetwork(RNN )多层感知器(MLP )到循环神经网络(rnn )的扩展乍一看似乎微不足道,但对序列的学习有很深的意义。 循环神经网络(RNN )的使用用于处理序列数据。 在传统神经网络中的模型中,层和层之间是完全连接的,但是各层之间的节点没有连接。 但是,这种普通的神经网络对许多问题无能为力。 例如,要预测句子中的下一个单词是什么,就必须使用上一个单词。 因为在一个句子中前后单词并不是独立的。 循环神经网络(RNN )是指一个序列的当前输出与先前输出也相关。 具体表现为,网络存储以前的信息,将其保存在网络的内部状态,适用于现在输出的计算,理论上,循环神经网络处理任意长度的序列数据

下图显示了典型的循环神经网络(RNN )结构。

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

可视化循环神经网络(RNN )的一种有效方式是考虑到随时间扩展它,以得到如图2所示的结构。

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

图中展示的是时间上扩展的循环神经网络,包括输入单元,输入集为) x0、x1、xt 1、xt 1、输出单元) Output Units 和抑制单元(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=f(uxtwst1)是根据当前输入层的输出和上一隐藏层的输出计算的。 其中f通常是非线性激活函数,如tanh和ReLU ),后面使用LSTM。 在计算ST0时,也就是说,第一个抑制状态必须使用ST1,但它不存在,实际上通常设置为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 )的计算过程如下。

即隐含层之间的节点不再无连接而是有链接的,并且隐含层的输入不仅包含输入层的输出还包含上一时刻隐含层的输出

对于长度为t的输入x,网络中有I个输入单元、h个隐式单元和k个输出单元。 xti定义为时刻t的第I个输入,atj和btj分别表示为时刻t的网络单元j的输入和时刻t的单元j的非线性可微分激活函数的输出。 对于完整序列的隐式单元,可以从时间t=1开始,并通过递归调用获得以下表达式:

p>

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

向后推算(Forward pass):

如同标准的反向传播(Backpropagation),通过时间的反向传播(BPTT)包含对链规则的重复应用。具体的说是,对于循环网络,目标函数依赖于隐含层的激活函数(不仅通过其对输出层的影响,以及其对下一个时步隐含层的影响),也就是:

对于全部的序列 δ 项能够从时刻t = T通过递归的使用上面的公式计算得到。最后,在每一个时步对于隐含层单元的输入和输出的权值是相同的,我们这个序列求和来得到关于每个网络权值的导数。

2. Bi-directional Recurrent Neural Network (BRNN)

如果能像访问过去的上下文信息一样,访问未来的上下文,这样对于许多序列标注任务是非常有益的。例如,在最特殊字符分类的时候,如果能像知道这个字母之前的字母一样,知道将要来的字母,这将非常有帮助。同样,对于句子中的音素分类也是如此。

然而,由于标准的循环神经网络(RNN)在时序上处理序列,他们往往忽略了未来的上下文信息。一种很显而易见的解决办法是在输入和目标之间添加延迟,进而可以给网络一些时步来加入未来的上下文信息,也就是加入M时间帧的未来信息来一起预测输出。理论上,M可以非常大来捕获所有未来的可用信息,但事实上发现如果M过大,预测结果将会变差。这是因为网路把精力都集中记忆大量的输入信息,而导致将不同输入向量的预测知识联合的建模能力下降。因此,M的大小需要手动来调节。

双向循环神经网络(BRNN)的基本思想是提出每一个训练序列向前和向后分别是两个循环神经网络(RNN),而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息。下图展示的是一个沿着时间展开的双向循环神经网络。六个独特的权值在每一个时步被重复的利用,六个权值分别对应:输入到向前和向后隐含层(w1, w3),隐含层到隐含层自己(w2, w5),向前和向后隐含层到输出层(w4, w6)。值得注意的是:向前和向后隐含层之间没有信息流,这保证了展开图是非循环的。

图3 双向循环神经网络(BRNN)在时间上展开

对于整个双向循环神经网络(BRNN)的计算过程如下:

向前推算(Forward pass):

对于双向循环神经网络(BRNN)的隐含层,向前推算跟单向的循环神经网络(RNN)一样,除了输入序列对于两个隐含层是相反方向的,输出层直到两个隐含层处理完所有的全部输入序列才更新:

向后推算(Backward pass):

双向循环神经网络(BRNN)的向后推算与标准的循环神经网络(RNN)通过时间反向传播相似,除了所有的输出层 δ 项首先被计算,然后返回给两个不同方向的隐含层:

3. Long Short-Term Memory (LSTM)

循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息。然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限。这个问题就使得隐含层的输入对于网络输出的影响随着网络环路的不断递归而衰退。因此,为了解决这个问题,长短时记忆(LSTM)结构诞生了。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。具体地说,就是把循环神经网络中隐含层的小圆圈换成长短时记忆的模块。这个模块的样子如下图所示:

图4 长短时记忆模块

关于这个单元的计算过程如下所示:

向前推算(Forward pass):

Input Gate:

通过上图可以观察有哪些连接了 Input Gate: t 时刻外面的输入, t-1 时刻隐含单元的输出, 以及来自 t-1 时刻 Cell 的输出。 累计求和之后进行激活函数的计算就是上面两行式子的含义了。

Forget Gate:

这两行公式的计算意义跟上一个相同,Forget Gate的输入来自于t时刻外面的输入,t-1时刻隐含单元的输出,以及来自t-1时刻Cell的输出。

Cells:

这部分有些复杂,Cell的输入是:t时刻Forget Gate的输出 * t-1时刻Cell的输出 + t时刻Input Gate的输出 * 激活函数计算(t时刻外面的输入 + t-1时刻隐含单元的输出)

Output Gate:

这部分就同样好理解了:Output Gate的输入是:t时刻外面的输入,t-1时刻隐含单元的输出以及t时刻Cell单元的输出。

Cell Output:

最后,模块的输出是t时刻Output Gate的输出 * t时刻Cell单元的输出。

向后推算(Forward pass):

Cell Output:

Output Gate:

Cells:

Forget Gate:

Input Gate:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。