白话--长短期记忆(LSTM)的几个步骤,附代码!

1. 什么是LSTM

在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。LSTM就是具备了这一特性。

这篇将介绍另?种常?的?控循环神经?络:?短期记忆(long short-term memory,LSTM)[1]。它??控循环单元的结构稍微复杂?点,也是为了解决在RNN网络中梯度衰减的问题,是GRU的一种扩展。

可以先理解GRU的过程,在来理解LSTM会容易许多,链接地址:三步理解--门控循环单元(GRU)

LSTM 中引?了3个?,即输??(input gate)、遗忘?(forget gate)和输出?(output gate),以及与隐藏状态形状相同的记忆细胞(某些?献把记忆细胞当成?种特殊的隐藏状态),从而记录额外的信息。

2. 输??、遗忘?和输出?

与?控循环单元中的重置?和更新??样,?短期记忆的?的输?均为当前时间步输?Xt与上?时间步隐藏状态Ht?1,输出由激活函数为sigmoid函数的全连接层计算得到。如此?来,这3个?元素的值域均为[0, 1]。如下图所示:

具体来说,假设隐藏单元个数为 h,给定时间步 t 的小批量输? \(X_t\in_{}\mathbb{R}^{n*d}\)(样本数为n,输?个数为d)和上?时间步隐藏状态 \(H_{t-1}\in_{}\mathbb{R}^{n*h}\) 。三个门的公式如下:

输入门:\[I_t=\sigma(X_tW_{xi}+H_{t-1}W_{hi}+b_i)\]

遗忘问: \[F_t=\sigma(X_tW_{xf}+H_{t-1}W_{hf}+b_f)\]

输出门: \[O_t=\sigma(X_tW_{xo}+H_{t-1}W_{ho}+b_o)\]

3. 候选记忆细胞

接下来,?短期记忆需要计算候选记忆细胞 \(\tilde{C}_t\)。它的计算与上?介绍的3个?类似,但使?了值域在[?1, 1]的tanh函数作为激活函数,如下图所示:

具体来说,时间步t的候选记忆细胞计算如下:

\[\tilde{C}_t=tanh(X_tWxc+H_{t-1}W_{hc}+b_c)\]

4. 记忆细胞

我们可以通过元素值域在[0, 1]的输??、遗忘?和输出?来控制隐藏状态中信息的流动,这?般也是通过使?按元素乘法(符号为⊙)来实现的。当前时间步记忆细胞\(H_{t}\in_{}\mathbb{R}^{n*h}\)的计算组合了上?时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘?和输??来控制信息的流动:

\[C_t=F_t⊙C_{t-1}+I_t⊙\tilde{C}_t\]

如下图所?,遗忘?控制上?时间步的记忆细胞Ct?1中的信息是否传递到当前时间步,而输??则控制当前时间步的输?Xt通过候选记忆细胞C?t如何流?当前时间步的记忆细胞。如果遗忘??直近似1且输???直近似0,过去的记忆细胞将?直通过时间保存并传递?当前时间步。这个设计可以应对循环神经?络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较?的依赖关系。

5. 隐藏状态

有了记忆细胞以后,接下来我们还可以通过输出?来控制从记忆细胞到隐藏状态Ht的信
息的流动:

\[H_t=O_t⊙tanh(C_t)\]

这?的tanh函数确保隐藏状态元素值在-1到1之间。需要注意的是,当输出?近似1时,记忆细胞信息将传递到隐藏状态供输出层使?;当输出?近似0时,记忆细胞信息只??保留。下图展?了?短期记忆中隐藏状态的全部计算:

6. LSTM与GRU的区别

LSTM与GRU二者结构十分相似,不同在于

  1. 新的记忆都是根据之前状态及输入进行计算,但是GRU中有一个重置门控制之前状态的进入量,而在LSTM里没有类似门;
  2. 产生新的状态方式不同,LSTM有两个不同的门,分别是遗忘门(forget gate)和输入门(input gate),而GRU只有一种更新门(update gate);
  3. LSTM对新产生的状态可以通过输出门(output gate)进行调节,而GRU对输出无任何调节。
  4. GRU的优点是这是个更加简单的模型,所以更容易创建一个更大的网络,而且它只有两个门,在计算性上也运行得更快,然后它可以扩大模型的规模。
  5. LSTM更加强大和灵活,因为它有三个门而不是两个。

7. LSTM可以使用别的激活函数吗?

关于激活函数的选取,在LSTM中,遗忘门、输入门和输出门使用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh作为激活函数。

值得注意的是,这两个激活函数都是饱和的,也就是说在输入达到一定值的情况下,输出就不会发生明显变化了。如果是用非饱和的激活函数,例如ReLU,那么将难以实现门控的效果。

Sigmoid函数的输出在0~1之间,符合门控的物理定义。且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在?1~1之间,这与大多数场景下特征分布是0中心的吻合。此外,Tanh函数在输入为0附近相比Sigmoid函数有更大的梯度,通常使模型收敛更快。

