TensorFlow2.0(十一)--理解LSTM网络
理解LSTM网络
- 前言
- 1. 循环神经网络
- 2. 长期依赖问题
- 3. LSTM网络
- 4. LSTM背后的核心思想
- 5. 单步解析LSTM网络结构
- 5.1 遗忘门结构
- 5.2 输入门结构
- 5.3 输出门结构
- 6. LSTM结构的变体
- 6.1 增加窥视孔连接的LSTM
- 6.2 耦合遗忘门和输入门的LSTM
- 6.3 GRU
前言
本文内容摘自著名博客文章Understanding LSTM Networks, 思维导图链接:读书笔记–《Understanding LSTM Networks》
1. 循环神经网络
我们从来不会从头思考,比如当你看到这句话时,你理解每个字的含义,因为你记住了之前的字和句子,这是因为我们的大脑有记忆的能力。传统的神经网络并不能做到向我们这样理解文章和句子,这是它主要的缺点。举个例子,想像一下你想对电影的每个片段发生的事情进行分类,但是目前还不清楚一个传统的普通网络如何利用它对电影中先前事件的推理来预测后来的事件。循环神经网络解决了这个问题,其是一个自带循环的网络结构,该结构可以使信息保存下来。
图1.1 自带反馈的循环神经网络 -
在图1.1中,AAA是一个神经网络块,输入是XtX_tXt,输出为hth_tht, AAA自带的循环能够使信息从网络的一个步传递到下一个步。这些循环使得循环神经网络看起来有点神秘。然而,如果你再多想一想,就会发现它们和普通的神经网络并没有什么不同。一个循环神经网络可以被认为是同一个网络的多个副本,每个副本都将一条消息传递给一个继任者。如果我们展开循环的话:
图1.2 一个展开的循环神经网络 -
这种链式结构揭示了循环神经网络与序列密切关系。在过去的几年里,RNN在许多问题上都取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕等等。这些成功的关键是LSTM的使用,LSTM是一种非常特殊的循环神经网络,在许多任务中都比标准的RNN好得多,几乎所有基于循环神经网络的令人兴奋的结果都是用它们实现的。本文将探讨LSTM的原理与结构。
2. 长期依赖问题
RNN的一个优点是它可以将先前的信息连接到当前的任务,例如使用先前的视频帧可以加深对当前帧的理解。如果RNN可以做到这一点,它们将非常有用。但是事实是这样的吗?
有时,我们只需要查看最近的信息来执行当前任务。例如,假设一个语言模型试图根据前面的单词预测下一个单词。如果我们试图预测 “云在天空” 中的最后一个词,我们不需要任何进一步的上下文理解,很明显下一个词将是天空。在这种情况下,如果相关信息和所需位置之间的差距很小(如图2.1所示),RNN可以学习使用过去的信息。不幸的是,随着距离的增加,RNN将无法胜任这个工作。
图2.1 相关信息和预测信息的位置较近时
图2.2 相关信息和预测信息的位置较远时 -
从理论上讲,RNN绝对有能力处理这样的“长期依赖关系”,人类可以仔细地为它们选择参数来解决这种形式的问题。不幸的是,在实践中,RNN似乎无法学习它们。Hochreite和Bengio等人深入探讨了这个问题,发现这可能是困难的。不过还好,LSTM网络没有这个问题。
3. LSTM网络
长短期记忆网络通常被称为“LSTM”,是一种特殊的RNN,能够学习长期依赖性。它们在许多问题上都非常有效,现在得到了广泛的应用。LSTM是为了避免长期依赖性问题而设计的。所有的循环神经网络都具有神经网络的一系列重复模块的形式。在标准RNN中(图3.1),这个重复模块有一个非常简单的结构,比如一个tanh层:
图3.1 包含单个层的标准RNN中的重复模块 -
LSTMs也有这种链式结构,但是重复模块有不同的结构。如图3.2所示,与单一的神经网络层不同,这里有四层,以一种非常特殊的方式相互作用:
图3.2 包含四个交互层 LSTM中的重复模块 -
看不懂图3.2的结构没关系,稍后我们将逐步解析LSTM结构。现在,我们先熟悉一下我们将要使用的符号。
图3.3 结构图中符号含义 -
在图3.3中,粉红色的圆圈表示逐点的运算操作,如向量加法,而黄色的盒子是可学习的神经网络层。行合并表示连接,而行分叉表示其内容被复制,并且复制到不同的位置。
4. LSTM背后的核心思想
LSTM的关键是单元状态,即穿过图4.1顶部的水平线。单元的状态有点像传送带。它沿着整个链一直走,只有一些微小的线性相互作用。信息很容易在不改变的情况下流动。
图4.1 LSTM中单元的状态传递 -
LSTM确实有能力将信息移除或添加到单元状态,并由称为门的结构进行调节。门是一种选择性地让信息通过的方式。它们由一个sigmoid神经网络层和一个逐点乘法运算组成,如图4.2所示:
图4.2 LSTM中的门结构 -
sigmoid层输出0到1之间的数字,描述每个成分应通过的量。值为0表示不让任何信息通过,值为1表示让所有信息通过。一个LSTM有三个这样的门,分别为遗忘门,输入门与输出门,用来控制单元的状态。
5. 单步解析LSTM网络结构
5.1 遗忘门结构
LSTM的第一步是决定我们将从单元(cell)状态中丢弃哪些信息。这个步骤是由一个称为“遗忘门”的sigmoid层做出的,如图5.1所示。它合并 ht−1h_{t-1}ht−1 和 xtx_txt,经过一个sigmoid层并为输出一个0到1之间的数字。1表示“完全保留此项”,0表示“完全删除此项”。
让我们回到一个语言模型的例子,它试图根据前面的所有单词预测下一个单词。在这样一个问题中,cell的状态可能包含了当前主语的性别,因此可以使用正确的代词。当我们看到一个新的主题,我们就可以根据遗忘门忘记旧主题的性别。
图5.1 遗忘门结构
5.2 输入门结构
第二步是决定我们将在cell状态下更新哪些新信息。首先,一个称为“输入门”的sigmoid层决定我们要更新哪些值(图5.2)。其次,tanh层创建一个新的候选值向量Ct~\tilde{C_t}Ct~,添加到状态中。在下一步中,我们将结合这两个步骤来创建状态更新。回到我们的语言模型的例子中,我们希望将新主题的性别添加到细胞状态中,以取代我们忘记的旧主题。这就是输入门要起的作用。
图5.2 输入门结构 -
现在是时候将旧的cell状态Ct−1{C_{t-1}}Ct−1更新为新的单元状态Ct{C_t}Ct了。我们把旧状态Ct−1{C_{t-1}}Ct−1乘以ftf_tft,遗忘之前决定忘记的事情。然后我们把它加上it∗Ct~i_t*\tilde{C_t}it∗Ct~。Ct~\tilde{C_t}Ct~是新的候选值,乘以iti_tit是根据我们决定更新每个状态值的程度进行缩放。
在语言模型的例子中,这是我们实际删除旧主题的性别信息并添加新信息的地方,正如我们在前面的步骤中所决定的那样。
图5.3 更新cell状态
5.3 输出门结构
最后,我们需要决定我们要输出什么。此输出将基于单元(cell)状态,但将是过滤之后的版本。如图5.4所示,我们运行一个sigmoid层,它决定了我们要输出的cell状态的哪些部分。然后,我们通过tanh(将值推到-1和1之间)将cell状态乘以sigmoid层的输出,这样我们只输出我们决定的部分。
对于语言模型的例子,因为它只是看到了一个主题,所以它可能希望输出与动词相关的信息,以防下一步是这样。例如,它可能会输出主语是单数还是复数,这样我们就知道如果下一个主语是单数或复数,那么动词应该是什么形式。
图5.4 输出门结构
6. LSTM结构的变体
6.1 增加窥视孔连接的LSTM
本文描述的是一个标准的LSTM。但并非所有的LSTM都与上述相同。事实上,几乎所有涉及LSTM的论文都使用了略有不同的版本。差别不大,但值得一提。由Gers&Schmidhuber(2000)引入的一种流行的LSTM变体是添加“窥视孔连接”,这意味着我们让门层查看单元状态。图6.1在所有的门上都增加了窥视孔,但是许多论文只增加一些窥视孔而不是全部。
图6.1 增加窥视孔连接的LSTM结构
6.2 耦合遗忘门和输入门的LSTM
图6.2所示的另一种变体是使用耦合的遗忘门和输入门。我们不是单独决定要忘记什么和应该添加什么新信息,而是一起做出这些决定。我们只会忘记什么时候我们要在它的位置输入一些东西。我们只在忘记旧的东西时才向状态输入新值。
图6.2 耦合遗忘门和输入门的LSTM结构
6.3 GRU
LSTM的一个影响比较大的变化是Cho等人引入的门循环单位(GRU:Gate Recurrent Unit)。如图6.3所示,它将遗忘门和输入门合并为一个“更新门”,还合并了单元(cell)状态和隐藏状态,并进行了一些其他更改。由此产生的模型比标准的LSTM模型简单,并且越来越受欢迎。
图6.3 门循环网络结构
TensorFlow2.0(十一)--理解LSTM网络相关推荐
- (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)
前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LSTM详细的网络结构还是不了解,心里牵挂着难受呀!今天看了 tensorflow 文档上面推荐的这篇博文 ...
- 从任务到可视化,如何理解LSTM网络中的神经元 By 机器之心2017年7月03日 14:29 对人类而言,转写是一件相对容易并且可解释的任务,所以它比较适合用来解释神经网络做了哪些事情,以及神经网
从任务到可视化,如何理解LSTM网络中的神经元 By 机器之心2017年7月03日 14:29 对人类而言,转写是一件相对容易并且可解释的任务,所以它比较适合用来解释神经网络做了哪些事情,以及神经网络 ...
- 从Tensorflow代码中理解LSTM网络
目录 RNN LSTM 参考文档与引子 缩略词 RNN (Recurrent neural network) 循环神经网络 LSTM (Long short-term memory) 长短期记忆人 ...
- 【译】深入理解LSTM网络
递归神经网络 人类不会每时每刻都开始思考. 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词. 你不要扔掉所有东西,然后再从头开始思考. 你的想法有持久性. 传统的神经网络无法做到这一点, ...
- 理解LSTM网络+Python实现
文章目录 前言 一.传统RNN 二.RNN带来的缺陷 1.梯度爆炸和梯度弥散 2.memory记忆不足 三.LSTM理解 1.LSTM原理 2.LSTM公式 前向传播 反向传播 四.LSTM实践(Py ...
- 理解LSTM网络(翻译)
Translated on December 19, 2015 本文为博客<Understanding LSTM Networks>的翻译文章 原文链接: http://colah.git ...
- Tensorflow2.0实现对抗生成网络(GAN)
在这篇文章中,我们使用Tensorflow2.0来实现GAN,使用的数据集是手写数字数据集. 引入需要的库 import tensorflow as tf from tensorflow import ...
- 理解LSTM 网络Understanding LSTM Networks
Recurrent Neural Networks Humans don't start their thinking from scratch every second. As you read t ...
- TensorFlow2.0(十二)--实现简单RNN与LSTM网络
实现简单RNN与LSTM网络 前言 1. 导入相应的库 2. 加载与构建数据集 2.1 加载数据集 2.2 构建词表 2.3 处理数据 3. 构建简单的RNN模型 3.1 单向RNN模型 3.2 双向 ...
最新文章
- ElasticSearch 条件更新 删除
- Inotify+Rsync实现linux文件实时同步
- ubuntu服务器环境测试wss
- access中总计为first_用Access开发生产管理系统
- ios html正则表达式,ios 正则表达式去html标签
- 千兆光纤收发器测试标准及参数
- [渝粤教育] 西南科技大学 电子设计EDA 在线考试复习资料
- java hanoi塔问题_java 解决汉诺塔问题
- 项目部署到weblogic后页面乱码问题
- did not detect an --insecure-registry argument on the Docker daemon解决方法
- 离散数学:幂集,生成
- Debian vmtools安装后 不能复制粘贴文件
- sccm安装linux系统,SCCM Client for LINUX on FIPS Enabled Systems
- Win11安卓子系统无法启动怎么办?安卓子系统启用虚拟机平台教程(确保在可选的Windows功能中启用虚拟机平台)
- VC下如何使用GDI+进行图像程序设计
- js实现点赞、取消点赞思路(前端技术适用)
- python code for solving eigenvalue problem by Jacobi’s method的代码
- 织梦html编辑器不见了,织梦CMS后台文章编辑内容框消失解决教程
- 采用busybox的嵌入式Linux根文件系统的的制作方法
- 浅析SCI论文发表和转让
热门文章
- linux集群服务有什么用,使用MOSIX搭建Linux的高性能集群服务
- pg函数同步数据到mysql_将数据从PostgreSQL复制到MySQL
- python十点半游戏代码_十点半游戏完整代码及详细注释.py
- php getfullyear,getYear、getFullYear和getUTCFullYear三者的区别
- Android Canvas类介绍和Android Draw Rect 坐标图示
- Oracle-BPM安装详解
- TortoiseSVN 加锁,服务器地址更换,切换登录用户
- VS 2008 xml文件(包括web.config)高亮显示和智能提示失效修复
- Microsoft Visual Studio 2005中使用水晶报表
- Java中对数组的排序方法总汇分析