深度学习模型(two)-LSTM

循环神经网络(Recurrent Neural Networks)

翻译自:Understanding LSTM Networks

当你阅读这篇文章时,你会根据已掌握的词汇来理解文中词语的意思,你不会说仍掉所有的东西来重新进行思考,因为人的思考是具有连续性的。传统的神经网络无法做到这一点,这是一个很大的缺点。例如,假设您想分类电影中每个时间点发生的事件类型。 目前还不清楚传统神经网络如何利用电影中之前事件来推理后来的事件。

循环神经网络可以有效的解决了这个问题。 网络中具有循环结构,可以让信息持续的存在。

上图中, Xt X t 是一些输入, ht h t 是输出值,这里的循环结构保证了信息可以从此步传递到下一步。
这些循环结构看似使得rnn有些神秘,但是仔细想想,它与一般的神经网络并不是完全不同。一个rnn可以看成许多个相同的网络结构并排在一起,每一个都传递信息到它的继承者,下图是将循环展开后:

这种链式性质揭示了rnn与序列和列表密切相关,其可以很自然的被应用于这样的数据。实际上,过去几年rnn已经被成功的应用于许多问题:演讲识别,语言模式,文本翻译,字幕匹配等。这些问题都是用了LTSTMs模型,一种特殊的RNN网络。对于许多问题都比标准的RNN适用的多。几乎所有好的结果都与之相关。下面本文就主要探索一下LSTMs。

长期依赖问题

RNNs吸引人的一点就在于它能将之前的信息于当前的任务联系起来,比如利用之前视频出现的信息来理解当前视频中画面的信息。
有时,我们只需要最近的一些信息去预测当前的任务,比如:考虑一个语言模型根据之前出现的单词试图去预测下个单词。如果我们试图去预测“云飘在__。“这句话中最后一个词,我们不需要太远的上下文环境,很显然接下的词是天空。这样的例子中,需要预测的词和与之相关的信息相距不是很远,RNNs可以很好的进行学习。

但是,仍有许多例子我们需要更多的上下文信息。比如我们想要预测“我出生在中国。。。我可以流利的说__。“中的最后一个词,从近的信息只能得知这个词可能是一种语言,但是我们要知道是什么语言需要借助“中国“这个信息,在比较远的上文信息中。但是随着距离的变远,RNNs无法学习到二者之间的联系。

理论上,RNNs是可以做到长期依赖的。人们可以小心的选择参数来解决这样的问题,但是实际上,人们已经证明了对RNNs来说学习起来是非常困难的。不过,LSTMs没有这样的问题。

长短期记忆网络

长短期记忆网络,常叫做lstm,是rnn的一种特殊形式,能学习长期的依赖关系。它是由Hochreiter & Schmidhuber (1997),提出,后来由许多人进行了提炼并广受欢迎。它在一大类问题上表现良好,已经被广泛使用。

LSTMs设计之初就是为了避免长期依赖问题。长期的记住信息是其默认的行为,不需要特意的去学习。

所有的循环神经网络都是由一连串重复的神经网络模块构成,在标准的RNN中,重复模块的结构比较简单,比如单一的tanh层。

LSTMs具有类似的结构,不过重复模块的结构不再是单一的网络层,其具有四层网络,通过特殊方式相互联系起来。


我们一步步的来看一下lstm是如何构成。首先我们来认识一下图中的一些记号

上图中,每条线代表一个完整的向量,从一个结点的输出到另一个的输入。粉色的圆表示逐点运算,比如向量加法,其中黄色的方形表示神经网络层。线条合并表示串联,而分行表示其内容正在被复制,副本将转到不同的位置。

LSTMs的核心思想

LSTMs的关键是单元状态,即贯穿图表顶部的水平线。
单元状态有点像传送带。 它贯穿整个链条,只有一些次要的线性交互作用。 信息很容易以不变的方式流过。

这里写图片描述

LSTM 可以控制一种称为门的结构来对单元状态增减信息。

门一种可以让信息通过的方式。 如下是一个由S形神经网络层和逐点乘法运算组成的门。

