RNN(recurrent neural network)学习笔记
参考: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)学习笔记的更多相关文章
- 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论
转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...
- 深度学习课程笔记(十五)Recurrent Neural Network
深度学习课程笔记(十五)Recurrent Neural Network 2018-08-07 18:55:12 This video tutorial can be found from: Yout ...
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Recurrent Neural Network系列3--理解RNN的BPTT算法和梯度消失
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 这是RNN教程的第三部分. 在前面的教程中,我们从头实现了一个循环 ...
- 循环神经网络(Recurrent Neural Network,RNN)
为什么使用序列模型(sequence model)?标准的全连接神经网络(fully connected neural network)处理序列会有两个问题:1)全连接神经网络输入层和输出层长度固定, ...
- 论文笔记: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 ...
- Recurrent Neural Network Language Modeling Toolkit代码学习
Recurrent Neural Network Language Modeling Toolkit 工具使用点击打开链接 本博客地址:http://blog.csdn.net/wangxingin ...
- Recurrent neural network (RNN) - Pytorch版
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...
- 4.5 RNN循环神经网络(recurrent neural network)
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1 RNN循环神经网络 ...
- Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM
yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...
随机推荐
- 多线程协作 FileStream文件读写操作,读写冲突解决
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- dynamic和匿名类和var的混合使用 没提示照样点
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using Syste ...
- JMS-消息中间件的应用01-基本概念-来自慕课学习-新手学习
什么是JMS? Java消息服务(Java Message Service),即JMS,是一个java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. ...
- ESP8266-iot-简介1
ESP8266简介
- AIO和NIO的理解
AIO: AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成,可以继续做 另外的事情,等I/O操作完成,内核会通过函数回调或者信号机制通知用户进程.这样很大程度提高了 ...
- HUSTSE2017级5班3组小组JIRA软件使用体验看法汇总--未订正版
小组JIRA软件使用体验看法汇总 小黄 JIRA还是比较方便的,在项目组合管理阶段,可以让团队同时按时发布,也可以让计划变得更容易和快捷,可以跟踪团队的重要计划,清楚的了解项目的进度. 看了JIRA的 ...
- C#多线程编程实战1.3等待线程
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- JavaScript中创建自定义对象的方法
本文内容参考JavaScript高级程序设计(第3版)第6章:面向对象的程序设计 ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”我所理解的就是对象就是一个结构 ...
- const限定符、constexpr和常量表达式------c++ primer
编译器将在编译过程中把用到const变量的地方都替换成对应的值,为了执行这种替换,编译器必须知道变量的初始值.如果程序包含多个文件,则那个用了const对象的文件都必须能访问到它的初始值才行.要做到这 ...
- RadASM的主题更换!
RadASM的代码编辑器默认背景色位黑色,我很不习惯,决定更换它,按照下面步骤,我把RadASM的代码编辑器默认背景色成功更换成了白色: 1, 2, 3, 4,