深度学习

关于LSTMs的理解

2017-12-26  本文已影响0人  解忧赋来歌

前言

最近看了一些关于RNN及LSTMs网络的文章,因此,在这里记录一点笔记。主要参考了一篇英文的blog。我把原文的部分内容的翻译加上自己的理解写在下面,内容上有一定的删节和提炼。原文和完整的中文翻译的地址在下面。


英文原文 http://colah.github.io/posts/2015-08-Understanding-LSTMs/
以及对应的中文翻译 http://www.jianshu.com/p/9dc9f41f0b29
引文来自微信公众号机器之心的博文http://mp.weixin.qq.com/s/ORLpqqV8pOv-pIagi8yS1A

Recurrent Neural Networks

人类不是时刻凭空思考的,是具有持续性的。当读者阅读这篇文章时,对每一个单词的理解是建立在以前的单词之上的。
传统的神经网络是不能完成这个功能的,因为它们没有“记忆性”。
Recurrent Neural Networks (RNNs)可以完成这个功能。RNNs网络结构中有环路以使得信息可以传递下去。

RNN网络模型
在上面的网络节点 Long-Term Dependencies

这个长期依赖问题被Hochreiter & Schmidhuber(1997)提出的LSTMs网络解决。

标准的RNNs模型

标准的RNN模型网络结构非常简单,每一个记忆块中只有一个tanh层。
[站外图片上传中...(image-7135d5-1514294159023)]

LSTMs的网络结构

LSTMs网络是设计用来解决长期依赖问题的。记住长期的信息是网络设计结构决定的。LSTMs的链状结构中的每一个记忆块有更复杂的设计,如下图。
[站外图片上传中...(image-58e4c8-1514294159023)]

其中各种图标表示的含义如下图。粉色的圆点表示对应点的操作,比如向量相加;黄色的矩形表示网络层。


网络组成的图标示意图

LSTMs的工作原理

LSTMs的关键就是单元状态(cell state),就是下图中穿过框图顶部的黑色线。单元状态就像是传送带一样,穿过整条的网络链路,并且只与经过的节点有很少的线性的互动。信息可以很容易的在不加改变的情况下穿过这条通路。
LSTMs网络通过叫做门(gates)的结构来控制单元状态(记忆块状态)。门是由sigmoid层和点相称运算组成的。sigmoid层的输出在0到1之间。0表示不允许通过,1表示允许全部的信息通过。

LSTM单元一般会输出两个单元到下一个单元,即单元状态和隐藏状态。记忆块负责记忆各个隐藏状态或前面时间步的事件,这种记忆方式一般是通过三个门控机制实现,即输入门、遗忘门和输出门。

1. 遗忘门

LSTMs网络的第一步是决定哪些信息可以通过单元状态。这个决定是通过组成遗忘门的sigmod层决定的。遗忘门的输入是上一个记忆单元的隐藏状态h_{t-1}和当前单元的输入x_t,输出为0到1的值,作用于单元状态C_t上。输出1表示让全部的信息通过,输出0表示不允许任何信息通过。

遗忘门

2. 输入门
LSTMs网络的第二个步是决定哪些信息需要被存储的。这个过程是由输入门决定的。

输入门负责将信息添加到单元状态,这一添加信息的过程主要分为三个步骤。

  • 通过 Sigmoid 函数来调节需要添加到单元状态的值,这与遗忘门非常相似,它起到的作用就是作为一个滤波器过滤来自h_{t-1}x_t 的信息。
  • 创建一个包含所有可能值的向量,它可以被添加到单元状态中。该过程通过使用 tanh 函数实现,输出值为-1 到 1.
  • 将调节滤波器的值(Sigmoid 门控)乘以创建的向量(tanh 函数),然后将这些有用的信息添加到单元状态中。

在完成这三个步骤后,我们基本上确保了添加到单元状态的信息都是重要的,且不是冗余的。


输入门

3. 输出门

在确定最终的输出之前,我们要先更新单元状态C_t。我们用计算出的遗忘门输出f_t乘以上一个单元状态C_{t-1},然后与i_{t} \times \tilde{C}_t相加。这样就得到了新的单元状态。
接下来,我们要决定最后的输出。
输出门的功能可再次分为三个步骤:

  • 把 tanh 函数应用到单元状态之后创建一个向量,从而将值缩放在-1 到+1 之间。
  • 使用 h_{t-1}x_t 的值生成一个过滤器,以便它可以调节需要从上述创建的向量中输出的值。这个过滤器再次使用一个 sigmoid 函数。
  • 将此调节过滤器的值乘以在步骤 1 中创建的向量,并将其作为输出发送出去,并发送到下个单元的隐藏态。
输出门

4. LSTM整体过程

以上我们具体了解了 LSTM 的各个部分,但读者可能对 LSTM 的整体过程仍然不是太了解,下面我们简要地向读者介绍 LSTM
单元选择记忆或遗忘的具体处理流程。

以下是 LSTM 单元的详细结构,其中 Z 为输入部分,Z_iZ_oZ_f分别为控制三个门的值,即它们会通过激活函数 f 对输入信息进行筛选。一般激活函数可以选择为 Sigmoid 函数,因为它的输出值为 0
到 1,即表示这三个门被打开的程度。

图片来源于李弘毅机器学习讲义

若我们输入Z,那么该输入向量通过激活函数得到的 g(Z) 和输入门 f(Z_i )的乘积g(Z) f(Z_i )就表示输入数据经筛选后所保留的信息。Z_f控制的遗忘门将控制以前记忆的信息到底需要保留多少,保留的记忆可以用方程 c*f(z_f)表示。以前保留的信息加上当前输入有意义的信息将会保留至下一个 LSTM 单元,即我们可以用c' =g(Z)f(Z_i) + cf(Z_f) 表示更新的记忆,更新的记忆 c'也表示前面与当前所保留的全部有用信息。我们再取这一更新记忆的激活值 h(c')作为可能的输出,一般可以选择 tanh激活函数。最后剩下的就是由 Z_o所控制的输出门,它决定当前记忆所激活的输出到底哪些是有用的。因此最终 LSTM 的输出就可以表示为 a = h(c')f(Z_o)

LSTMs网络的一些变种

Gers & Schmidhuber (2000) add the "peephole connections"。

LSTMs with peephole connections

Cho, et al. (2014), Gated Recurrent Unit (GRU)

LSTMs with GRU

结语

写了将近一周,终于把这篇写完了。今天实验室电脑坏掉了,师兄说是我每日让它跑程序还不看着它导致的。

Jed's PC : 让你每天让我跑程序还不看着人家,我死给你看。
Jed:sad~ ::>_<:: ~sad。

以上。

上一篇下一篇

猜你喜欢

热点阅读