初学RNN
FNN
定义
FNN(Feedforward Neural Network),即前馈神经网络,它是网络信息单向传递的一种神经网络,数据由输入层开始输入,依次流入隐藏层各层神经元,最终由输出层输出。其当前的输出只由当前的输入决定,任何层的输出都不会影响同级层。
以上图所示的神经网络为例,它在训练过程中通过前向计算和反向传播,不断通过调整权重系数Wi和Wo来实现学习目的。通常情况下,前馈神经网络会在空间上进行延伸,通过增加隐藏层层数与隐藏层神经元个数追求更好的学习效果。
缺点
前馈神经网络假定元素之间是相互独立的,对于序列数据,只能单独地处理序列中的每个元素,前一个输入与后一个输入在处理过程中也是完全独立的,无法捕获序列之间的依赖关系。
RNN
定义
RNN(Recurrent Neural Network),即循环神经网络,它是一种主要用来处理序列数据的神经网络,它关注了隐藏层每个神经元在时间维度上的变化,其中循环说成递推可能会更直观一些,本质就是同一个网络接收当前时刻的输入和上一时刻隐藏层神经元的输出,沿着时序反复迭代以实现对序列数据的学习。
结构
直观结构
在上图中, RNN 的每个时刻,输入层的x1和x2都在Wi的作用下传入隐藏层,上一时刻的隐藏层输出也通过Wh传入当前的隐藏层,因此它相当于可以间接访问之前的所有输入,这就是为什么说RNN可以保存记忆。
内部结构
上图展示了RNN在三个相邻时刻的计算逻辑。 在任意时刻t,隐藏层状态的计算可以被视为:
- 拼接t时刻的输入Xt和t−1时刻的隐藏层状态Ht−1,得到新的张量[Xt,Ht-1];
- 将新的张量送入带有激活函数φ的全连接层,激活函数常用tanh或者relu, 全连接层的输出是t时刻的隐藏层状态Ht。
在t时刻,隐藏层状态Ht的计算公式为:
在t时刻,输出层的输出计算公式为:
参数说明:
- Xt是t时刻的输入,它是一个向量;
- Wi是输入层到隐藏层的权重矩阵;
- Ht-1是t-1时刻的隐藏层状态,在初始时刻,会给隐藏层设置初始状态H0;
- Wh是隐藏层上一时刻的值作用于当前时刻的权重矩阵;
- Wo是隐藏层到输出层的权重矩阵;
- bh是和bo是偏置系数。
注意:
- 在不同时刻,RNN总是使用这些模型参数,其参数开销不会随着时间的增加而增加。
- 隐藏层状态中XtWi+Ht-1Wh的计算,相当于Xt和Ht-1的拼接与Wi和Wh的拼接进行矩阵乘法。
- RNN和前馈神经网络一样,也是通过反向传播来更新权重,以达到学习的效果。
应用
1-N类型,输入一张图片,输出一段话或者一段音乐,利用它可以实现看图说话。
N-1类型,输入一段话,输出对其情感类别的判断,利用它可以实现文本分类。
N-N类型,输入和输出是等长的序列,可以用来生成等长的诗歌。
N-M类型,输入和输出是不等长的序列,也被叫做Encoder-Decoder模型或Seq2Seq模型,可以应用在机器翻译、文本摘要、阅读理解等多个领域上。
变体
BRNN(Bidirectional RNN)
RNN的一个主要问题是只能从以往的输入进行学习,也就是只能理解上下文中的上文,为了拥有更好的学习效果,因此提出了双向RNN,也就是BRNN。 BRNN会在原有RNN的基础上再加一个隐藏层,该隐藏层的状态是从后向前传播的,从序列的终点开始读取,称为后向层;而原有的从序列起点开始读取的隐藏层称为前向层。 BRNN的隐藏层状态的计算可以被视为:
- 根据输入序列计算前向层隐藏层状态H1;
- 将输入序列反转,计算后向层隐藏层状态H2;
- 将H1和H2拼接起来,得到最终隐藏层状态H,H=[H1,H2]。
注意,只有能拿到整个输入序列时才能使用BRNN 。
DRNN(Deep RNN)
与前馈神经网络不同,RNN因为考虑了时间维度,隐藏层达到三层就算多的了。
优缺点
优点
- RNN可以处理序列信息,且内部结构简单,对计算资源的要求低。
缺点
RNN是一个时序模型,每个时刻的计算都依赖于前一时刻的结果,计算速度慢;
RNN由于梯度消失,难以支持长序列,不能捕获序列中长期的依赖关系;
RNN网络在时间维度上是串联的,离当前时间越远的隐藏层输出,对当前隐藏层的输出影响越小,它无法根据不同词本身的重要性对当前的输出产生影响;
RNN对所有输入是同等对待的,提取了所有的信息,没有区分有用信息、无用信息和辅助信息。但是如果某个网络可以根据不同输入的重要性,选择性地丢弃和记忆,就可以使得有效信息即使距离当前时间较远,也能有较大影响,实现长期记忆,这就引出了LSTM。
主要参考
- 《动手学深度学习》第8章第4节;
- 网络上相关资料。
初学RNN的更多相关文章
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- 完全图解RNN、RNN变体、Seq2Seq、Attention机制
完全图解RNN.RNN变体.Seq2Seq.Attention机制 本文主要是利用图片的形式,详细地介绍了经典的RNN.RNN几个重要变体,以及Seq2Seq模型.Attention机制.希望这篇文章 ...
- TensorFlow初学
TensorFlow初学 基本概念 1.激活函数和成本函数 激活函数(activation function):一般是非线性函数,就是每个神经元通过这个函数将原有的来自其他神经的输入做一个非线性变化, ...
- DDD初学指南
去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...
- gulp初学
原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js 配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- 初学Vue2.0--基础篇
概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...
- RNN求解过程推导与实现
RNN求解过程推导与实现 RNN LSTM BPTT matlab code opencv code BPTT,Back Propagation Through Time. 首先来看看怎么处理RNN. ...
- 在RNN中使用Dropout
dropout在前向神经网络中效果很好,但是不能直接用于RNN,因为RNN中的循环会放大噪声,扰乱它自己的学习.那么如何让它适用于RNN,就是只将它应用于一些特定的RNN连接上. LSTM的长期记 ...
- 初学Python
初学Python 1.Python初识 life is short you need python--龟叔名言 Python是一种简洁优美语法接近自然语言的一种全栈开发语言,由"龟叔&quo ...
随机推荐
- 手写tomcat——netty版
点击查看代码 package com.grady.diytomcat; import com.grady.diytomcat.handler.DiyNettyTomcatHandler; import ...
- 通过VS下载的NuGet包,如何修改其下载存放路径?
一.了解NuGet包的默认存放路径 我们通过NuGet包管理器下载的引用包,默认是存放在C盘的,存储路径一般是: C:\Users\{系统用户名}\.nuget\packages 我们都知道,C盘的存 ...
- 分布式文件存储 CephFS的应用场景
块存储 (适合单客户端使用) 典型设备:磁盘阵列,硬盘. 使用场景: a. docker容器.虚拟机远程挂载磁盘存储分配. b. 日志存储. 文件存储 (适合多客户端有目录结构) 典型设备:FTP.N ...
- Logstash:如何处理 Logstash pipeline 错误信息
转载自:https://elasticstack.blog.csdn.net/article/details/114290663 在我们使用 Logstash 的时候经常会出现一些错误.比如当我们使用 ...
- ELK 性能优化实践
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI5MTU1MzM3MQ==&mid=2247489814&idx=1&sn=6916f8b7 ...
- git commit 规范
- Java程序设计(一)作业
题目1:输入圆的半径,计算圆的面积,然后把面积的值输出.(注意所使用的数据类型). package test; import java.util.Scanner; public class test1 ...
- bfs与dfs基础
bfs像二叉树的层序遍历 像这个图走bfs就{1, 2, 3, 4, 5, 6, 7, 8}这样走: dfs就{1, 2, 5, 6, 3, 7, 8, 4}. bfs与queue相结合,走到哪就把哪 ...
- 如何在服务器上部署WebDeploy
之前项目中网站发布都是手工拷贝文件,特别麻烦,看到好多用webdeploy一键部署网站到IIS服务器,我也学习了一下. 第一步,打开服务器管理器 打开方式是开始菜单=>管理工具=>服务器管 ...
- MatrixOne Linux 编译文档
MatrixOne Linux 编译文档 编译环境 硬件环境 操作系统 内存 CPU 磁盘 Windows环境下的Linux虚拟机 Linux version 3.10.0-1160.el7.x86_ ...