循环神经网络RNN 循环神经网络RNN可以处理哪些情况

   2023-02-10 学习力464
核心提示:前言我们在思考和判断问题的时候,并不是总是以一个空白的状态进行思考的。我们的思考都是基于我们以前的知识或者经验,比如我们读到这篇博客的时候,考虑到这些词语或者语句表达的是什么意思,都是基于我们以前所学到的知识。也就是说我们的思想具有持续性。

前言

我们在思考和判断问题的时候,并不是总是以一个空白的状态进行思考的。我们的思考都是基于我们以前的知识或者经验,比如我们读到这篇博客的时候,考虑到这些词语或者语句表达的是什么意思,都是基于我们以前所学到的知识。也就是说我们的思想具有持续性。

传统的神经网络对于这种情况显得有点无能为力。比如你想要识别出一个电影片段里面的每一个画面,由于要考虑到前后画面的连续性,传统的神经网络很处理这种问题。RNN的出现解决了这个问题。RNN是包含循环的神经网络,允许信息的持久化。其实在上述描述情景里面涉及到时序数据,传统的HMM模型和动态时间规划算法(DTW)也可解决上述问题,但是效果却不如RNN。有兴趣的读者可以查看相关文献,这里就不再赘述。下面我们详细介绍RNN。

RNN的定义

递归神经网络(RNN)是两种人工神经网络的总称。一种是时间递归神经网络(recurrent neural network),另一种是结构递归神经网络(recursive neural network)。时间递归神经网络的神经元间连接构成矩阵,而结构递归神经网络利用相似的神经网络结构递归构造更为复杂的深度网络。RNN一般指代时间递归神经网络。

recurrent neural network原理

循环神经网络RNN

上面的图片是一个简单的RNN结构模块。Xt表示输入数据,A表示正在处理数据,ht表示输出数据。循环可以使这些信息从当前一部传递到下一步。具体展开之后为右边的结构。通过展开我们简单的认为我们写出了全部的序列。其中循环神经网络对应的公式如下:

  • xt表示的是t时刻的输入,xt可以是一个one-hot向量。
  • st是t时刻的隐层状态,它是记忆网络。st是基于前一时刻隐层和当前时刻输入的计算,st=f(Wst1+Uxt),其中f函数通常是非线性的,如ReLU或者tanh。其中第一个初始化状态s0记为0
  • ot表示t时刻的输出,例如,如果我们想预测句子a的下一个词,它将会是一个词汇表中的概率向量,ot=softmax(Vst)

其中有几点注意事项:

  • 你可以将隐层状态st认为是网络的记忆。st可以捕获之前所有时刻发生的信息。输出 ot的计算仅仅依赖于时刻t的记忆。上面已经简略提到,实际中这个过程有些复杂,因为 ot通常不能获取之前过长时刻的信息
  • 不像传统的深度神经网络,在不同的层使用不同的参数,循环神经网络在所有步骤***享参数(U、V、W)。这个反映一个事实,我们在每一步上执行相同的任务,仅仅是输入不同。这个机制极大减少了我们需要学习的参数的数量;
  • 上图在每一步都有输出,但是根据任务的不同,这个并不是必须的。例如,当预测一个句子的情感时,我们可能仅仅关注最后的输出,而不是每个词的情感。相似地,我们在每一步中可能也不需要输入。循环神经网络最大的特点就是隐层状态,它可以捕获一个序列的一些信息;

同一层前一个神经元的输出可以作为下一个神经圆的输入,这就是RNN与全连接网络的区别,下图为一个全连接网络,可以看到全连接网络的同一层之间是没有联系的。

循环神经网络RNN

几种常见的应用

循环神经网络RNN

  • one to many:输入一幅图片生成一个描述这个图片的句子
  • many to one:输入一段句子判断情感,或者输入一段视频,判断视频的行为
  • many to many:对于视频中的每一段都做出决策,或者机器翻译

CVPR上有很多这方面的论文可以学习。

循环神经网络训练

