循环神经网络RNN模型和长短时记忆系统LSTM
传统DNN或者CNN无法对时间序列上的变化进行建模,即当前的预测只跟当前的输入样本相关,无法建立在时间或者先后顺序上出现在当前样本之前或者之后的样本之间的联系。实际的很多场景中,样本出现的时间顺序非常重要,例如自然语言处理、语音识别、手写体识别等应用。
循环神经网络RNN包含循环的网络,可以记录信息的持久化信息,特别适合应用在跟时间序列相关的场合。
RNN之父Jürgen Schmidhuber
Jürgen Schmidhuber 是瑞士人工智能实验室 IDSIA 的科学事务主管,同时任教于卢加诺大学和瑞士南部应用科学与艺术学院。他于1987年和1991年在慕尼黑工业大学先后获得计算机科学的学士和博士学位。自1987年以来,一直引领着自我改进式(self-improving)通用问题求解程序(problem-solver)的研究。从1991年开始,他成为深度学习神经网络领域的开拓者。
他在 IDSIA 和慕尼黑工业大学的研究团队开发了一种递归神经网络,并率先在正式的国际性比赛中获胜。这些技术革新了手写体识别、语音识别、机器翻译和图片注释技术,现在被谷歌、微软、IBM、百度和其他很多公司应用。
RNN循环神经网络的基本循环结构如下图:
RNN的输入是一组向量,或者说是任意长度的一个序列,具体到文本应用中就是一段话。RNN假定序列之中每个元素出现的位置不是孤立的,它一定是跟在它之前的出现的元素有关。
上图表示神经网络的模块A的输出除了作为下一个模块的输入外,还会和下一个时刻模块A的输入一起,作为A的输入传递给模块A,注意A的输出是在下一时刻传输给A,而不是在同一时刻循环输出再输入给A(这样就成了死循环了)。为了方便解读,一般把循环结构展开:
这样每一个模块A的输入就包含了两部分:
1. 上一个模块A的输出
2. 时间序列在此样本之前的所有样本在模块A之前的所有模块上的输出。
RNN通过这样一个一个循环结构,构建了一个与序列和先后次序有关的模型,该模型的预测不仅与当前输入有关,还与在此输入之前的所有输入状态有关,这也是与自然状态下人的思维判别方式最像的。
RNN还在隐含层节点之间增加了互连:
理论上RNN可以支持任意长度的序列,但是如果序列太长会导致优化时出现梯度消失的问题,即神经元很难接收到离当前元素很远位置上的元素对当前元素的影响,常规只能接收到之前的若干个单位,所以一般会设置最大长度,超长会对其截断。
LSTM(long short-term memory)长短时记忆网络
LSTM解决了RNN不支持长期依赖的问题,使其大幅度提升记忆时长。
LSTM是一种特殊类型的RNN,可以学习长期依赖信息,由Hochreiter & Schmidhuber 在1997年提出。标准RNN中循环模块如下:
而在LSTM中,这一结构变为:
LSTM的成功的关键在于图中上方的贯穿线,类似于传送带,将前边序列的信息成功传递给很远后边的神经元,而保持不衰减。LSTM设计了“门”的结构来决定当前的状态如何添加到贯穿线上。
LSTM 的门决定了信息通过的方式,包含一个sigmoid 神经网络层和一个乘法操作,Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”。
LSTM 拥有三个门,来保护和控制细胞状态。
第一个Sigmoid门决定了需要从当前状态中舍弃哪些信息,这个门称为“忘记门”,例如根据当前的状态出现了一个新的主语,那么之前的句子中的主语就应该被丢弃掉。
第二个Sigmoid+T函数组成的门决定了哪些信息需要被添加到状态中,这里分为两部分,一个是Sigmoid层决定了将要更新哪些值,这一部分跟第一层完全一样,而T层会创建一个新的信息用来添加到状态中。如替换掉之前句子的主语的状态。
前边两个门的工作主要是用来更新贯穿线的状态的,第三个门的作用是根据贯穿线上的信息以及当前的输入信息计算模块的输出,更新的依然是哪些信息需要丢弃,哪些信息需要被添加。
循环神经网络RNN模型和长短时记忆系统LSTM的更多相关文章
- 循环神经网络(RNN)模型与前向反向传播算法
在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...
- 通过keras例子理解LSTM 循环神经网络(RNN)
博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...
- 从网络架构方面简析循环神经网络RNN
一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...
- 循环神经网络(RNN)的改进——长短期记忆LSTM
一:vanilla RNN 使用机器学习技术处理输入为基于时间的序列或者可以转化为基于时间的序列的问题时,我们可以对每个时间步采用递归公式,如下,We can process a sequence ...
- 循环神经网络RNN及LSTM
一.循环神经网络RNN RNN综述 https://juejin.im/entry/5b97e36cf265da0aa81be239 RNN中为什么要采用tanh而不是ReLu作为激活函数? htt ...
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)
前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...
随机推荐
- IIS DirectoryEntry
DirectoryEntry是.Net给我们的一大礼物,他的名字我们就知道他的功能--目录入口.使用过ADSI的人都知道操作IIS,WinNT这些时,我们还需要提供他们的Path,操作IIS时,这个P ...
- Python面试题之Python和Java中Super方法的区别
python 的 super 是一个函数,需要两个参数,第一个参数是类,第二个参数是实例,返回值是一个类对象. 其意义是:站在参数2这个实例的角度看去, 参数1这个类的‘父亲’是谁,把‘父亲’返回. ...
- 较常用的Math方法及ES6中的扩展
记录下与Math有关的常用方法,如:求最大值.最小值等,或者是保留几位数啥的 1.数据 let floatA = 2.325232; let floatB = 2.3456; let temporar ...
- D3学习之地图
D3学习之地图 (2017.03.09-03.11) 地图的意义 在可视化领域中,将数据点投影和关联到地理区域上,是一个非常关键的内容(体现了可视化中利用读者自身知识常识从而加速吸收信息的原则). G ...
- shell脚本实现进度条
使用shell脚本编写进度条 可已加入到shell脚本当中 主要作用:好看 美观 没毛用 (一) 普通进度条: #!/bin/bashb='' for ((i=0;$i<=20;i++)) do ...
- [Android]自定义控件LoadMoreRecyclerView
RecyclerView是加强版的ListView,用于在有限的窗口中展示大量的数据,而LoadMoreRecyclerView则是为RecyclerView增加了加载更多的功能,先来看效果: 三种加 ...
- Java中List集合的常用方法
List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来. 这篇文章就不讲继承Collection接口的那些方法了 https://www.cnblo ...
- 教你打造一个Android组件化开发框架
*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 CC:Component Caller,一个android组件化开发框架, 已开源,github地址:https://github ...
- javascript简单介绍总结(二)
JavaScript 函数函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.JavaScript 函数语法函数就是包裹在花括号中的代码块,前面使用了关键词 function:function ...
- H5测试
H5是什么? H5的全称是HTML5,其实就是:移动端WEB页面. H5与原生 APP的区别: APP是使用原生系统内核的,相当于直接在系统上操作,是我们传统意义上的软件,更加稳定. H5的APP先得 ...