这部分许多内容要类比CNN来进行理解和解释,所以需要对CNN比较熟悉。

RNN的特点

1. 权值共享

CNN权值共享,RNN也有权值共享,在入门篇可以看到RNN结构图中,权重使用的是同样的字母

为什么要权值共享

a. 减少weight,减少计算量,这点其实比较好理解。

试想10X10的输入,全连接隐藏层如果是1000个神经元,那就有100000个weight要计算;

如果是卷积神经网络,5X5的感受视野,只要25个weight。即使100个卷积核,才2500,不严谨,反正很少就对了。

b. 参考再谈权值共享

为什么可以权值共享

参考CNN疑点解析

需要说明的是共享是同样的传递过程时参数相同,即x-s都是u,同理。

2. 每个输入都只与它本身的那条路线建立连接,不与其他神经元连接。

RNN的计算要素与流程

以标准RNN为例

计算要素

 前向与反向

参照 https://www.cnblogs.com/yanshw/p/10478876.html 循环神经网络-极其详细的推到BPTT

参数优化

梯度爆炸和梯度消失

RNN在训练过程中容易出现梯度爆炸和梯度消失

所谓梯度爆炸就是在神经网络训练过程中,梯度变得越来越大以使得神经网络权重得到疯狂更新的情形,这种情况很容易发现,因为梯度过大,计算更新得到的参数也会大到崩溃,这时候我们可能看到更新的参数值中有很多的 NaN,这说明梯度爆炸已经使得参数更新出现数值溢出。这便是梯度爆炸的基本情况。

梯度消失。与梯度爆炸相反的是,梯度消失就是在神经网络训练过程中梯度变得越来越小以至于梯度得不到更新的一种情形。当网络加深时,网络深处的误差很难因为梯度的减小很难影响到前层网络的权重更新,一旦权重得不到有效的更新计算,神经网络的训练机制也就失效了。

在BPTT中有 ∏w·f’ 的连乘,所以很容易出现问题。

长期依赖问题

RNN面临的最大挑战就是无法解决长期依赖问题。例如对下面两句话:

最后的was与were如何选择是和前面的单复数有关系的,但对于简单的RNN来说,两个词相隔比较远,如何判断是单数还是复数就很关键。

长期依赖的根本问题是,经过许多阶段传播后的梯度倾向于消失(大部分情况)或爆炸(很少,但对优化过程影响很大)。

对于梯度爆炸是很好解决的,可以使用梯度修剪(Gradient Clipping),即当梯度向量大于某个阈值,强行缩放梯度向量。但对于梯度消失是很难解决的。

RNN种类

一对一

一对多

如图片描述,输入一张图片,输出图片的文字描述

多对一

如分类,输入文本,分类积极消极。

多对多1

多用于序列标注

多对多2

如机器翻译,输入中文,输出英文

RNN的形象描述

RNN模仿了人的记忆功能,它把昨天的记忆传给今天,然后做个总结,把今天的总结又传给明天,这使得它能够记住之前的事情,

但是由于它大脑容量有限,本身智商低,总结能力差,记忆力差,

所以每天都传一些乱七八糟的给第二天,以至于时间长了,之前的很难记得清。

人类之所以有聪明和笨之分,也是因为聪明的人善于总结,每天只记忆精华的东西,而笨的人一股脑全记,其实脑子里是一团浆糊,到真正用时,啥也没记住。

那RNN改进的办法是不是也是每天提炼一下,少记点东西呢?

循环神经网络-RNN进阶的更多相关文章

  1. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

  2. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

  3. 循环神经网络RNN及LSTM

    一.循环神经网络RNN RNN综述 https://juejin.im/entry/5b97e36cf265da0aa81be239 RNN中为什么要采用tanh而不是ReLu作为激活函数?  htt ...

  4. 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别

    深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...

  5. 循环神经网络RNN模型和长短时记忆系统LSTM

    传统DNN或者CNN无法对时间序列上的变化进行建模,即当前的预测只跟当前的输入样本相关,无法建立在时间或者先后顺序上出现在当前样本之前或者之后的样本之间的联系.实际的很多场景中,样本出现的时间顺序非常 ...

  6. 从网络架构方面简析循环神经网络RNN

    一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...

  7. 循环神经网络(RNN, Recurrent Neural Networks)介绍

    原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...

  8. 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员点赞的文章!   前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...

  9. 循环神经网络(RNN)模型与前向反向传播算法

    在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...

随机推荐

  1. 20190102xlVBA_多表按姓名同时拆分

    Sub 多表按姓名同时拆分20190102() AppSettings Dim StartTime As Variant Dim UsedTime As Variant StartTime = VBA ...

  2. 关于如何获取Google 官方 NavgationView中的控件的方法

    最近在想要寻找一个好集成的SlidingMenu,看上了官方的DrawLayout,简单易集成 然后如果想动态改变DrawLayout头部的HeaderVIew的资源的话需要先获取到控件 方法如下 n ...

  3. vux,vue 苹果手机使用position:fixed有问题,如何解决

    苹果手机真是各种坑,导致我都想摔手机呀,但没办法,用苹果的人太多,程序员还是继续在坑的路上行走! 上一篇文章介绍了一些组件,就是使用vux可以解决,苹果手机使用position:fixed的问题 给需 ...

  4. v-for

    在实际的项目中,我们很多时候会碰到将JSON数据中的数组或对象渲染出列表之类的元素.在Vue中,提供了一个 v-for的指令,可以渲染列表. 组件和v-for 在自定义组件里,你可以像任何普通元素一样 ...

  5. 2.1 uml序言

    UML Unified Modeling Language 统一建模语言 模型的定义 建模 modeling 重要的研发成果常常产自类比(analogy): 把不太理解的东西和一些已经较为理解.且十分 ...

  6. [Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes.

    待解决 [Fiddler] ReadResponse() failed: The server did not return a complete response for this request. ...

  7. rsync未授权访问漏洞利用

    漏洞描述:rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他ssh,rsync主机同步.也就是说如果你可以连接目标IP的r ...

  8. TCHAR用法

    TCHAR 就是当你的字符设置为什么就是什么例如:程序编译为 ANSI, TCHAR 就是相当于 CHAR当程序编译为 UNICODE, TCHAR 就相当于 WCHAR char :单字节变量类型, ...

  9. hdu-4180-exgcd

    RealPhobia Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. hdu 1257 LIS (略坑5

    ---恢复内容开始--- 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...