首页 > 编程知识 正文

lstm原理及实现,lstm双向rnn

时间:2023-05-03 05:13:18 阅读:51545 作者:495

3358 www.Sina.com/http://www.Sina.com /由于学业繁忙,突然发现近四个月没有更新博客,于是简单整理了一下前几天听课的PPT,做了一篇水的博客。 本文主要进行一些RNN和LSTM的介绍,而不是深入说明,本文部分LSTM的通用结构图和通用公式来源于网络,此处不再列举。 感谢照片原创博主的支持!

二、什么是rnn2.1rnn? 全部为Recurrent Neural Network,即称为“循环神经网络”,以序列(sequence )数据为输入,沿序列的前进方向递归(recursion ),应

http://www.Sina.com/http://www.Sina.com /

RNN最初是为NLP领域的任务而设计的,如机器翻译。 在机器翻译任务中,每次翻译的句子长度不一定。 采用递归结构的优点是,可以根据RNN网络翻译的语句的长度递归地自行展开到所需的长度。 不需要为每个语句长度分别设计网络层数不同的RNN。

http://www.Sina.com/http://www.Sina.com /

从上图中CNN与RNN的对比可以看出,CNN的各层由数字区分,但RNN的各层相同。 如从循环递归思想可见的,通过循环递归展开的RNN网络所有层必然都相同。 也就是说,网络的所有层都共享权重。 但权重共享不仅是循环递归的一个结果,也具有一定的工程意义。 如果RNN像CNN那样每个层都有独立的权重,请考虑一个极端的例子。 翻译1万个句子时,RNN需要1万层,如果每层都有独立的权重,整个网络的参数量就会变得庞大,RNN很难在工程中应用。

http://www.Sina.com/http://www.Sina.com/rnn主要用于顺序处理,例如自然语言处理。在输入/输出序列之间的高相关性或相关性任务(即时间序列预测)中,rnn依赖于序列之间的依赖性

http://www.Sina.com/http://www.Sina.com /

这里的序列可以简单地理解为周期序列、语言文字等离散数据。

http://www.Sina.com/http://www.Sina.com /

以下,通过3个例子说明所谓依赖性或相关性

)1)语义依赖关系

在这个机器翻译的例子中,文中的系动词是使用is还是are,取决于前面是cat还是cats。 也就是说,前面名词的单反决定了后面的依存动词的形式,依存动词依存于前面的名词,两者产生了语义上的依存关系。

)2)周期依赖关系

在已知周期规律的周期序列中,给定前几个值,就可以知道后几个值。 例如,在以1、2、3为周期的周期序列中,已知3之后一定会有1,这是因为数字之间有周期性的依赖关系。

)3)函数依赖关系

轨迹预测知道前一瞬间运动目标的位置、速度、加速度、方向、时间间隔等信息,因此可以根据物理公式计算下一瞬间目标的位置。 这是因为它们之间存在函数依赖关系。

当然,依赖关系包括但不限于上面列出的三种类型。

http://www.Sina.com/http://www.Sina.com /

"text-align:center;">

        通过上图以及公式可以看出,RNN的每一步输出不仅依赖于当前的输入,还会综合考虑以前所有步的输入。即Y2的输出不仅取决于X2(红色),还利用了X1的隐状态S1(蓝色)。各时间步之间通过隐状态的连接实现信息共享,使每一步都能综合考虑当前与以前的所有输入进行输出。

