lstm,lstm算法
lstm具有什么特点
LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络(RNN),主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。 LSTM 已经在科技领域有了多种应用。基于 LSTM 的系统可以学习翻译语言、控制机器人、图像分析、文档摘要、语音识别图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等等任务。
工作原理
LSTM区别于RNN的地方,主要就在于它在算法中加入了一个判断信息有用与否的“处理器”,这个处理器作用的结构被称为cell。
一个cell当中被放置了三扇门,分别叫做输入门、遗忘门和输出门。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘。
说起来无非就是一进二出的工作原理,却可以在反复运算下解决神经网络中长期存在的大问题。目前已经证明,LSTM是解决长序依赖问题的有效技术,并且这种技术的普适性非常高,导致带来的可能性变化非常多。各研究者根据LSTM纷纷提出了自己的变量版本,这就让LSTM可以处理千变万化的垂直问题。
lstm是什么
LSTM是 long short term memory的一种简称,中文名字呢又叫做长短期记忆,这是现在最流行的 RNN的计算方式的其中的一种,在上一篇文章中,我介绍过 RNN是在有序的数据中进行学习的,为了记住这些数据,
直观理解LSTM(长短时记忆网络)
长短时神经网络是一种特殊的递归神经网络,所谓递归神经网络就是网络能够解决时间序列问题的预测。所谓递归神经网络就是网络中具有循环结构。递归神经网路从某种程度来说和传统的神经网络并非完全不同。可以将递归神经网络想象成有多层相同网络结构的神经网络,每一层将信息传递给下一层(以下借鉴一些十分易懂的图片):
上述是为了便于理解网络送展示的示意图,实际上网络结构只是上图左边的一小块。
普通的RNN没有办法解决需要长时记忆的功能。比如试图预测“I grew up in France… I speak fluent French.”中最后一个词。最近信息显示下一个词可能是一门语言的名字,但是如果我们想要缩小选择范围,我们需要包含“法国”的那段上下文,从前面的信息推断后面的单词。相关信息与预测位置的间隔很大是完全有可能的。然而RNNs并没有办法解决这种问题。
LSTM作为效果比较好的递归神经网络,拥有者对长时时间序列问题很好的解决能力。
LSTM也有这样的链式结构,但其重复模块内部的机构不同。具体如下:
之下说明一下内部四个网络的具体意义。
主要分为: 单元状态 + 门限。
单元状态:让信息以不变的方式向下流动,相当于一个传送带,但传送带上的东西会随着他通过每一个重复模块基于当时的输入有所增减。
门限:有能力向单元状态增加或者剔除信息的管理机构,相当于传送带上放东西或者拿走东西的那个人。在LSTM中由sigmoid函数和乘法加法来控制这个过程。
上图通过当前时间的输入和前一个时间的输出来通过sigmoid函数来使得单元状态乘以这个sigmoid函数的输出。若sigmoid函数输出0则该部分信息需要被遗忘,反之该部分信息继续在单元状态中继续传下去。
该门限功能是更新旧的单元状态。之前的遗忘门限层决定了遗忘或者添加哪些信息,由该门限层来执行实现。
最后,我们需要决定需要输出什么。这个输出将会建立在单元状态的基础上,但是个过滤版本。首先,我们运行一个sigmoid层来决定单元状态中哪些部分需要输出。然后我们将单元状态输入到tanh函数(将值转换成-1到1之间)中,然后乘以输出的sigmoid门限值,所以我们只输出了我们想要输出的那部分。
上面提到的是非常常规的LSTM网络,LSTM有许多不同的变种,下面来介绍几种。
就是使用耦合遗忘和输入门限。我们不单独决定遗忘哪些、添加哪些新信息,而是一起做出决定。在输入的时候才进行遗忘。在遗忘某些旧信息时才将新值添加到状态中。
它将遗忘和输入门限结合输入到单个“更新门限”中。同样还将单元状态和隐藏状态合并,并做出一些其他变化。所得模型比标准LSTM模型要简单,这种做法越来越流行。
lstm维度
隐藏层的维度(左部tf会自动匹配):
(embdding_dim + n_class,128)
每个循环体的输入维度计算:
batch*emb_dim + batch*n_class
所以输入维度是:
(batch,emb_dim + n_class)
dropout是控制隐藏层正常工作的节点个数。在训练时使用,验证时不使用。在多层lstm中的不同层之间使用,同一层的lstm中循环体之间不使用。