循环神经网络(Recurrent Neural NetWork,RNN)是一种将节点定向连接成环的人工神经网络,其内部状态可以展示动态时序行为。

  循环神经网络的主要用途是处理和预测序列数据。循环神经网络最初就是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上来看,循环神经网络会记忆之前的信息,并利用之前的信息影响后面节点的输出。也就是说,循环神经网络的隐藏层之间的节点是有连接的,隐藏层的输入不仅包含输入层的输出,还包括上一时刻隐藏层的输出。

  

  

  如图为典型的RNN结构示意图。RNN主体结构的输入,除了来自输入层的xt 还有一个循环的边来提供上一时刻的隐层状态St。在每一时刻,RNN的模块在读取了Xt和St-1之后会产生新的隐藏状态St,并产生本时刻的输出Ot。RNN当前的状态是由上一时刻的状态St-1和当前的输入Xt共同决定的。对于一个序列数据,可以将这个序列上不同时刻的数据依次传入循环神经网络的输入层;而输出既可以是对序列下一时刻的预测,也可以是对当前时刻信息的处理结果。循环神经网络要求每一时刻都有一个输入,但是不一定每个时刻都有输出。

  网络在t时刻接收到输入Xt之后,隐藏层的值是St,输出值是Ot。St的值不仅仅取决于St,还取决于St-1。可以用下面的公式来表示。

      Ot=g(V*St)                                        式1

      St=f(U*Xt+W*St-1)                          式2

  式1是输出层的计算公式,输出层是一个全连接层,它的每个节点都和隐藏层的每个节点相连。其中V是输出层的权重矩阵,g是激活函数。

  式2是隐藏层的计算公式,它是循环层。其中U是输入x的权重矩阵,W是上一次的值St-1作为这一次输入的权重矩阵,f是激活函数。

  由上面两个式子可以得出,循环层和全连接层的区别就是循环层多了一个权重矩阵W。

循环神经网络的训练算法:

  如果将RNN进行网络展开,那么参数W、U、V是共享的,并且在使用梯度下降算法时,每一步的输出不仅仅依赖于当前步网络的状态,还依赖于前面若干步网络的状态。采用BPTT(Back Propagation Trough Time)沿时间反向传播算法进行训练,步骤如下:

  (1)前向计算每个神经元的输入值

  (2)反向计算每个神经元的误差值,包括两个方向:一个是沿时间爱你的反向传播,计算每个时刻的误差项;另一个是将误差项向上一层传播。

  (3)计算每个权重的梯度。

  (4)用梯度下降的误差后向传播算法更新权重。

  需要注意:理论上,RNN可以支持任意长度的序列。然而,在实际训练过程中,如果序列过长,一方面会导致训练时出现梯度消失和梯度爆炸的问题;另一方面,展开后的循环神经网络会占用过大的内存。所以,实际中会规定一个最大长度,当序列长度超过规定长度后会对序列进行截断。


循环神经网络的变种

(1)双向循环神经网络(BRNN)

  双向循环神经网络的基本思想是每一个训练序列向前和向后分别是两个循环神经网络,而且两个网络都连接着一个输出层。这个结构给输出层提供输入序列中每一个点的完整的过去和未来的上下文信息。

  双向循环神经网络由两个独立的循环神经网络叠加在一起组成的,其输出也是由这两个循环神经网络的输出拼接而成。下图为一个双向RNN结构。

  在任一时刻,输入会同时提供给这两个方向相反的循环神经网络,两个独立的网络独立进行计算,各自产生该时刻的新状态和输出;而双向循环神经网络的最终输出是这两个单向循环神经网络输出的简单拼接。两个循环神经网络除方向不同外,其余结构完全对称。每一个网络中的循环体可以自由选用任意机构,如RNN或LSTM网络。

(2)深层循环神将网络

  深层循环神将网络是指为了增强模型的表达能力,在网络中设置多个循环层,将每层循环神经网络的输出传给下一层进行处理。

RNN循环神经网络学习——概述的更多相关文章

  1. TensorFlow框架(6)之RNN循环神经网络详解

    1. RNN循环神经网络 1.1 结构 循环神经网络(recurrent neural network,RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络.RNN的主 ...

  2. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

    https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...

  3. Recurrent Neural Networks(RNN) 循环神经网络初探

    1. 针对机器学习/深度神经网络“记忆能力”的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pattern)是信息的一 ...

  4. CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM

    http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...

  5. Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例

    CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...

  6. 关于 RNN 循环神经网络的反向传播求导

    关于 RNN 循环神经网络的反向传播求导 本文是对 RNN 循环神经网络中的每一个神经元进行反向传播求导的数学推导过程,下面还使用 PyTorch 对导数公式进行编程求证. RNN 神经网络架构 一个 ...

  7. 4.5 RNN循环神经网络(recurrent neural network)

     自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  RNN循环神经网络 ...

  8. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  9. 神经网络6_CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId ...

随机推荐

  1. nginx代理ambassador出现426错误

    现在ambassador文档啃得差不多了.进入实战阶段. 一开始,就偶遇426错误. 网络结构大致如下: 浏览器访问nginx, nginx代理到k8s内的ambassador, ambassador ...

  2. day8_类的装饰器和反射

    """ 类的装饰器: @property 当类的函数属性声明 @property后, 函数属性不需要加括号 即可调用 @staticmethod 当类的函数属性声明 @s ...

  3. jQuery中的筛选(六)

    1. eq(index|-index) 获取当前链式操作中第N个jQuery对象,返回jQuery对象,当参数大于等于0时为正向选取,比如0代表第一个,1代表第二个.当参数为负数时为反向选取,比如-1 ...

  4. 零基础入门 实战mpvue2.0多端小程序框架

    第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟 ...

  5. R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...

  6. Kubernetes容器集群管理环境 - Node节点的移除与加入

    一.如何从Kubernetes集群中移除Node比如从集群中移除k8s-node03这个Node节点,做法如下: 1)先在master节点查看Node情况 [root@k8s-master01 ~]# ...

  7. 移动端js触摸touch详解(附带案例源码)

    移动端触摸滑动原理详解案例,实现过程通过添加DOM标签的触摸事件监听,并计算触摸距离,通过距离坐标计算触摸角度,最后通过触摸角度去判断往哪个方向触摸的. 触摸的事件列表 触摸的4个事件: touchs ...

  8. C++:Name Lookup & Best Match

    名字查找 每当一个变量或者一个对象出现,编译器都会进行名字查找(name lookup),以确认这个变量或对象的具体属性.一般情况下,程序会从变量出现的地方开始向上查找,由内向外查找各级作用域直到全局 ...

  9. 转:对softmax讲解比较清楚的博客

    https://blog.csdn.net/wgj99991111/article/details/83586508

  10. python I/O复用

    select是阻塞式的方法