激活函数的选择也不是一成不变的,但要选择合理的激活函数。

8. 代码实现

MIST数据分类--TensorFlow实现LSTM

机器学习通俗易懂系列文章

9. 参考文献

《动手学--深度学习》


作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

欢迎大家加入讨论!共同完善此项目!群号:【541954936】

原文地址:https://www.cnblogs.com/mantch/p/11369812.html

时间: 2024-08-01 20:58:25

白话--长短期记忆(LSTM)的几个步骤,附代码!的相关文章

如何预测股票分析--长短期记忆网络(LSTM)

在上一篇中,我们回顾了先知的方法,但是在这个案例中表现也不是特别突出,今天介绍的是著名的l s t m算法,在时间序列中解决了传统r n n算法梯度消失问题的的它这一次还会有令人杰出的表现吗? 长短期记忆(Long Short-Term Memory) 是具有长期记忆能力的一种时间递归神经网络(Recurrent Neural Network). 其网络结构含有一个或多个具有可遗忘和记忆功能的单元组成.它在1997年被提出用于解决传统RNN(Recurrent Neural Network) 的

【DL-4】长短期记忆网络(LSTM)

目录 背景 从RNN到LSTM LSTM 的核心思想 LSTM前向传播算法 LSTM 的变体 一.背景 由于RNN梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN的机构做了改进,得到了RNN的特例长短期记忆网络LSTM(Long Short-Term Memory)和其它变形,可以从结构上避免常规RNN的梯度消失. 举个例子:长期依赖(Long-Term Dependencies)问题 假设我们试着去预测"I grew up in France... I speak fluent Fre

deep_learning_LSTM长短期记忆神经网络处理Mnist数据集

1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2.LSTM(Long Short Term Memory)长短期记忆神经网络模型 详见LSTM长短期记忆神经网络:http://www.cnblogs.com/pinard/p/6519110.html 3.LSTM长短期记忆神经网络处理Mnist数据集 1 2 3 4 5 6 7 8 9 10 11

长期和短期记忆(LSTM)网络是最先进的长期序列建模工具

最近哪里都去不了,还是在家学习点什么好,人工智能最近很火,来学学吧.长期和短期记忆(LSTM)网络是最先进的长期序列建模工具.然而,很难理解LSTM学到了什么,也很难研究他们犯某些错误的原因.卷积神经网络领域有很多文章和论文,但是我们没有足够的工具来可视化和调试LSTM. 在本文中,我们试图部分填补这一空白.我们从澳大利亚手语符号分类模型可视化LSTM网络的激活行为,并通过在LSTM层的激活单元上训练降噪自编码器来实现这一点.通过使用密集的自编码器,我们将LSTM激活值的100维向量投影到二维和

JDBC连接sql server数据库的详细步骤和代码

JDBC连接sql server数据库的详细步骤和代码 JDBC连接sql server数据库的步骤如下: [java] view plaincopyprint? 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 成功加载后,会将Driver类的实例注册到DriverManager类中. 2.提供JDBC连接的URL •连接URL定

FEKO 6.0 电磁仿真软件在 Linux下安装以及破解详细步骤(附下载地址和注册程序)

FEKO6.0各版本下载地址(来源于寺院的研究僧): Intel/AMD (32-bit x86) Windows (XP, Vista, Windows 7, Server 2003) feko_distrib_6.0_win32.exe (320 MByte) Linux feko_distrib_6.0_LINUX.tar.gz (392 MByte) Intel/AMD (64-bit x86_64) Windows (XP, Vista, Windows 7, Server 2003,

Keras入门——(6)长短期记忆网络LSTM(三)

参考: https://blog.csdn.net/u012735708/article/details/82769711 https://zybuluo.com/hanbingtao/note/581764 http://blog.sina.com.cn/s/blog_afc8730e0102xup1.html https://blog.csdn.net/qq_30638831/article/details/80060045 执行代码: import pandas as pd from da

深度学习之六,基于RNN(GRU,LSTM)的语言模型分析与theano代码实现

引言 前面已经介绍过RNN的基本结构,最基本的RNN在传统的BP神经网络上,增加了时序信息,也使得神经网络不再局限于固定维度的输入和输出这个束缚,但是从RNN的BPTT推导过程中,可以看到,传统RNN在求解梯度的过程中对long-term会产生梯度消失或者梯度爆炸的现象,这个在这篇文章中已经介绍了原因,对于此,在1997年 的Grave大作[1]中提出了新的新的RNN结构:Long Short Term Dependency.LSTM在传统RNN的基础上加了许多的"门",如input

hadoop日志数据分析开发步骤及代码

日志数据分析:1.背景1.1 hm论坛日志,数据分为两部分组成,原来是一个大文件,是56GB:以后每天生成一个文件,大约是150-200MB之间:1.2 日志格式是apache common日志格式:每行记录有5部分组成:访问ip.访问时间.访问资源.访问状态.本次流量:27.19.74.143 - - [30/May/2013:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 11271.3 分析一些核心指