LSTM——长短时记忆网络
LSTM(Long Short-term Memory),长短时记忆网络是1997年Hochreiter和Schmidhuber为了解决预测位置与相关信息之间的间隔增大或者复杂语言场景中,有用信息间隔有大有小、长短不一,造成循环神经网络性能受到限制而提出的。
LSTM是RNN的一种特殊类型,它可以学习长期依赖的信息。与单一RNN不同,LSTM网络结构是一种拥有3个”门”结构的特殊网络结构,这个特殊设计可以避免长期依赖问题。
下面介绍LSTM网络结构:
原始的RNN隐藏层只有一个状态h,它对于短期的输入非常敏感。LSTM网络增加了一个状态c,让它来保存长期的状态。新增的状态c,称为单元状态。将(b)按照时间维度展开,如下图所示:
如上图可以看出,在t时刻,LSTM网络的输入有3个,即当前时刻网络状态的输入值xt、上一时刻LSTM网络的输入值ht-1以及上一时刻的单元状态ct-1;LSTM网络的输出有两个,即当前时刻LSTM网络输出值ht和当前时刻的单元状态ct。注意,x、c、h都是向量。
LSTM网络的关键,就是怎样控制长期状态c。在这里,LSTM的思路是使用三个控制开关:第一个开关,负责控制保存长期状态c;第二个开关,负责控制把即时状态输入到长期状态c;第三个开关,负责控制是否把长期状态c作为当前的LSTM网络的输出。
这三个开关叫做“门”结构,它们可以让信息有选择性的影响循环神经网络中每一个时刻的状态。所谓“门”,实际上就是一层全连接层,它的输入是一个向量,输出是一个0~1之间的实数向量。假设W是门的权重向量,b是偏置项,那么门可以表示为:g(x)=σ(Wx+b)。其中σ为sigmoid函数,因为其值域为(0,1),所以门的状态都是半开半闭的。
LSTM网络用两个门来来控制单元状态c的内容,一个是遗忘门,它决定了上一时刻的单元状态ct-1有多少保留到当前时刻的单元状态ct;另一个是输入门,它决定了当前时刻网络的输入xt有多少保存到单元状态ct。LSTM网络用输出门来控制单元状态ct有多少输出到LSTM的当前输出值ht。
(1)遗忘门:ƒt=σ(Wf•[ht-1,xt]+bf)。其中Wf是遗忘门的权重矩阵,[ht-1,xt]表示把两个向量连接成一个更长的向量,bf是遗忘门的偏置项。
(2)输入门:it=σ(Wi•[ht-1,xt]+bi)。
接下来计算用于描述当前输入的单元状态ct',它是根据上一次的输出和本次输入来计算的:
ct'=tanh(Wc•[ht-1,xt]+bc)
接着计算当前时刻的单元状态ct。它是由上一次的单元状态ct-1按元素乘以遗忘门ft,再用当前输入的单元状态ct'按元素乘以输入门it,再将这两个乘积相加而产生的:
ct=ft•ct-1+it•ct'
这样就把LSTM网络关于当前的记忆ct'和长期的记忆ct-1组合在一起,形成了新的单元状态ct。由于遗忘门的控制,LSTM网络可以保存很久很久以前的信息;又由于输入门的控制,它可以避免当前无关紧要的内容进入记忆。
(3)输出门:ot=σ(Wo•[ht-1,xt]+bo)
LSTM网络的最终输出,是由输出门和单元状态共同决定的:
ht=ot•tanh(ct)
最终LSTM网络结构示意图如图所示:
上面介绍的公式,为LSTM前向计算的全部公式。
下面介绍下LSTM网络的训练算法:
LSTM网络的训练算法仍为反向传播算法,主要步骤如下:
(1)前向计算每个神经元的输出值,对于LSTM网络来说,即ft、it、ct、ot、ht五个向量的值。
(2)反向计算每个神经元的误差项。与RNN一样,LSTM网络误差项的反向传播也包括两个方向:一个是沿时间的反向传播,即从当前时刻t开始,计算每个时刻的误差项;另一个是将误差项向上一层传播。
(3)根据相应的误差项,计算每个权重的梯度。
(4)用梯度下降的误差后向传播算法更新权重。
LSTM网络程序实现:——tensorflow
import tensorflow as tf
#定义一个基本的LSTM网络结构
lstm=tf.contrib.rnn.BasicLSTMCell(lstm_hidden_size)
#将LSTM中的状态初始化为全零数组。返回的state包含两个张量state.c和state.h
state=lstm.zero_state(batch_size,tf.float32)
#定义损失函数
loss=0.0
#定义训练数据的序列长度num_steps
for i in range(num_steps):
#声明LSTM中使用的变量,在之后的时刻都需要反复用之前定义好的变量
if i>0:tf.get_variable_scope.reuuse_variables()
#将当前输入current_input和前一时刻状态state(h_t-1和c_t-1)传入定义的LSTM结构,
#可以得到当前LSTM输出和lstm_output(ht)和更新后的状态state(ht和ct)
lstm_output,state=lstm(current_input,state)
#将当前时刻LSTM输出传入一个全连接层,得到最后的输出
final_output=fully_connected(lstm_output)
#计算当前时刻输出的损失函数
loss+=calc_loss(final_output,expected_optput)
#使用常规的神经网络训练方法训练模型
LSTM——长短时记忆网络的更多相关文章
- 长短时记忆网络(LSTM)
长短时记忆网络 循环神经网络很难训练的原因导致它的实际应用中很处理长距离的依赖.本文将介绍改进后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM ...
- (转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)
无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...
- RNN学习笔记(一):长短时记忆网络(LSTM)
一.前言 在图像处理领域,卷积神经网络(Convolution Nerual Network,CNN)凭借其强大的性能取得了广泛的应用.作为一种前馈网络,CNN中各输入之间是相互独立的,每层神经元的信 ...
- 机器学习与Tensorflow(5)——循环神经网络、长短时记忆网络
1.循环神经网络的标准模型 前馈神经网络能够用来建立数据之间的映射关系,但是不能用来分析过去信号的时间依赖关系,而且要求输入样本的长度固定 循环神经网络是一种在前馈神经网络中增加了分亏链接的神经网络, ...
- 长短时记忆网络LSTM和条件随机场crf
LSTM 原理 CRF 原理 给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型.假设输出随机变量构成马尔科夫随机场(概率无向图模型)在标注问题应用中,简化成线性链条件随机场,对数线性判别 ...
- 零基础入门深度学习(6) - 长短时记忆网络(LSTM)
代码: def forward(self, x): ''' 根据式1-式6进行前向计算 ''' self.times += 1 # 遗忘门 fg = self.calc_gate(x, self.Wf ...
- 第二十一节,使用TensorFlow实现LSTM和GRU网络
本节主要介绍在TensorFlow中实现LSTM以及GRU网络. 一 LSTM网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息 ...
- 铁通、长宽网络支付时“签名失败”问题分析及解决方案 [88222001]验证签名异常:FAIL[20131101100002-142]
原文地址:http://bbs.tenpay.com/forum.php?mod=viewthread&tid=13723&highlight=%CC%FA%CD%A8 如果你的是铁通 ...
- 长短时记忆神经网络(LSTM)介绍以及简单应用分析
本文分为四个部分,第一部分简要介绍LSTM的应用现状:第二部分介绍LSTM的发展历史,并引出了受众多学者关注的LSTM变体——门控递归单元(GRU):第三部分介绍LSTM的基本结构,由基本循环神经网络 ...
随机推荐
- Vue生命周期钩子---3
vue生命周期流程图:4张图 : 生命周期的解析和应用: Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue ...
- Jmeter Question 之“集成Ant+Jenkins自动化”
首先介绍一下Ant.Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. 是的.还是Apache家 ...
- DIV 自定义滚动条样式(二)
流浏览器自带的滚动条样式很丑,确实有必要美化. 滚动条从外观来看是由两部分组成:1,可以滑动的部分,我们叫它滑块2,滚动条的轨道,即滑块的轨道,一般来说滑块的颜色比轨道的颜色深. 滚动条的css样式主 ...
- 游戏设计艺术 第2版 (Jesse Schell 著)
第1章 太初之时,有设计师 (已看) 第2章 设计师创造体验 第3章 体验发生于场景 第4章 体验从游戏中诞生 第5章 游戏由元素构成 第6章 元素支撑起主题 第7章 游戏始于一个创意 第8章 游戏通 ...
- hydra 常用命令解析
参数说明: Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organi ...
- 数据仓库004 - 复习Linux shell命令 - vi 进程 端口号 系统命令 高危命令 wget yum rpm压缩
一.复习 1.vi的使用方法: 1.1 .正常编辑一个文件,保存退出 1.2. 粘贴的坑:必须在i键 编辑模式 2.找error cat xxx.log | grep -C 10 ERROR > ...
- Jenkins安装第一个插件和通过离线安装包进行安装
1.打开左侧Manage Jenkins 选择Manage Plugins菜单 2.搜索Folders插件,该插件用于创建一个目录 3.点击安装进入插件安装状态,Jenkins会自动下载相关联的插件 ...
- mysql8
解决navicat不能连接问题: grant all privileges on *.* to ‘root’@’%’;ALTER USER 'root'@'localhost' IDENTIFIED ...
- php中in_array函数的坑
由于PHP是弱类型语言,所以有自动类型转换 例子 $array = [0, 1, 2, '3']; var_dump(in_array('abc', $array)); //true var_dump ...
- 运维相关指标数据采集并ES入仓 - 运维笔记
为了进行数字化IT治理,需要对一些应用进程相关指标进行采集并入库.收集到的应用指标数据最好要进行ES入仓,入到Kafka里面,并通过Kibana可视化展示. 需要进行采集的应用进程相关指标如下: ES ...