2.4 RNN的缺陷

        1.梯度消失

        梯度消失不仅是RNN的缺陷,而是包括CNN在内的神经网络的普遍问题,这也催生了ResNet的出现。所以,对于梯度消失问题,这里不再作赘述。

        2. 无法捕获序列的长时间依赖关系

        考虑一个NLP领域的例子:I grew up in France… I speak fluent French。在例子中,France与French具有语义上的依赖关系,但两者之间间隔很大,RNN难以捕捉到两者间的依赖关系,模型性能会因此下降。我们很难从数学的角度严格推导RNN捕捉长时序列依赖性能力差的原因(不考虑梯度消失),目前比较普遍的解释是,传统RNN中,模型对以前时间步传过来的隐状态做了过于复杂的操作,以至于使隐状态中蕴含的信息丢失。更直观的理解,像人类一样,如果在让你记住事件A的同时让你去做很多其他的事,那你忘掉事件A的概率就大大增加了,这里的“其他事”就相当于RNN中对记忆状态过复杂的操作。

传统RNN对记忆状态的操作

        也正是RNN的这种缺陷,催生了后来的LSTM。

三、LSTM 3.1 什么是RNN

        长短期记忆网络(LSTM)的全称是Long Short Term Memory networks,是RNN的一种特殊形式,特点是能够学习长距离依赖关系。由Hochreiter & Schmidhuber (1997)首先提出,之后被很多学者改善和推广。它在很多问题上都得到很好的表现,现在被广泛使用。

        LSTM的设计之初就是为了解决长距离依赖问题。记住长距离的信息实际上是他们的最基本的行为。

        1.RNN与LSTM的关系

        LSTM可以看作是RNN网络的一种特殊形式,同理,GRU也是如此。LSTM将传统RNN中每一个RNN单元换成了更加复杂的结构,如图下所示。

        3.2 为什么LSTM可以捕获长时依赖关系

        LSTM的关键之处是单元状态(cell),就是图中最上面的水平线。

        单元状态就像一个传送带。它直接沿着整个链运行,只有一些简单的加减等线性操作,信息很容易保持不变。

        LSTM建立一条单独的“路线”用来传递长时依赖关系,每个LSTM单元只对这条通路上做一些简单的加减操作,以保证长时依赖信息不被破坏。

3.3 LSTM结构分解

        1.遗忘门

        LSTM的第一步是决定我们要从单元状态中舍弃什么信息。这一步由激活函数为sigmoid的神经层决定,我们称之为遗忘门(forget gate)首先将ht-1与xt的和作为遗忘门的输入,对于的每一个数字,遗忘门输出一个[0,1]区间的数字,输出1代表“完全保留”,输出0代表“完全遗忘”,再将遗忘门的输出与Ct-1对应元素相乘以忘记一些长时依赖信息。

        2.输入门

        LSTM的第二步决定将要在单元状态(cell)中存储哪些新的信息。这由两个部分组成。首先,激活函数为sigmoid的称为输入门(forget gate)的层决定将更新哪些值。接下来,激活函数为tanh的层创建一个新的候选值向量,可以添加到单元状态。 候选值向量经过输入门筛选后加入到细胞状态(cell)中,细胞状态因此完成更新。

        3.输出门

        最后,LSTM将决定输出的内容,这由输出门(Input gate)决定。这个输出将基于我们的单元状态,但将是一个过滤版。首先,我们运行一个sigmoid层,决定我们要输出单元状态的哪些部分。然后,我们通过tanh函数把更新后的细胞状态值转换为[-1,1]区间。最后,把转换后的单元状态与sigmoid门的输出相乘,这样我们只输出我们决定的部分。

 

四、总结

        总结来看,LSTM中红色的主线传递是长时记忆,而蓝色的主线传递的是短时记忆,这大概也是它被命名为“长短时记忆”的原因吧。

 

五、说下自己的感受

        近些时间,Transformer凭借其强大的多头注意力机制以“屠城”之势在NLP、CV等领域吊打各种主流模型,其中就包括LSTM。但多头注意力机制也给训练Transformer带来了巨大的时间成本与计算开销,虽然有些研究人员将多头注意力机制换为傅里叶变化以减小计算量,但LSTM相比之下在这些方面仍很大优势,因此将合适的注意力机制融合进LSTM框架可能是LSTM与Transformer抗衡的思路之一。

 

 

 

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