参考:https://www.jianshu.com/p/9dc9f41f0b29  以及《白话深度学习与TensorFlow》

与前馈神经网络、卷积神经网络等不同之处在于,RNN具有一定的记忆暂存功能,模拟了大脑的记忆性。具体来说,就是把之前的输入产生的影响量化后与当前输入一起传递到网络中训练。因此,RNN可以有效解决上下文相关场景下的问题,如自然语言处理等等。

RNN示意图及时间维度上的展开图如下:

其中,Xi为当前输入,hi为A模块对Xi处理得到的输出。对于一个输入序列X来说,某一个Xi的值可能会影响到之后的时间或空间上的输出hj,训练过程就是要学习影响的量化关系。传统的RNN训练过程的损失函数采用BPTT算法得到,但是如果有多个输入时,那么就需要求一系列的导数并连乘起来,显然这种损失函数既加大了运算复杂度,又会引发梯度消失或梯度爆炸问题。

因此,传统RNN理论上可以实现,但是训练效果很不理想。研究人员又提出了LSTM算法来进行RNN的训练。

LSTM算法即长短期记忆网络(long short-term memory),是对标准RNN的一种改进,该算法引入了忘记门(forget gate)机制,有效规避了传统RNN的梯度爆炸和梯度消失问题。

单层的LSTM拓扑结构如下图所示:

下面对LSTM单元进行分析:

(1)图例说明

(2)LSTM

LSTM单元就是这样连接的效果,一个一个首尾相接,同一层的会把前面单元的输出作为后面单元的输入;前一层的输出会作为后一层的输入。下面是对LSTM单元的各部分剖析。

首先,从左到右会有一个向量传输,该过程有两个交互过程,一个是左侧的乘号,另一个是右侧的加号,加号是普通的向量线性叠加,乘号则是表明Ct-1被一个乘法器乘以一个系数。

乘法器的系数来源于上图的结构,左侧的ht-1和下面输入的xt经过连接操作,然后通过线性单元和一个Sigmoid函数后生成一个0~1之间的数字作为系数输出。这个部分就是一个忘记门(forget gate),1 表示“完全保留”,0 表示“完全舍弃”。这一部分是决定丢弃什么信息。

下一步则是确定要保留什么新信息,如上图。该结构由两个小的神经网络层组成,一个是Sigmoid函数,称为“输入门”层,决定要更新什么信息,然后一个 tanh 层创建一个新的候选值向量会被加入到状态中,其中tanh函数可以把一个值映射到-1~1之间。

之后,确定当前单元状态Ct,也就是将Ct-1更新为Ct。如上图,把旧状态与 ft 相乘,丢弃掉我们确定需要丢弃的信息。接着加上部分新信息。

最后,确定输出什么值(ht)。如上图所示,首先,我们运行一个 Sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态Ct通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 Sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

总的来说,LSTM通过Sigmoid函数得到0~1之间的值来控制忘记程度,通过tanh函数来生成新的候选结果,将新的候选结果与忘记程度做乘法来实现部分信息的丢弃/保留。每个LSTM单元的状态都是由一部分上一单元的状态和一部分候选值(由当前单元输入和上一单元输出连接操作后进行tanh映射生成)线性叠加而来,而每个LSTM单元的输出则是该单元的部分状态。

RNN(recurrent neural network)学习笔记的更多相关文章

  1. 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论

    转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...

  2. 深度学习课程笔记(十五)Recurrent Neural Network

    深度学习课程笔记(十五)Recurrent Neural Network 2018-08-07 18:55:12 This video tutorial can be found from: Yout ...

  3. Recurrent Neural Network系列2--利用Python,Theano实现RNN

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  4. Recurrent Neural Network系列3--理解RNN的BPTT算法和梯度消失

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 这是RNN教程的第三部分. 在前面的教程中,我们从头实现了一个循环 ...

  5. 循环神经网络(Recurrent Neural Network,RNN)

    为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...

  6. 论文笔记:ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks

    ReNet: A Recurrent Neural Network Based Alternative to Convolutional Networks2018-03-05  11:13:05   ...

  7. Recurrent Neural Network Language Modeling Toolkit代码学习

    Recurrent Neural Network Language Modeling Toolkit  工具使用点击打开链接 本博客地址:http://blog.csdn.net/wangxingin ...

  8. Recurrent neural network (RNN) - Pytorch版

    import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...

  9. 4.5 RNN循环神经网络(recurrent neural network)

     自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  RNN循环神经网络 ...

  10. Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM

    yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...

随机推荐

  1. hdu 4286 (list的reverse时间复杂度为n)

    list 的翻转reverse源码: // 将链表倒置 // 其算法核心是历遍链表, 每次取出一个结点, 并插入到链表起始点 // 历遍完成后链表满足倒置 template <class T, ...

  2. sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法

    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法: 需要下载Emmet插件,按网上写的步骤按ctrl+shift+P打开命令面板,输入install,鼠标点击 ...

  3. URAL 1748. The Most Complex Number(反素数)

    题目链接 题意 :给你一个n,让你找出小于等于n的数中因子个数最多的那个数,并且输出因子个数,如果有多个答案,输出数最小的那个 思路 : 官方题解 : (1)此题最容易想到的是穷举,但是肯定超时. ( ...

  4. 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName .

    parentid是1就是id为1的公司的子公司 如图 查询出所有的信息后 由于我要呈现的是parentName 不是parentId所以想问下SQL语句怎么写 谢谢啦~~:) 解法: SELECT s ...

  5. 异步串行通信的XON与XOFF

    在单片机的异步串行通信中,putchar函数中的实现中反复用到了XON和XOFF,定义原型如下: #define XON 0x11#define XOFF 0x13 查找ASCII码表,这两个对应的是 ...

  6. delphi计算两个时间差

    uses DateUtils; var S1, S2: string; T1, T2: TDateTime; D, H, M, S: Integer; Value: Int64; begin S1 : ...

  7. Django-项目上线后,静态文件配置失效以及404、500页面的全局配置

    https://blog.csdn.net/Jamin2018/article/details/79060509 https://www.cnblogs.com/lfoder/p/6013142.ht ...

  8. angular 父组件调用子组件

    import { Component, OnInit, ViewChild } from '@angular/core'; @Component({ selector: 'app-child', te ...

  9. tomcat访问日志关闭

    在tomcat(实例)路径下[conf/server.xml]中修改,以下节点(注释掉该节点): tomcat catalina.out日志关闭 在tomcat(主目录)路径下[bin/catalin ...

  10. Delphi XE8中Delphi和JAVA数据类型对应关系!

    Delphi XE8中Delphi和JAVA数据类型对应关系所在单元文件:Androidapi.JNI.JavaTypes 对应关系: JObject = interface;//java.lang. ...