1.    场景与应用

  在循环神经网络可以用于文本生成、机器翻译还有看图描述等,在这些场景中很多都出现了RNN的身影。

2.    RNN的作用

  传统的神经网络DNN或者CNN网络他们的输入和输出都是独立的。对于这些模型输入的数据跟输出的数据大多是关联不太紧密的场景,但是有些场景输入的数据对后面输入的数据是有关系的,或者说后面的数据跟前面的数据是有关联的。例如,对于文本类的数据,当输入某句话的时候,刚开始输入第一个字的时候,再输入这句话的第二个字时候,其实第二个字要输入什么字其实是跟第一个字是有关联的。所以,对于这样一类的场景,通常是要考虑前面的信息的,以至于引入RNN模型。

  对于RNN模型为解决这类问题引入了“记忆”这一概念。循环神经网络的循环来源于其每个元素中都执行相同的任务,但是输出依赖于输入和“记忆”两个部分。

3.    RNN结构

  从图中看,对于RNN网络是按照时间序列展开的。对于图中的变量Wt,是在时刻t处的输入,St是时间t处的“记忆”,St=f(UXt+WSt−1 + b),f可以是tanh等,f取tanh会把数据压缩到一个范围内,有时候也可以使用sigmoid函数。Ot是时间t出的输出,比如是预测下个词的话,可能是softmax输出的属于每个候选词的概率,Ot = softmax(VSt)。对于这里的St已经把Xt合并了,所以Ot的公式只有St。

  对于循环神经网络,可以把隐状态St视作为“记忆体”,捕捉之前时间点上的信息。输出Ot有当前时间及之前所有“记忆”共同计算得到的。但由于St是一个有限的矩阵,对于之前的信息并不能完全捕捉到,也会随着时间的变长,对于之前的“记忆”也会“变淡”。对于RNN不同于DNN与CNN,这里的RNN其实整个神经网络都在共享一组参数(U,V,W),这样极大的减小了需要训练的参数。图中的Ot再由写任务下是不存在的,只需要对最后的结果输出就可以。

4.    不同类型的RNN

  (1). 双向RNN

  通过以上经典的RNN模型,它是只关心当前的输入和之前的“记忆”的,但有些情况下,当前的输入不知依赖于之前的序列元素,还依赖于后面序列的元素。比如,一篇文章,当读第一段时候我们并不知道文章的主体要讲什么内容,但当我们读完第一段的时候需要判断文章主要讲什么内容,这时候就需要读后面的内容才能知道这个文章主要讲的是什么。对于这样的场景需要后面的数据才能更好的预测当前的状态,所以引入了双向RNN,就是为了解决这一类问题的。双向RNN的模型如下:

    表达式:

双向RNN是考虑到了前后的“记忆”,能够更好的关联到前后的信息。

  (2). 深度双向RNN

对于深度双向RNN和双向RNN的区别是每一步和每一个时间点我们设定了多层的结构。结构如下:

    深层双向RNN的表达式:

    

   对于深层双向RNN考虑的信息与双向RNN相比变多了,这意味着能够对于某场景,能够关联更多的信息。

5.    RNN与BPTT算法

  对于循环神经网络的BPTT算法其实是BP算法的一个变体,但是循环神经网络的BPTT是与时间序列有关的。

  对于这个问题是个Softmax问题所以这里用交叉熵损失,所以损失函数可以表示为:

  对于求所有误差求W得偏导函数为:

  但是,

  所以,所以根据求导链式法则可以进一步求得:(又因为他们的权值是共享的)

  

  用图表示如下:

  通过上面的式子:

  通过链式法则,表达式可以进一步表示为:

通过以上的步骤求得损失函数的偏导后,就可以用SGD算法去做参数的更新。

循环神经网络(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 ...

  10. 循环神经网络RNN公式推导走读

    0语言模型-N-Gram 语言模型就是给定句子前面部分,预测后面缺失部分 eg.我昨天上学迟到了,老师批评了____. N-Gram模型: ,对一句话切词 我 昨天 上学 迟到 了 ,老师 批评 了 ...

随机推荐

  1. Python实现不同格式打印九九乘法表

    前言:最近在学习Python,学习资源有慕课网上的视频教程.菜鸟教程以及Python官方文档tutorial.虽然了解了Python的基本语法,但是还没有真正意义上输出自己写的代码.代码小白,之前仅学 ...

  2. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历

    日历 日历可以单独应用于规则中,也可以和timer结合使用在规则中使用.通过属性calendars来定义日历.如果是多个日历,则不同日历之间用逗号进行分割. 在Drools中,日历的概念只是将日历属性 ...

  3. RabbitMQ消息可靠性分析

    消息中间件的可靠性是指对消息不丢失的保障程度:而消息中间件的可用性是指无故障运行的时间百分比,通常用几个 9 来衡量.不存在绝对的可靠性只能尽量趋向完美.并且通常可靠性也意味着影响性能和付出更大的成本 ...

  4. task optimization之superglue分析

    开启logging (例子F:\wamp\www\git_repos\GitHub\GeneralUtility\superglue-master\examples\src\logging.cpp) ...

  5. ASP.NET Core 2.0 使用支付宝PC网站支付实现代码(转)

    最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的源码, ...

  6. FineUI4.0以后如何调用JS事件

    F.ready(function() { // 你的代码 }); F.ready(function () {            var searchClientID = '<%= TextB ...

  7. win10激活命令

    以管理员方式打开命令提示符输入以下3条命令slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 按回车slmgr /skms 54.223.212.31 按回车slmgr ...

  8. 组件之间的通讯:vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  9. 如何检测NFC芯片型号?NFC手机即可!

    拿到了NFC标签之后,因为很多项目中的需求,用户需要对自已的NFC芯片进行选型,也就需要判断NFC芯片的类型?芯片是原装进口还是国产兼容的?芯片内存有多少?芯片存储内部结构如何......,而且用户还 ...

  10. ThinkJava-访问权限控制

    6.2.3 private: 你无法访问 关键字private的意思是,除了包含该成员的类之外,其他任何类都无法访问这个成员.由 于处于同一个包内的其他类是不可以访问private成员的,因此这等于说 ...