循环神经网络的训练类似于传统神经网络的训练。我们也使用反向传播算法,但是有所变化。因为循环神经网络在所有时刻的参数是共享的,但是每个输出的梯度不仅依赖当前时刻的计算,还依赖之前时刻的计算。例如,为了计算时刻 t = 4 的梯度,我们还需要反向传播3步,然后将梯度相加。这个被称为Backpropagation Through Time(BPTT)。现在,我们仅仅需要了解到利用BPTT算法训练出来的普通循环神经网络很难学习长期依赖(例如,距离很远的两步之间的依赖),原因就在于梯度消失/发散问题。目前已经有一些机制来解决这些问题,特定类型的循环神经网络(如LSTM)专门用于规避这些问题。

BPTT算法

这与我们在深度前馈神经网络中使用的标准反向传播算法基本相同。主要的差异就是我们将每时刻 W 的梯度相加。在传统的神经网络中,我们在层之间并没有共享参数,所以我们不需要相加。

为了与参考文献保持一致,这里我们把o修改为y^,所以RNN的基本公式为:

st=tanh(Uxt+Wst1)

y^t=softmax(Vst)

我们定义损失熵为交叉熵,如下所示:

Et(yt,yt^)=ytlog(yt^)

Et(y,y^)=tEt(yt,yt^)=tytlog(yt^)

以语言模型为例,yt是t时刻上正确的词,yt^是预测出来的词。我们通常将一整个序列(一个句子)作为一个训练实例,所以总的误差就是各个时刻(词)的误差之和。

循环神经网络RNN

请牢记,我们的目标是计算误差关于参数U、V和W的梯度,然后使用梯度下降法学习出好的参数。正如我们将误差相加,我们也将一个训练实例在每时刻的梯度相加: EW=tEtt

为了计算这些梯度,我们需要使用微分的链式法则。当从误差开始向后时,这就是反向传递,这里我们以E3为例,仅仅是为了使用具体数字。

E3V=E3y3^y3^z3z3V=(y3^y3)s3

其中zt=Vst

推导过程:

E3=t=13ytlog(yt^)E3y3^=y3y3^

y3^=z3z1+z2+z3

y3^z3=z1+z2(z1+z2+z3)2

因此有:

E3y3^y3^z3=(z1+z2+z3)y3z3z1+z2(z1+z2+z3)2=y3(1y3^)/z3

计算E3W有所不同。为了了解原因,我们写出链式法则,正如上面所示。

E3W=k=03E3y3^y3^s3s3W

其中st=tanh(Uxt+Wst1)依赖于st1,而st1又依赖于st2和W。如果我们队W求导,我们不能简单将s2视为一个常量,我们需要再次应用链式法则,我们真正想要的如下所示:

E3W=E3y3^y3^s3s3skskW

我们将每时刻对梯度的贡献相加。也就是说,由于 W 在每时刻都用在我们所关心的输出上,我们需要从时刻 t = 3 通过网络的所有路径到时刻 t = 0 来反向传播梯度:

循环神经网络RNN

请留意,这与我们在深度前馈神经网络中使用的标准反向传播算法完全相同。主要的差异就是我们将每时刻 W 的梯度相加。在传统的神经网络中,我们在层之间并没有共享参数,所以我们不需要相加。

依赖性问题

RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。但是当相关信息和当前预测位置之间的间隔变得非常大,RNN 会丧失学习到连接如此远的信息的能力。RNN 绝对可以处理这样的长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。训练和参数设计十分复杂。LSTM就是专门设计出来解决这个问题的。下一篇我们详细讨论LSTM

引用

[1].http://blog.csdn.net/heyongluoyao8/article/details/48636251

[2].https://www.jianshu.com/p/9dc9f41f0b29

