传统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. And Design:拓荒笔记——Upload上传

    And Design:拓荒笔记——Upload上传 上传前

  2. java 创建包含枚举的常量类

    参考 public class Constants { public static enum ServiceStatus{ NORMAL(1,"正常办理"),CHANGEING(2 ...

  3. TCP三次“握手”与4次“挥手”

    OSI(Open System Interconnection,开放系统互联)七层网络模型成为开放式系统互联参考模型,是一个把网络通信在逻辑上的定义,也可以理解成为定义了通用的网络通信规范.而我们的数 ...

  4. 怎么理解TCP的面向连接和UDP的无连接(不面向连接)?

    TCP关心分组是否准确送达,甚至仔细到给每个分组编号并收到目的端的确认“我已经收到啦~你继续发~”才继续发送后续的分组,而UDP则不然,它只负责把分组封装好后直接发送到链路上,至于目的端收到与否并不关 ...

  5. Python Tornado之四(Http层)

    HTTPRequest,HTTPServer与HTTPConnection 前面小节在分析 handler 时提到,handler 的读写实际是依靠 httprequest 来完成的.今天就分析 to ...

  6. LeetCode 1. Two Sum 找到两数字求和索引集合

    https://leetcode.com/problems/two-sum/description/ 第一种方法  遍历查找 // // main.m // HFCDemo // // Created ...

  7. $用ConfigParser模块读写conf配置文件

    ConfigParser是Python内置的一个读取配置文件的模块,用它来读取和修改配置文件非常方便,本文介绍一下它的基本用法. 数据准备 假设当前目录下有一个名为sys.conf的配置文件,其内容如 ...

  8. Mybatis中trim的使用

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...

  9. 【Java】仿真qq尝试:用户注册(三)

    需求: 实现用户名和密码存入数据库. 思路: 1.连接数据表用静态加载块 2.crud写成4个静态方法 具体流程: from:https://www.tutorialspoint.com/jdbc/j ...

  10. MySQL DDL方案测试及选型.

    性能测试 一.测试背景 1.机器配置和版本 机器配置(下面测试qps数据都是以本机器配置为准) 型号:Dell s3710 磁盘:SSD 3T CPU:32 内存:128G MySQL版本:5.7.2 ...