前言

最近看了一些关于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网络结构中有环路以使得信息可以传递下去。

在上面的网络节点 A A中,输入为xtx_t,输出为 ht h_t。一个环路结构使得信息可以从网络的一个阶段传递到下一个。
我们把上面的网络结构展开如下。一个RNN网络可以看作是同样记忆块的不断重复。每一个记忆块都把信息传到后面。这样的链状结构自然地表明RNNs适合处理序列和列表数据。

Long Short Term Memory (LSTMs) Networks

长期依赖问题(The Problem of Long-Term Dependencies)

RNNs可以记录之前的网络信息,但是范围是有限的。对于下图这种,当前信息和需要信息间隔较远的情况下(例如, ht+1 h_{t+1}需要 x0 x_0和 x1 x_1的信息),RNNs网络就不能发挥作用。

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

标准的RNNs模型

标准的RNN模型网络结构非常简单,每一个记忆块中只有一个tanh层。

LSTMs的网络结构

LSTMs网络是设计用来解决长期依赖问题的。记住长期的信息是网络设计结构决定的。LSTMs的链状结构中的每一个记忆块有更复杂的设计,如下图。

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

LSTMs的工作原理

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

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

1. 遗忘门

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

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

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

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

3. 输出门

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

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

4. LSTM整体过程

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

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

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

LSTMs网络的一些变种

Gers & Schmidhuber (2000) add the “peephole connections”。

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

结语

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

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

以上。

关于LSTMs的理解相关推荐

  1. 长短期记忆网络(LSTM)学习笔记

    文章目录 0 前言 1 LSTM与RNN的异同 2 LSTM结构细节 2.1 细胞状态 2.2 遗忘门 2.3 输入门 2.4 输出门 3 总结 4 LSTM的变体 4.1 Adding " ...

  2. 理解LSTMs (Long Short Term Memory Networks)

    Understanding LSTMs Model 本文主要参考了大神 Christopher Olah,关于LSTMs论述的博客(Ref[1]),同时加入了自己的理解,最终得以形成了这篇博文. 在读 ...

  3. 独家 | 使用LSTMs和Prophet进行时间序列预测你的电子邮箱负载(附代码)

    作者:Maximilian Strauß 翻译:笪洁琼 校对:丁楠雅 本文共3400字,建议阅读10分钟. 本文通过基线模型.LSTMs和Facebook的Prophet模型来预测每天的电子邮箱负荷, ...

  4. 清华 NLP 团队推荐:必读的77篇机器阅读理解论文

    https://mp.weixin.qq.com/s/2VhgEieBwXymAv2qxO3MPw [导读]机器阅读理解(Machine Reading Comprehension)是指让机器阅读文本 ...

  5. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LSTM详细的网络结构还是不了解,心里牵挂着难受呀!今天看了 tensorflow 文档上面推荐的这篇博文 ...

  6. 【译】深入理解LSTM网络

    递归神经网络 人类不会每时每刻都开始思考. 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词. 你不要扔掉所有东西,然后再从头开始思考. 你的想法有持久性. 传统的神经网络无法做到这一点, ...

  7. 论文浅尝 | 如何利用外部知识提高预训练模型在阅读理解任务中的性能

    论文笔记整理:吴桐桐,东南大学博士生,研究方向为自然语言处理. 链接:https://www.aclweb.org/anthology/P19-1226/ 近年来,机器阅读理解已经逐渐发展为自然语言理 ...

  8. TensorFlow2.0(十一)--理解LSTM网络

    理解LSTM网络 前言 1. 循环神经网络 2. 长期依赖问题 3. LSTM网络 4. LSTM背后的核心思想 5. 单步解析LSTM网络结构 5.1 遗忘门结构 5.2 输入门结构 5.3 输出门 ...

  9. Paper:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding用于语言理解的深度双向Tr

    Paper:<BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding用于语言理解的深度双 ...

最新文章

  1. (0006) iOS 开发之JavaScriptCore 实现UIWebView和HTML的交互
  2. VVC编码进展:码率降低,速度仍需提升
  3. .net 技术类网址
  4. Sublime Text 2 中运行 PHP
  5. 史上最全Java多线程面试60题,含答案大赠送!
  6. vm8中装了redhat9 在安装vmwaretools的时候老是出现gcc位置错误
  7. 深入Asyncio(八)异步迭代器
  8. Atitit 架构之道 之 可读性可维护性架构之道 提升效率架构之道 attilax著 艾龙 著 1.1. Hybrid架构 1 1.2. 分层架构是使用最多的架构模式 Layers模式 也称Tie
  9. HenCoder自定义View学习 - 自定义绘制学习笔记
  10. GlobalMapper20坐标转换
  11. 安卓app逆向破解脱壳教程
  12. Rsync+实时监控同步软件
  13. Cesium基础知识-粒子应用-汽车冒烟
  14. 博士申请 | 西交利物浦大学黄开竹教授组招收机器学习全奖博士生
  15. iOS系统的各种设备识别码
  16. SD卡 (SD miniSD microSD SDIO)知识详解
  17. 解决Mysql执行删除操作报错:1093的问题
  18. 天津地铁出行线路规划项目需求分析与设计思路分析
  19. leetcode 974. Subarray Sums Divisible by K的解法(统计共同余数)
  20. 纯CSS样式实现圆角边框

热门文章

  1. 华为5g服务器硬件供应商,华为发布5G多模终端芯片和商用终端
  2. jsplumb 系列(一)
  3. 教师需要为学生的学习把握节奏
  4. 阳光明媚的一天~|~
  5. 转载:香港实习生微软实习经验分享
  6. 基于目标检测实现遥感场景下的车辆检测计数
  7. jsp网页嵌入PHP网页,JSP_(jsp/html)网页上嵌入播放器(常用播放器代码整理),这个其实很简单,只要在HTML上 - phpStudy...
  8. 面向对象与原型-ps:这一章简直是天书
  9. B. Applejack and Storages(数学+STL的使用) Codeforces Round #662 (Div. 2)
  10. Ubuntu boot menu