长短期记忆网络(LSTM)简述
本文是学习LSTMs入门知识的总结。
LSTM(Long-Short Term Memory)是递归神经网络(RNN:Recurrent Neutral Network)的一种。
RNNs也叫递归神经网络序列,它是一种根据时间序列或字符序列(具体看应用场景)自我调用的特殊神经网络。将它按序列展开后,就成为常见的三层神经网络。常应用于语音识别。
虽然前馈神经网络取得很大成功,但它无法明确模拟时间关系,并且所有数据点都是固定长度的向量。所以就诞生了递归神经网络,递归即自我调用,递归神经网络与其他网络的不同之处在于它的隐含层是能够跨越时间点的自连接隐含层,隐含层的输出不仅进入输出端,还进入了下一个时间步骤的隐含层,所以它能够持续保留信息,能够根据之前状态推出后面的状态。
RNN每个时间状态的网络拓扑结构相同,在任意t时间下,包含输入层、隐含层、输出层。RNN的隐含层的输出一分为二,一份传给输出层,一份与下一时刻输入层的输出一起作为隐含层的输入。RNN的激活函数仍为sigmoid函数或tanh函数。
举一个应用RNN预测单词的案例:
假设我们只有四种字母的词汇“helo”,然后我们想要用训练序列“hello”训练一个RNN。这个训练序列实际上是来自于4个独立的训练案例:
1. 字母e应该在字母h出现的情况下才可能出现,
2. 字母l应该出现在he出现的情况下,
3. 字母l同样可以出现在hel出现的情况下,
4. 字母o应该出现在hell出现的情况下。
采用1-of-k编码(按字符索引顺序,1表示输入字符在该索引位置,0表示不在)将每个字符编码成一个向量,然后用每次向RNN中输入一个字符。然后我们会看到一个4维序列的输出向量(每个字符代表一个维度),我们将此作为RNN分配给序列下一个字符的置信度。选用三层RNN网络,输入输出层为4维(即4个单元),隐含层为3维。可以看出,在第一次执行时,RNN读取到字符“h”然后将它之后可能出现字符“h”的置信度设置为1.0,可能出现字符“e”的置信度设置为2.2,可能出现字符“l”的置信度设置为-3.0,可能出现字符“o”的置信度设置为4.1。因为在我们的训练数据中,下一个出现的字符是“e”,我们将要提高这个字符的置信度(绿色数字)并且降低其他字符的置信度(红色数字)。通常的做法是使用一个交叉熵损失函数,这相当于在每个输出向量上使用Softmax分类器,将下一个出现的字符的索引作为一个正确的分类。本案例中采用小批量随机梯度下降训练。
RNN也有缺点,跨时间步的反向传播扩展会有梯度消失问题,即后面时间步的错误信号不能回到足够早的时间步,这样RNN就不能学习长时间度的问题。于是1997年,Sepp Hochreiter和Jurgen Schmidhuber提出了长短期记忆(LSTM)模型,这个模型中,常规的神经元被存储单元替代,每个存储单元由输入门、输出门、自有状态组成。
标准RNN的重复模块只包含一个tanh函数:
LSTM中的重复模块包含四个相互作用的激活函数(三个sigmoid,一个tanh):
(图中每条线表示一个完整向量,从一个节点的输出到其他节点的输入。粉红色圆圈代表逐点操作,比如向量加法,而黄色框表示门限激活函数。线条合并表示串联,线条分差表示复制内容并输出到不同地方。)
下面分析LSTM工作原理:
存储单元中管理向单元移除或添加的结构叫门限,有三种:遗忘门、输入门、输出门。门限由sigmoid激活函数和逐点乘法运算组成。前一个时间步骤的隐藏状态,一个送到遗忘门(输入节点),一个送到输入门,一个送到输出门。就前传递而言,输入门学习决定何时让激活传入存储单元,而输出门学习合适让激活传出存储单元。相应的,对于后传递,输出门学习何时让错误流入存储单元,输入门学习何时让它流出存储单元。
LSTM核心是单元状态,即传过图中的水平线,下图所示为t-1状态到t状态。
正向传递第一步:遗忘门限层,决定哪些信息从单元状态中抛弃。公式中,括号左边的σ\sigma是sigmoid函,W是连接权重矩阵,其下标对应那条连接,W_f是遗忘门(forget)连接的权重矩阵,h_t-1是隐含层上一个时间节点的输出,x_t是t时刻输入层的输出,b_f是遗忘门的偏移值。下面的公司依此类推。
第二步:决定单元状态中保存哪些新信息。分为两步:生成临时新状态、更新旧状态。
i为输入门的输出,决定哪些值需要更新; C’t 是临时状态,包含新候选值。
旧状态Ct-1 乘以ft,忘记决定要忘记的,再加上新的候选值it*C’t ,就得到新的状态。
第三步决定要输出什么:
首先通过sigmoid函数决定哪些需要输出,再将单元状态输入到tanh函数(将值转化为-1到1之间),再乘以sigmoid门限值,得到输出。
上面讨论的是最标准的LSTM,但实际应用中会稍加改动,常见的LSTM变体如下:
1. 2000年Gers和Schmidhuber提出加入窥视孔连接,即将单元状态也作为门限层的输入。
2. 藕合遗忘和输入门限,不单独决定遗忘哪些、添加哪些,而是一起做决定,在输入时才遗忘:
3. 2014年,Cho等提出门限递归单元GRU。将以往和输入门限结合输入到单个“更新门限”中,还将单元状态和隐藏状态合并。
4. 其他的还有深度门限RNN、关注点RNN(即让RNN中每一步都从更大的信息集中挑选信息作为输入)等。
参考文献:
1. 深入浅出LSTM神经网络:http://www.csdn.net/article/2015-06-05/2824880
2. 递归神经网络不可思议的有效性:http://yuedu.163.com/news_reader/#/~/source?id=426f1ed9-b19b-44f5-bcad-9f58930fc65e_1&cid=e26730167cd644e1a11f156aec324823_1
3. 理解长短期记忆网络:http://www.csdn.net/article/2015-11-25/2826323
长短期记忆网络(LSTM)简述相关推荐
- 1014长短期记忆网络(LSTM)
长短期记忆网络(LSTM) 长期以来,隐变量模型存在着长期信息保存和短期输入缺失的问题,解决这个问题最早的方法之一就是 LSTM 发明于90年代 使用的效果和 GRU 相差不大,但是使用的东西更加复杂 ...
- 简单介绍长短期记忆网络 - LSTM
文章目录 一.引言 1.1 什么是LSTM 二.循环神经网络RNN 2.1 为什么需要RNN 三.长短时记忆神经网络LSTM 3.1 为什么需要LSTM 3.2 LSTM结构分析 3.3 LSTM背后 ...
- MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测
MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...
- 『NLP学习笔记』长短期记忆网络LSTM介绍
长短期记忆网络LSTM介绍 文章目录 一. 循环神经网络 二. 长期依赖问题 三. LSTM 网络 四. LSTM 背后的核心理念 4.1 忘记门 4.2 输入门 4.3 输出门 五. LSTM总结( ...
- 基于长短期记忆网络(LSTM)对股票价格的涨跌幅度进行预测
完整代码:https://download.csdn.net/download/qq_38735017/87536579 为对股票价格的涨跌幅度进行预测,本文使用了基于长短期记忆网络(LSTM)的方法 ...
- 长短期记忆网络(LSTM)学习笔记
文章目录 0 前言 1 LSTM与RNN的异同 2 LSTM结构细节 2.1 细胞状态 2.2 遗忘门 2.3 输入门 2.4 输出门 3 总结 4 LSTM的变体 4.1 Adding " ...
- 长短期记忆网络LSTM
1. LSTM是循环神经网络的一个变体可以有效的解决简单循环神经网络的梯度消失和梯度爆炸的问题. 2. 改进方面: 新的内部状态 Ct专门进行线性的循环信息传递,同时(非线性的)输出信息给隐藏层的外部 ...
- 长短期记忆网络 LSTM
这里写目录标题 1. LSTM介绍 1.1 什么是LSTM 1.2 LSTM相较于RNN的优势 1.3 LSTM的结构图 1.3.1 LSTM的核心思想 1.3.2 LSTM的遗忘门 1.3.3 LS ...
- keras实现简单lstm_四十二.长短期记忆网络(LSTM)过程和keras实现股票预测
一.概述 传统循环网络RNN可以通过记忆体实现短期记忆进行连续数据的预测,但是,当连续数据的序列边长时,会使展开时间步过长,在反向传播更新参数的过程中,梯度要按时间步连续相乘,会导致梯度消失或者梯度爆 ...
- 白话机器学习-长短期记忆网络LSTM
一 背景 既然有了RNN,为何又需要LSTM呢? 循环神经网络RNN的网络结构使得它可以使用历史信息来帮助当前的决策.例如使用之前出现的单词来加强对当前文字的理解.可以解决传统神经网络模型不能充分利用 ...
最新文章
- PyTorch中的MIT ADE20K数据集的语义分割
- Python 高阶函数filter、map、reduce、reversed、sorted及迭代器函数 iter
- Java面试题大全带答案 110道(持续更新)
- 2017年2月18日 K-means
- 【MFC】Windows窗口样式
- 【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改
- 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(2)
- C++新特性探究(18.1):C++11 shared_ptr智能指针
- linux下与windows下的换行符
- 【matlab】元胞数组的创建
- EnterpriseLibrary 介绍
- 一文学会「内存映射」
- 服务器中转发器干啥用,转发器是什么意思
- vsCode 快捷键
- 从零开始SVN(2)--Eclipse、Subclipse、分支开发
- python c++情侣网名是什么意思_“果然,他用的是情侣网名!”
- 【人物访谈·01期】关于对数据分析前辈的一次行业探讨
- 【计算机组成原理】一位全加器
- word另存为pdf时带书签
- 利用css绘制三条横线的菜单图标