sigmod层输出0-1的数值,描述了每个组件应该通过多少,0值表示不通过,1表示让其全部通过。
一个LSTM具有三个这样的门结构,用以保护和控制单元状态。

LSTM的逐步分析

LSTM的第一步是决定我们将从单元状态中扔掉哪些信息。 这个决定是由一个叫做“忘记门层”的Sigmod形图层来完成的。它查看 ht1 h t − 1 xt x t ,并为单元状态 Ct1 C t − 1 中的每个数字输出一个介于0和1之间的数字。 1表示“完全保留这个”,而0表示“完全摆脱这个”。

让我们回到我们的例子,试图根据以前所有的语言来预测下一个词。 在这样的问题中,单元状态可能包括当前主体的性别,因此可以使用正确的代词。 当我们看到一个新的主题时,我们想忘记旧主题的性别。

下一步是决定我们要在单元状态中存储什么新信息。 这有两个部分:首先,称为“输入门层”的Sigmod形图层决定我们将更新哪些值。 接下来,tanh层创建一个新的候选值向量 Ct C t ,可以将其添加到单元状态。 在下一步中,我们将结合这两者来创建状态的更新。

在我们的语言模型的例子中,我们希望将新主题的性别添加到单元状态,以替换我们遗忘的旧主题。

现在是时候将旧的单元状态 Ct1 C t − 1 更新为新的单元状态 Ct C t 。 之前的步骤已经决定要做什么,我们只需要真正做到这一点。

我们将旧状态乘以 ft f t ,忘记了我们早先决定忘记的事情。 然后我们将它添加 itCt i t ∗ C t 。 这是新的候选值,根据我们决定更新每个状态值的比例进行缩放。

就语言模型而言,这是我们实际放弃旧主题性别信息并添加新信息的地方,正如我们在之前的步骤中所做的决定。

最后,我们需要决定我们要输出的内容。 这个输出将基于我们的单元状态,但将是一个过滤版本。 首先,我们运行一个Sigmod形图层,它决定我们要输出的单元状态的哪些部分。 然后,我们通过双曲线将单元格状态(将值推到-1和1之间)并将其乘以S形门的输出,以便我们只输出我们决定的部分。

对于语言模型示例,由于它刚刚看到了一个主题,因此它可能需要输出与动词相关的信息,以防接下来会发生什么。 例如,它可能会输出主题是单数还是复数,以便我们知道如果接下来是什么,应该将动词的形式结合到一起。

LSTM 的变体形式

我们所描述的目前是一个非常正常的LSTM。 但并非所有LSTM都与上述相同。 事实上,似乎几乎所有涉及LSTM的论文都使用稍微不同的版本。 差异很小,但值得一提的是其中的一些。

由Gers&Schmidhuber(2000)介绍的一种流行的LSTM变体增加了“窥孔连接”。这意味着我们让门层看着单元状态

上面的图表为所有的门增加了窥视孔,但是许多论文会给出一些窥视孔,而不是其他的孔。

另一种变化是使用耦合的忘记和输入门。 我们不是分别决定要忘记什么,应该增加什么新信息,而是一起做出这些决定。 我们只会忘记我们什么时候要输入什么东西。 当我们忘记一些较旧的东西时,我们只会向该州输入新的值。

LSTM稍微更加戏剧性的变化是由Cho等人引入的门控复发单元(GRU 2014)。 它将遗忘和输入门组合成一个“更新门”。它还合并了单元状态和隐藏状态,并进行了一些其他更改。 由此产生的模型比标准的LSTM模型更简单,并且越来越受欢迎。

这些只是几个最显着的LSTM变体。 还有很多其他的,比如Yao等人的Depth Gated RNN(2015年)。 还有一些完全不同的方法来解决长期依赖问题,比如Koutnik等人的发条RNNs(2014)。

哪种变体最好?差异很重要吗?Greff等人(2015)对流行变体进行了很好的比较,发现它们大致相同。 Jozefowicz等人(2015)测试了超过一万个RNN体系结构,发现一些在某些任务上比LSTM更好。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值