前言
最近看了一些关于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网络结构中有环路以使得信息可以传递下去。
在上面的网络节点 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层决定的。遗忘门的输入是上一个记忆单元的隐藏状态和当前单元的输入,输出为0到1的值,作用于单元状态上。输出1表示让全部的信息通过,输出0表示不允许任何信息通过。
2. 输入门
LSTMs网络的第二个步是决定哪些信息需要被存储的。这个过程是由输入门决定的。
输入门负责将信息添加到单元状态,这一添加信息的过程主要分为三个步骤。
- 通过 Sigmoid 函数来调节需要添加到单元状态的值,这与遗忘门非常相似,它起到的作用就是作为一个滤波器过滤来自 和 的信息。
- 创建一个包含所有可能值的向量,它可以被添加到单元状态中。该过程通过使用 tanh 函数实现,输出值为-1 到 1.
- 将调节滤波器的值(Sigmoid 门控)乘以创建的向量(tanh 函数),然后将这些有用的信息添加到单元状态中。
在完成这三个步骤后,我们基本上确保了添加到单元状态的信息都是重要的,且不是冗余的。
输入门
3. 输出门
在确定最终的输出之前,我们要先更新单元状态。我们用计算出的遗忘门输出乘以上一个单元状态,然后与相加。这样就得到了新的单元状态。
接下来,我们要决定最后的输出。
输出门的功能可再次分为三个步骤:
输出门
- 把 tanh 函数应用到单元状态之后创建一个向量,从而将值缩放在-1 到+1 之间。
- 使用 和 的值生成一个过滤器,以便它可以调节需要从上述创建的向量中输出的值。这个过滤器再次使用一个 sigmoid 函数。
- 将此调节过滤器的值乘以在步骤 1 中创建的向量,并将其作为输出发送出去,并发送到下个单元的隐藏态。
4. LSTM整体过程
图片来源于李弘毅机器学习讲义以上我们具体了解了 LSTM 的各个部分,但读者可能对 LSTM 的整体过程仍然不是太了解,下面我们简要地向读者介绍 LSTM
单元选择记忆或遗忘的具体处理流程。以下是 LSTM 单元的详细结构,其中 为输入部分,、 和 分别为控制三个门的值,即它们会通过激活函数 对输入信息进行筛选。一般激活函数可以选择为 Sigmoid 函数,因为它的输出值为 0
到 1,即表示这三个门被打开的程度。
若我们输入,那么该输入向量通过激活函数得到的 和输入门 的乘积就表示输入数据经筛选后所保留的信息。控制的遗忘门将控制以前记忆的信息到底需要保留多少,保留的记忆可以用方程 表示。以前保留的信息加上当前输入有意义的信息将会保留至下一个 LSTM 单元,即我们可以用 表示更新的记忆,更新的记忆 也表示前面与当前所保留的全部有用信息。我们再取这一更新记忆的激活值 作为可能的输出,一般可以选择 tanh激活函数。最后剩下的就是由 所控制的输出门,它决定当前记忆所激活的输出到底哪些是有用的。因此最终 LSTM 的输出就可以表示为 。
LSTMs网络的一些变种
Gers & Schmidhuber (2000) add the "peephole connections"。
Cho, et al. (2014), Gated Recurrent Unit (GRU)
结语
写了将近一周,终于把这篇写完了。今天实验室电脑坏掉了,师兄说是我每日让它跑程序还不看着它导致的。
Jed's PC : 让你每天让我跑程序还不看着人家,我死给你看。
Jed:sad~ ::>_<:: ~sad。
以上。
网友评论