深度学习500问——Chapter06: 循环神经网络(RNN)(1)

简介: 深度学习500问——Chapter06: 循环神经网络(RNN)(1)

6.1 为什么需要RNN

时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。一般的神经网络,在训练数据足够、算法模型优越的情况下,给定特定的x,就能得到期望y。其一般处理单个的输入,前一个输入和后一个输入完全无关,但实际应用中,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如:

当我们在理解一句话意思时,孤立的理解这句话的每个词不足以理解整体意思,我们通常需要处理这些词连接起来的整个序列;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN就由此诞生了。

6.2 图解RNN基本结构

6.2.1 基本的单层网络结构

在进一步了解RNN之前,先给出最基本的单层网络结构,输入是x,经过变换Wx+b和激活函数f得到输出y

6.2.2 图解经典RNN结构

在实际应用中,我们还会遇到很多序列形的数据。如:

  • 自然语言处理问题。x1 可以看作是第一个单词, 可以看作是第二个单词,依次类推。
  • 语音处理。此时,x1,x2,x3..... 是每帧的声音。
  • 时间序列问题。例如每天的股票价格等等。

其单个序列如下图所示:

前面介绍了诸如此类的序列数据用原始的神经网络难以建模,基于此,RNN引入了隐状态(hidden state),可对序列数据提取特征,接着再转换为输出。

为了便于理解,先计算h1

注:图中的圆圈表示向量,箭头表示对向量做变换。


RNN中,每个步骤使用的参数U,W,b相同,ℎ2的计算方式和ℎ1类似,其计算结果如下:

计算 也相似,可得:

接下来,计算RNN的输出y1,采用Softmax作为激活函数,根据yn=f(Wx+b) ,得y1


使用和y1相同的参数V,c,得到y1,y2,y3,y4的输出结构:

以上即为最经典的RNN结构,其输入为x1,x2,x3,x4,输出为y1,y2,y3,y4,当然实际中最大值为yn,这里为了便于理解和展示,只计算4个输入和输出。从以上结构可看出,RNN结构的输入和输出等长。

6.2.3 vector-to-sequence结构

有时我们要处理的问题输入是一个单独的值,输出是一个序列。此时,有两种主要建模方式:

方式一:可只在其中的某一个序列进行计算,比如序列第一个进行输入计算,其建模方式如下:

方式二:把输入信息 X 作为每个阶段的输入,其建模方式如下:

6.2.4 sequence-to-vector结构

有时我们要处理的问题输入是一个序列,输出是一个单独的值,此时通常在最后的一个序列上进行输出变换。其建模如下所示:

6.2.5 Encoder-Decoder结构

原始的sequence-to-sequence结构的RNN要求序列等长,然而我们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子往往没有相同的长度。

其建模步骤如下:

步骤1:将输入数据编码成一个上下文向量 ,这部分称为Encoder,得到的 有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给 ,还可以对最后的隐状态做一个变换得到 ,也可以对所有的隐状态做变换。其示意如下所示:

步骤2:用另一个RNN网络(我们将其称为Decoder)对其进行编码。

方法一是将步骤1中的 作为初始状态输入到Decoder,示意图如下所示:

方法二是将 作为Decoder的每一步输入,示意图如下所示:

6.2.6 以上三种结构各有怎样的应用场景

网络结构 结构图示 应用场景举例
1 vs N

1、从图像生成文字,输入为图像的特征,输出为一段句子

2、根据图像生成语音或音乐,输入为图像特征,输出为一段语音或音乐

N vs 1

1、输出一段文字,判断其所属类别

2、输入一个句子,判断其情感倾向

3、输入一段视频,判断其所属类别

N vs M

1、机器翻译,输入一种语言文本序列,输出另一种语言文本序列

2、文本摘要,输入文本序列,输出这段文本序列摘要

3、阅读理解,输入文章,输出问题答案

4、语音识别,输入语音序列信息,输出文字序列

