RNN-LSTM入门

Last Edited: Dec 02, 2018 10:20 PM
Tags: 机器学习,论文阅读

RNN-Recurrent Neural Network

  1. 概念:

    1. 序列数据:简而言之,序列数据就是后面的数据与前面的数据相关的数据,例如上下文、时间序列等。
    2. 递归神经网络(RNN):在基础神经网络中加入了环形结构,让神经元的输出信号返回继续作为输入信号,目的是让t时刻的输出状态不仅与t时刻的输入相关联,还与t-1时刻的状态相关联。
  2. RNN结构图:

    左侧为折叠情况下的RNN网络结构图,右侧为展开的RNN网络结构图。x为输入,h为循环的隐层,o为输出,L为损失函数,y是样本中的标准值,U、V、W为权值。

  3. 标准RNN的特点:

    1. 随着循环的进行,损失函数L也在积累。
    2. 权值共享(weight sharing),降低了参数数量。
    3. 每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。
  4. 算法公式:

    1. 向前传播公式:

      ϕ是激活函数,一般选择tanh函数,b为偏置量。

    2. t时刻的输出公式:

    3. 最终的预测模型为:


LSTM

  1. 概念:

    1. LSTM网络是RNN的一个变种,在RNN执行的过程中,对于距离较近的关键词有很好的记忆性,但是对于长距离关键词的记忆性比较低。下面两幅图分别展示了这两种情景:

      X0、X1是h3的输入,输入与输出之间的距离比较近。

      X0、X1与输出h t+1之间的距离太长,RNN对长时间记忆有明显的不足。

      由此引出RNN的变种网络:LSTM网络。

    2. LSTM网络结构:

      1. 对于标准RNN网络,h是随着时间不断更新的。在LSTM网络中新加了一个循环点:细胞C。 细胞C随着时间流动带来了长期的记忆。

    传统标准RNN网络,只有h是在循环更新的。

    LSTM网络,在h更新的同时,细胞也在更新。

    上图的图示。

    细胞更新的路线。 两个粉色⚪表示信息进行一些基础的运算,在h循环更新的过程中,细胞C的信息也在不断更新。由于细胞C只是进行一些简单的运算,所以它的信息可以在流通中保持大体不变。

    这样的结构称为LSTM的”门“结构,可以控制信息的进出。黄色方框里面是一个sigmoid函数。

    1. LSTM网络输入输出流程:

      1. 遗忘:选择忘记过去的某些信息

        理解:并不是全部信息都要记住的,需要选择性遗忘。上一层的输入和本层的输入通过sigmoid函数变成一个取值在[0,1]的值,0表示完全遗忘,1表示必须记住。再通过“X”乘法操作与上层数据汇合。这里被称为遗忘门。

      2. 输入:选择记忆现在的某些信息

        理解:将输入的信息分别通过sigmoid函数和tanh函数的处理,共同输入到“X”乘法运算中。同样的Sigmoid函数仍然输出一个[0,1]的值,表示该数据的可以记忆的价值是多少。tanh发挥的作用类似于RNN中发挥的作用,输出一个候选值。由Sigmoid函数决定该值要记忆多少。这里被称为输入门

      3. 合并:将过去的记忆和现在的记忆合并在一起。

        理解:两端记忆分别通过乘法后用加法运算合并到一起。

      4. 输出:

        理解:最后把合并的细胞信息通过tanh函数与sigmoid的输出相乘,得到最终的输入,进入下一个神经元中。这里称为输出门。

        在整个过程中,sigmoid函数起的是选择作用。 通过输出的值控制记忆的记忆程度。tanh起的是变换作用,与RNN中的作用类似。此外,LSTM还有其他变体,但是根据测试(Jozefowicz, et al. (2015))各个变体之间的差距很小。


部分图片来自网友博客,如有侵权,请联系我。

GCA-LSTM(Global Context-Aware Attention LSTM Networks)

原作者为:

Jun Liu , Gang Wang , Ping Hu , Ling-Yu Duan , Alex C. Kot
School of Electrical and Electronic Engineering, Nanyang Technological University, Singapore
Alibaba Group, Hangzhou, China
National Engineering Lab for Video Technology, Peking University, Beijing, China
{jliu029, wanggang, phu005, eackot}@ntu.edu.sg, lingyu@pku.edu.cn

