传统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的更多相关文章

  1. 循环神经网络(RNN)模型与前向反向传播算法

    在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...

  2. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

  3. 循环神经网络(RNN, Recurrent Neural Networks)介绍

    原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...

  4. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

  5. 从网络架构方面简析循环神经网络RNN

    一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...

  6. 循环神经网络(RNN)的改进——长短期记忆LSTM

     一:vanilla RNN 使用机器学习技术处理输入为基于时间的序列或者可以转化为基于时间的序列的问题时,我们可以对每个时间步采用递归公式,如下,We can process a sequence ...

  7. 循环神经网络RNN及LSTM

    一.循环神经网络RNN RNN综述 https://juejin.im/entry/5b97e36cf265da0aa81be239 RNN中为什么要采用tanh而不是ReLu作为激活函数?  htt ...

  8. 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别

    深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...

  9. 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)

    前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...

随机推荐

  1. Canvas:绘制路径

    Canvas:绘制路径 绘制路径 图形的基本元素是路径.路径是[通过不同颜色和宽度的线段或曲线相连形成的不同形状的]点的集合.一个路径,甚至一个子路径,都是闭合的. 使用路径绘制图形需要一些额外的步骤 ...

  2. WPF MVVM模式下ComboBox级联效果 选择第一项

    MVVM模式下做的省市区的级联效果.通过改变ComboBox执行命令改变市,区. 解决主要问题就是默认选中第一项 1.首先要定义一个属性,继承自INotifyPropertyChanged接口.我这里 ...

  3. Python面试题之Python的Super方法

    我们最常见的,可以说几乎唯一能见到的使用super的形式是: class SubClass(BaseClass): def method(self): super(SubClass, self).me ...

  4. js自执行函数&扩展方法

    我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件.但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题.那么如何解决这个问题呢?作用域隔离.在JS中,作用域是通过函数来划分 ...

  5. Flume-NG源码阅读之SinkGroups和SinkRunner

    在AbstractConfigurationProvider类中loadSinks方法会调用loadSinkGroups方法将所有的sink和sinkgroup放到了Map<String, Si ...

  6. python学习笔记(excel+unittest)

    准备先利用之前整理的python自带的unittest框架 整合excel 实现接口自动化测试功能 先看看excel表格设置: 下来是对excel获取的代码: #!/usr/bin/env pytho ...

  7. RabbitMQ C# driver stops receiving messages

    http://stackoverflow.com/questions/12499174/rabbitmq-c-sharp-driver-stops-receiving-messages

  8. 如何去除pycharm中代码下的波浪线

    Pycharm中新建一个工程,如果不经过配置,在该工程下创建模块写代码,通常是有波浪线的,这样看着很不美观 如何解决这种问题,通常有两种方法 方法一:点击右下角的图标,会出现一个Highlightin ...

  9. 百度之星2017初赛A-1006-度度熊的01世界

    度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...

  10. gulp 相关文章

    1.https://www.cnblogs.com/sxz2008/p/6370221.html 2.https://www.cnblogs.com/wujie520303/p/4964931.htm ...