6.2.7 图解RNN中的Attention机制

在上述通用的Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征再解码,因此,中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个可能存不下那么多信息,就会造成翻译精度的下降。Attention机制通过在每个时间输入不同的来解决此问题。

引入了Attention机制的Decoder后,有不同的,每个会自动选择与当前输出最匹配的上下文信息,其示意图如下所示:


举例:比如输入序列是“我爱中国”,要将此输入翻译成英文:

假如用aij衡量Encoder中第 阶段的hj和解码时第 阶段的相关性,aij从模型中学习得到,和Decoder的第i1阶段的隐状态、Encoder第 个阶段的隐状态有关,比如a3j的计算示意如下所示:


最终Decoder中第 阶段的输入的上下文信息ci来自所有hjaij的加权和。

其示意图如下图所示:


在Encoder中,h1,h2,h3,h4分别代表“我”,“爱”,“中”,“国”所代表信息。翻译的过程中,c1会选择和“我”最相关的上下午信息,如上图所示,会优先选择a11,以此类推,c2会优先选择相关性较大的a22会优先选择相关性较大的a33,a34,这就是Aattention机制。

6.3 RNNs典型特点

1、RNN主要用于处理序列数据。对于传统的神经网络模型,从输入层到隐含层再到输出层,层与层之间一般为全连接,每层之间神经元是无连接的。但是传统神经网络无法处理数据间的前后关联问题。例如,为了预测句子的下一个单词,一般需要该词之前的语义信息。这是因为一个句子中前后单词是存在语义联系的。

2、RNNs中当前单元的输出与之前步骤输出也有关,因此称之为循环神经网络。具体的表现形式为当前单元会对之前步骤信息进行存储并应用与当前输出的计算中。隐藏层之间的节点连接起来,隐藏层当前输出由当前时刻输入向量和之前时刻隐藏层状态共同决定。

3、标准的RNNs结构图中,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。

4、在标准的RNN结构中。隐藏层的神经元之间也是带有权值的,且权值共享。

5、理论上,RNNs能够对任何长度序列数据进行处理。但是在实践中,为了降低复杂度往往假设当前状态只与之前某几个时刻状态相关,下图便是一个典型的RNNs:

  • 输入单元(Input units):输入集
  • 输出单元(Output units):输出集{y0,y1,,yt,yt+1,}
  • 隐藏单元(Hidden units):输出集s{s0,s1,,st,st+1,}

图中信息传递特点:

  1. 一条单向流动的信息流是从输入单元到隐藏单元。
  2. 一条单向流动的信息流从隐藏单元到输出单元。
  3. 在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”。
  4. 当前单元(cell)输出是由当前时刻输入和上一时刻隐藏层状态共同决定。

目录
相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其应用
【9月更文挑战第24天】本文将深入探讨深度学习中的一种重要模型——卷积神经网络(CNN)。我们将通过简单的代码示例,了解CNN的工作原理和应用场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
36 1
|
16天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
66 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
16天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
24 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
4天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第31天】本文旨在通过浅显易懂的语言和直观的比喻,为初学者揭开深度学习中卷积神经网络(CNN)的神秘面纱。我们将从CNN的基本原理出发,逐步深入到其在图像识别领域的实际应用,并通过一个简单的代码示例,展示如何利用CNN进行图像分类。无论你是编程新手还是深度学习的初学者,这篇文章都将为你打开一扇通往人工智能世界的大门。
|
6天前
|
机器学习/深度学习 人工智能 算法
深度学习中的对抗性生成网络
本文将深入探讨深度学习中的对抗性生成网络,通过通俗易懂的语言解释其工作原理及应用。我们将从基本原理入手,逐步解析对抗性生成网络的组成部分和训练过程,并结合具体实例展示其在图像生成和风格转换等领域的应用。同时,文章也将讨论在实际应用中可能面临的挑战及未来发展方向。
|
8天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
33 5
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
下一篇
无影云桌面