循环神经网络(RNN)--学习笔记
一、基本概念
RNN针对的数据是时序数据。RNN它解决了前馈神经网络,无法体现数据时序关系的缺点。在RNN网络中,不仅同一个隐含层的节点可以相互连接,同时隐含层的输入不仅来源于输入层的输入还包括了上一个隐含层的输出。

RNN中主要有以下几个参数:
(1)Xt表示第t隐含层的输入层的输入, St表示第t隐含层的隐含状态,Yt表示第t隐含层的输出
(2)U表示Xt的参数,W表示St-1的参数,V表示St的参数
(3)St = f(UXt+WSt-1) Yt = VSt
RNN实现了参数共享,也就是不管哪一层它的U,W和V参数的值都是一样的,这样就大大减少了需要训练的参数个数。
二、RNN的作用
(1)主要运用于序列化数据
(2)在NLP领域中的词性标注,词向量表达以及语句合法性检查有了很好的应用
(3)典型应用场景:
1、语言模型与文本生成:可以通过输入词向量序列来预测下一个单词可能是什么,也可以判断一个语句正确的可能性。
2、机器翻译:将一种语言翻译成另一种语言:进而文本生成的区别在于它的输入需要完整的语句序列。
3、语言识别
4、图像描述生成
三、RNN的训练
(1)采用BP算法
(2)实现参数共享
(3)因为RNN的网络与与前面的若干步相关,所以它在实现BP算法的时候采用了BPTT算法。但是BPTT算法有一定的局限性,一般它不能解决依赖性超过十步的问题。并且还会存在梯度爆炸和梯度消失的问题。
四、RNN拓展和改进模型
(1)Simple RNN(SRNN)
1、这是一个三层的神经网络
2、有一层和隐含层对应每一个节点固定相连的上下文单元层。这个上下文单元层的权值也是固定。它记录了序列化数据前一步的状态
3、该神经网络采用了前向传播算法
(2)Deep(Bidirectional) RNN
1、和Bidirecrtional RNN的区别在于Deep(Bidirectional) RNN的每一步的输入由多层网络。
Bidirectional RNN:
deep(Bidirectional) RNN:

(3)Echo State Networks
1、它的网络有三部分组成:输入,存储池,输出。最大的特别之处就在于他用存储池代替了RNN中的隐含层
2、存储池里面是一些相互连接的节点单元
3、Echo State Network的关键是训练四个参数:输入权值参数Win,存储池中的节点的连接矩阵W,输出层到存储池的反馈Wback,输入层、存储池和输出层的相互连接Wout。
4、训练的过程用简单的线性回归
(4)GRU(Gated Recurent Unit RNN)
1、GRU的改进主要是两个方面:序列中的不同位置处的输入数据对于当前状态的影响是不一样的,所以需要对不同位置的输入数据赋予不同的权重;其次出现的错误的原因可能是某一个或某几个位置数据的影响,因此只需要更新相应位置的数据的权重。
2、GRU的图:

(5)LSTM
1、LSTM非常适合长序列依赖问题
2、它和RNN的主要区别在于隐含层的训练方式,它采用了独特的cell结构。
3、LSTM和GRU的比较

区别在于:
a、GRU有一个reset gate能够控制前一个的隐状态对当前状态的影响
b、LSTM有input gate和forget gate能够控制新状态的产生,而GRU只有update gate能够控制新状态的产生。
c、LSTM多了output gate能够调节输出的大小,而GRU则没有这个单元
(6)Clockwork RNN
1、有三层的神经网络
2、隐含层网络被分成若干个块,每个块内的节点数大小相等,每一个块内的节点实现了全连接。
3、每一个块都有一个时钟周期,然后按照节点排序,时钟周期大的块内的节点能够全连接时钟周期小的块内的节点。
4、每一次只有满足(t mod Ti) = 0的隐含层块才会执行,这样就大大降低了网络的训练难度,提高了效率。

循环神经网络(RNN)--学习笔记的更多相关文章
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)
前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_没有复杂数学公式,看图就懂了!!!(理论篇)
本篇文章被Google中国社区组织人转发,评价: 条理清晰,写的很详细! 被阿里算法工程师点在看! 所以很值得一看! 前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RN ...
- 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)
Google TensorFlow程序员点赞的文章! 前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
- 通过keras例子理解LSTM 循环神经网络(RNN)
博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...
- 循环神经网络RNN模型和长短时记忆系统LSTM
传统DNN或者CNN无法对时间序列上的变化进行建模,即当前的预测只跟当前的输入样本相关,无法建立在时间或者先后顺序上出现在当前样本之前或者之后的样本之间的联系.实际的很多场景中,样本出现的时间顺序非常 ...
- 从网络架构方面简析循环神经网络RNN
一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...
随机推荐
- 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ
从JAVA核心技术卷轴Ⅰ:基础知识中整理得到. import java.lang.reflect.AccessibleObject; import java.lang.reflect.Array; i ...
- Socket编程实践(9) --套接字IO超时设置方法
引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) { return ; } signal(S ...
- [Django高级]理解django中的中间件机制和执行顺序
原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...
- 通过一个tomcat端口访问多个tomcat项目 tomcat转发
需求是这样的,有一个tomcat,是80端口,现在我要通过这个tomcat转发到服务器其他tomcat,其他tomcat的端口不是80.这样做就可以避免这样www.baidu.com:8081的情况. ...
- OC——第五天NSSArray /NSDicti…
1.oc中常用的集合(容器)有: 1.NSArry 数组:2.NSDicitionary 字典:3.NSSet 集(不常用) 数组:NSArry 继承自NSObject ,不可变的数组,用于管理一系列 ...
- 水晶报表中"已达到系统管理员配置的最大报表处理作业数限制"错误的处理
错误描述:用水晶报表做报表时当多次打开报表后会经常会出现"已达到系统管理员配置的最大报表处理作业数限制. "的错误. 1.自身的问题:用完CrystalDecisions.Crys ...
- [信号处理技术]关于EMD的产生
通俗易懂,有助于理解EMD和HHT,就原封不动的搬过来了. 原文链接:关于EMD的产生 自傅里叶变换与频谱分析技术产生,人们得以从另外一个角度观察时域信号,信号里各个点的密集程度,得以确定性地度量.之 ...
- 修改DrawerLayout 和toolbar 配合navigation的颜色
大家都知道DrawerLayout 和toolbar 结合能出来高大上的效果. 使用到一个ActionBarDrawerToggle类. 那么怎么修改DrawerToggle的颜色呢,搜索了很多中文网 ...
- 对嵌入式开发C语言结构体的一点总结
今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...
- java工具类(三)之生成若干位随机数
java 生成若干位随机数的问题 在一次编程的过程中偶然碰到一个小问题,就是需要生成一个4位数的随机数,如果是一个不到4位大的数字,前面可以加0来显示.因为要求最后是一个4位的整数,不带小数点.当时就 ...