初学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 ...
随机推荐
- 【读书笔记】C#高级编程 第二十二章 安全性
(一)身份验证和授权 安全性的两个基本支柱是身份验证和授权.身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特性资源之后进行的. 1.标识和Principal 使用标识可以验证运行应用程序 ...
- Logstash: 如何创建可维护和可重用的Logstash管道
- Elasticsearch删除操作详解
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484022&idx=1&sn=7a4de21 ...
- 关闭You have new mail in /var/spool/mail/root提醒
echo "unset MAILCHECK">> /etc/profile #以root权限执行 或者用sudo source /etc/profile cat /de ...
- Failed to find a valid digest in the 'integrity' attribute for resource
一.Bootstrap 引入报错 在使用bootstrap过程中发现无法使用下拉导航栏,或者是显示不出效果. Failed to find a valid digest in the 'integr ...
- Node.js(五)学生管理CRUD
npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ...
- 洛谷P2863 [USACO06JAN]The Cow Prom S (tarjan)
题目简述:一个有向图,求出这个图点数>1的强连通分量的个数. 那么就是tarjan求强联通分量的模板了. 记得要用一个数组标记节点是否在栈中. 1 #include<bits/stdc++ ...
- Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用
在<基于 vite 创建 vue3 项目>一文中整合了 pinia,有不少伙伴不知道 pinia 是什么,本文简单介绍 pinia.主要包括三方面: pinia 的基本用法,在<基于 ...
- Android自动化测试工具调研
原文地址:Android自动化测试工具调研 - Stars-One的杂货小窝 Android测试按测试方式分类,可分为两种:一种是传统逻辑单元测试(Junit),另外一种则是UI交互页面测试. 这里详 ...
- 分支结构中的if-else(条件判断结构)
一.三种结构 第一种: if(条件表达式){ 执行表达式}第二种:二选一 if(条件表达式){ 执行表达式1}else{ 执行表达式2}第三种:n选一 if(条件表达式){ 执行表达式1}else i ...