lstm处理时序数据结构图_详解LSTM
Recurrent Neural Networks (RNN)
在使用深度学习处理时序问题时,RNN是最常使用的模型之一。RNN之所以在时序数据上有着优异的表现是因为RNN在
RNN的数学表达式可以表示为
而传统的DNN的隐节点表示为
对比RNN和DNN的隐节点的计算方式,我们发现唯一不同之处在于RNN将上个时间片的隐节点状态
所以,RNN的隐节点
- 计算在该时刻的预测值
:
- 计算下个时间片的隐节点状态
RNN的该特性也使RNN在很多学术和工业前景,例如OCR,语音识别,股票预测等领域上有了十足的进展。
长期依赖(Long Term Dependencies)
在深度学习领域中(尤其是RNN),“长期依赖“问题是普遍存在的。长期依赖产生的原因是当神经网络的节点经过许多阶段的计算后,之前比较长的时间片的特征已经被覆盖,例如下面例子
eg1: The cat, which already ate a bunch of food, was full.| | | | | | | | | | |t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
eg2: The cats, which already ate a bunch of food, were full.| | | | | | | | | | |t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10
我们想预测'full'之前系动词的单复数情况,显然full是取决于第二个单词’cat‘的单复数情况,而非其前面的单词food。根据图1展示的RNN的结构,随着数据时间片的增加,RNN丧失了学习连接如此远的信息的能力(图2)。
梯度消失/爆炸
梯度消失和梯度爆炸是困扰RNN模型训练的关键原因之一,产生梯度消失和梯度爆炸是由于RNN的权值矩阵循环相乘导致的,相同函数的多次组合会导致极端的非线性行为。梯度消失和梯度爆炸主要存在RNN中,因为RNN中每个时间片使用相同的权值矩阵。对于一个DNN,虽然也涉及多个矩阵的相乘,但是通过精心设计权值的比例可以避免梯度消失和梯度爆炸的问题 [2]。
处理梯度爆炸可以采用梯度截断的方法。所谓梯度截断是指将梯度值超过阈值
对比梯度爆炸,梯度消失不能简单的通过类似梯度截断的阈值式方法来解决,因为长期依赖的现象也会产生很小的梯度。在上面例子中,我们希望
2. LSTM
LSTM的全称是Long Short Term Memory,顾名思义,它具有记忆长短期信息的能力的神经网络。LSTM首先在1997年由Hochreiter & Schmidhuber [1] 提出,由于深度学习在2012年的兴起,LSTM又经过了若干代大牛(Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustino Gomez, Matteo Gagliolo, and Alex Gloves)的发展,由此便形成了比较系统且完整的LSTM框架,并且在很多领域得到了广泛的应用。本文着重介绍深度学习时代的LSTM。
LSTM提出的动机是为了解决上面我们提到的长期依赖问题。传统的RNN节点输出仅由权值,偏置以及激活函数决定(图3)。RNN是一个链式结构,每个时间片使用的是相同的参数。
而LSTM之所以能够解决RNN的长期依赖问题,是因为LSTM引入了门(gate)机制用于控制特征的流通和损失。对于上面的例子,LSTM可以做到在t9时刻将t2时刻的特征传过来,这样就可以非常有效的判断
在后面的章节中我们再对LSTM的详细结构进行讲解,首先我们先弄明白LSTM单元中的每个符号的含义。每个黄色方框表示一个神经网络层,由权值,偏置以及激活函数组成;每个粉色圆圈表示元素级别操作;箭头表示向量流向;相交的箭头表示向量的拼接;分叉的箭头表示向量的复制。总结如图5.
LSTM的核心部分是在图4中最上边类似于传送带的部分(图6),这一部分一般叫做单元状态(cell state)它自始至终存在于LSTM的整个链式系统中。
其中
其中
如图8所示,
表示单元状态更新值,由输入数据
和隐节点
最后,为了计算预测值
3. 其他LSTM
联想之前介绍的GRU [4],LSTM的隐层节点的门的数量和工作方式貌似是非常灵活的,那么是否存在一个最好的结构模型或者比LSTM和GRU性能更好的模型呢?Rafal[5] 等人采集了能采集到的100个最好模型,然后在这100个模型的基础上通过变异的形式产生了10000个新的模型。然后通过在字符串,结构化文档,语言模型,音频4个场景的实验比较了这10000多个模型,得出的重要结论总结如下:
- GRU,LSTM是表现最好的模型;
- GRU的在除了语言模型的场景中表现均超过LSTM;
- LSTM的输出门的偏置的均值初始化为1时,LSTM的性能接近GRU;
- 在LSTM中,门的重要性排序是遗忘门 > 输入门 > 输出门。
reference
[1] Hochreiter, S, and J. Schmidhuber. “Long short-term memory.” Neural Computation 9.8(1997):1735-1780.
[2] Sussillo, D. (2014). Random walks: Training very deep nonlinear feed-forward networks with smart initialization.CoRR,abs/1412.6558. 248, 259, 260, 344
[3] Gers F A, Schmidhuber J, Cummins F. Learning to forget: Continual prediction with LSTM[J]. 1999.
[4] Cho K, Van Merriënboer B, Gulcehre C, et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation[J]. arXiv preprint arXiv:1406.1078, 2014.
[5] Jozefowicz R, Zaremba W, Sutskever I. An empirical exploration of recurrent network architectures[C]//International Conference on Machine Learning. 2015: 2342-2350.
lstm处理时序数据结构图_详解LSTM相关推荐
- lstm处理时序数据结构图_LSTM原理与实践,原来如此简单
LSTM原理与实践,原来如此简单 首发于公众号:机器学习荐货情报局 做干货最多的公众号,关注了不吃亏原创不易,转载请标明出处 目录 一.介绍 1.1 LSTM介绍 LSTM全称Long Short-T ...
- mysql 数据分组_详解MySQL 数据分组
创建分组 分组是在select语句中的group by 子句中建立的. 例: select vend_id, count(*) as num_prods from products group by ...
- vue单页面跳页没有数据了_详解刷新页面vuex数据不消失和不跳转页面的解决
先说点什么 vuex和路由拦截这一块捣鼓的有一段时间了,总算是爬出来了,特地来分享一下,首先声明没有什么基础介绍,用的是登录状态存储sessionStorage的方法!!! 进入正题 刷新 刷新相当与 ...
- memcpy后数据不对_详解Redis 的 5 种基本数据结构:
来源:我没有三颗心脏 一.Redis 简介 "Redis is an open source (BSD licensed), in-memory data structure store, ...
- linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...
本文首先讲解window下如何使用Navicat for MySQL导出表. 1.如下图所示,目标数据库是mydatabase,数据库中有四张表. 2.选中该数据库,右键--数据传输. 3.左边可以选 ...
- 数据有序_详解数据库插入性能优化:合并+事务+有序数据进行INSERT操作
概述 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意 ...
- sqllite查询数据量_详解SQLite中的查询规划器
1.0 介绍 查询规划器的任务是找到最好的算法或者说"查询计划"来完成一条SQL语句.早在SQLite 3.8.0版本,查询规划器的组成部分已经被重写使它可以运行更快并且生成更好的 ...
- gerrit 数据迁移_详解git仓库迁移的两种解决方案
Git仓库迁移而不丢失log的方法 要求能保留原先的commit记录,应该如何迁移呢? 同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢? 注意:如果使用了代码审核工具Gerrit ...
- [转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss
[转载]用数据说话 Pytorch详解NLLLoss和CrossEntropyLoss https://www.cnblogs.com/jiading/p/11979391.html NLL_Los ...
最新文章
- CSS a:hover伪类在IE6下的问题
- 对三层架构的简单改进
- sed 和 awk 的一些用法
- Tomcat下使用war包发布项目
- 漫话:如何给女朋友解释什么是HTTP
- 在单节点和多节点上的Hadoop设置
- JS获取整个HTML网页代码 - Android 集美软件园 - 博客频道 - CSDN.NET
- ViewPager里面ImageView图片切换出现bug
- 使用eclipse调试hive mapreduce
- php 苹果支付验证,PHP实现Apple应用内购服务端验证
- windows安装jdk与配置环境变量详解
- 【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)
- 云开发地铁路线图小程序源码和配置教程
- 差速轮和舵轮的纯跟踪算法
- 360Lib整体介绍
- paTJPSb桌趴缀岳凳钟涸
- STM32f429开发中USB读写文件涉及到的库移植
- Caffe2 - (二十四) Detectron 之 utils 函数(2)
- C#实现简单点餐系统(winform框架)
- Linux从头开始学--学习笔记9知识点补充-ubuntu,centos;在linux上创建c程序;linux基础命令,shell命令,vi命令,man帮助手册