RNN-LSTM入门的更多相关文章

  1. LSTM入门学习——本质上就是比RNN的隐藏层公式稍微复杂了一点点而已

    LSTM入门学习 摘自:http://blog.csdn.net/hjimce/article/details/51234311 下面先给出LSTM的网络结构图: 看到网络结构图好像很复杂的样子,其实 ...

  2. 时间序列(六): 炙手可热的RNN: LSTM

    目录 炙手可热的LSTM 引言 RNN的问题 恐怖的指数函数 梯度消失* 解决方案 LSTM 设计初衷 LSTM原理 门限控制* LSTM 的 BPTT 参考文献: 炙手可热的LSTM 引言 上一讲说 ...

  3. 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...

  4. RNN/LSTM/GRU/seq2seq公式推导

    概括:RNN 适用于处理序列数据用于预测,但却受到短时记忆的制约.LSTM 和 GRU 采用门结构来克服短时记忆的影响.门结构可以调节流经序列链的信息流.LSTM 和 GRU 被广泛地应用到语音识别. ...

  5. [NL系列] RNN & LSTM 网络结构及应用

    http://www.jianshu.com/p/f3bde26febed/ 这篇是 The Unreasonable Effectiveness of Recurrent Neural Networ ...

  6. RNN LSTM 介绍

    [RNN以及LSTM的介绍和公式梳理]http://blog.csdn.net/Dark_Scope/article/details/47056361 [知乎 对比 rnn  lstm  简单代码] ...

  7. rnn,lstm and JuergenSchmidhuber

    JuergenSchmidhuber 是瑞士的一位牛人,主要贡献是rnn, lstm. google的deep mind新作,Human-level control through deep rein ...

  8. RNN,LSTM,GRU基本原理的个人理解

    记录一下对RNN,LSTM,GRU基本原理(正向过程以及简单的反向过程)的个人理解 RNN Recurrent Neural Networks,循环神经网络 (注意区别于recursive neura ...

  9. 用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识

    用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识 循环神经网络RNN相比传统的神经网络在处理序列化数据时更有优势,因为RNN能够将加入上(下)文信息进行考虑.一个简单的RNN如 ...

  10. tensorflow学习之(十一)RNN+LSTM神经网络的构造

    #RNN 循环神经网络 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data tf.se ...

随机推荐

  1. Oracle简单查询实例

    --查询不重复的职位 select distinct job from emp; --查询年薪,起别名,别名不要用单引号括起来 as nianxin from emp sal; --以这样的形式显示具 ...

  2. 《python语言程序设计》_第5章_循环

    #5.1_引言 程序1: 结果: 程序2: 结果: sum is 45 ##注意整个循环语句都要内缩进循环内部 ##ctrl+c中止一个无限循环运行 程序清单5-1: 结果: #5.2.1_实例研究: ...

  3. [ 10.4 ]CF每日一题系列—— 486C

    Description: 给你一个指针,可以左右移动,指向的小写字母可以,改变,但都是有花费的a - b 和 a - z花费1,指针移动也要花费,一个单位花费1,问你把当前字符串变成回文串的最小化费是 ...

  4. Windows 10 无法使用搜索栏,显示一片空白

    查看这个:https://blog.csdn.net/qq_41571056/article/details/82928919

  5. finalize方法的使用

    finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法.这个方法在gc启动,该对象被回收的时候被调用.其实gc可以回收大部分的对象(凡是new出来的对象,g ...

  6. python yield 关键字

    最近看代码看到python里面的yield关键字,和我之前接触的语言好像都没有来着,我就查了查它的含义,大概理解如下: >>> def createGenerator(): ... ...

  7. 本周对于java中lamdba表达式与内部进行了学习 ,以下是我在学习就中遇到的问题

    在java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.我觉得其实就是类的嵌套,在一个类中再定义一个类,这里已成员内部类为讲,内部类可以自由地运用外部类定义的方法,但外部类想 ...

  8. WSGI and Paste学习笔记

    The Problem Lots of web frameworks Zope, Quixote, Webware, SkunkWeb and Twisted Web etc Applications ...

  9. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  10. Javascript高级编程学习笔记(33)—— 客户端检测(2)怪癖检测

    怪癖检测 和能力检测类似,但其目标不同 能力检测的目的是判断浏览器支不支持某种能力 而怪癖检测的目的是判断浏览器是否存在某些缺陷 这种时候需要我们执行一段代码来判断浏览器是否有这样的缺陷 或者说是怪癖 ...