[3]http://www.cnblogs.com/zhbzz2007/p/6339346.html

 
反对 0举报 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 【深度学习】循环神经网络教程 循环神经网络 知乎
    【深度学习】循环神经网络教程 循环神经网络 知
    这是在公司做培训时制作的PPT,教程对循环神经网络以及其应用进行了简单地介绍,主要分为以下六个部分:Why do we need Recurrent Neural Networks?Vanilla Recurrent Neural NetworkBackpropagation Through Time (BPTT)Gradient exploding/vanishing proble
    03-08
  • 深度学习 - 循环神经网络RNN
    深度学习 - 循环神经网络RNN
    当数据是有顺序的时候,我们就可以使用RNN了,比如说话的顺序 有序列化的数据等的。   在介绍RNN之前,我有篇博客是介绍了CNN,简单提一下,在一张大的图片是上,我们有一个fliter滤波器,通过共用参数来扫描这张图片,提取出一张精髓的图片,再在这这张图片
    03-08
  • 拓端tecdat|R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列
    拓端tecdat|R语言深度学习Keras循环神经网络(RN
    原文链接:http://tecdat.cn/?p=23902原文出处:拓端数据部落公众号递归神经网络被用来分析序列数据。它在隐藏单元之间建立递归连接,并在学习序列后预测输出。在本教程中,我们将简要地学习如何用R中的Keras RNN模型来拟合和预测多输出的序列数据,你也可以
    03-08
  • 循环神经网络(RNN)相关知识 rnn递归神经网络
    循环神经网络(RNN)相关知识 rnn递归神经网络
    文章目录RNN概述前向传播公式通过时间反向传播(BPTT)RNN确定序列长度方式其他RNN结构基于RNN的应用1,序列数据的分析2,序列数据的转换3,序列数据的生成RNN的不足1,从隐藏变量h角度来看2,从梯度传播角度来看RNN概述循环神经网络(RNN)是用于处理序列数据
    02-10
  • 【吴恩达deeplearning.ai】深度学习(9):循环神经网络
    【吴恩达deeplearning.ai】深度学习(9):循环神
    随深度学习技术的发展,使用循环神经网络(Recurrent Neural Network,RNN)建立的各种序列模型,使语音识别、机器翻译及自然语言理解等应用成为可能。表示与类型自然语言、音频等数据都是前后相互关联的数据,比如理解一句话要通过一整句而不是其中的几个词
    02-10
  • 学习记忆循环神经网络心得
    学习记忆循环神经网络心得
          如有缪误欢迎指正  GRU结构向前传播 心得(欢迎指正)当遗忘门等于0的时候当前信息抛弃 之前记忆前传当遗忘门等于1 的时候之前记忆抛弃 当前信息前传当遗忘门的值为0和1之间的时候 调控前传的记忆与信息的比例 QAQQ:LSTM与GRU 的区别A: LSTM
    02-10
  • 协同过滤结合循环神经网络的推荐系统——期末作业
    协同过滤结合循环神经网络的推荐系统——期末作
    Recommendation System using Collaborative Filtering and Recurrent Neural Networkauthor:Fu-ze ZhongEmail: [email protected]School of Data and Computer Science, Sun Yat-sen University, Guangzhou, China.abstractThe behavior of user in an e-c
    02-10
  • 第六讲 循环神经网络--LSTM--stock
    1 !pip install tushare2 import tushare as ts3 import numpy as np4 import tensorflow as tf5 from tensorflow.keras.layers import Dropout, Dense, LSTM6 import matplotlib.pyplot as plt7 import os8 import pandas as pd9 from sklearn.preprocessing
    02-10
  • 循环神经网络系列(二)Tensorflow中dynamic_rnn
    循环神经网络系列(二)Tensorflow中dynamic_rn
    1.回顾上一篇博文(循环神经网络系列(一)Tensorflow中BasicRNNCell)中我们介绍了在Tensoflow中,每个RNN单元的实现,以及对应各个参数的含义。自那之后,我们就能通过Tensorflow实现一个单元的计算了。import tensorflow as tfimport numpy as npx = np.array
    02-09
  • 双向循环神经网络和深层循环神经网络 (吴恩达老师_学习笔记)
    双向循环神经网络和深层循环神经网络 (吴恩达
    目录双向循环神经网络(Bidirectional RNN)深层循环神经网络(Deep RNNs)双向循环神经网络(Bidirectional RNN)双向RNN模型(BRNN),可以在序列的某点处不但获取之前的信息,同时还可以获取这个序列点之后的信息,说的炫酷点就是get information from the
    02-09
点击排行