一文看懂RNN

为什么需要RNN?

既然我们已经有了人工神经网络和卷积神经网络,为什么还要循环神经网络?

这是一般的神经网络应该有的结构:

在这里插入图片描述
无论是卷积神经网络,还是人工神经网络,他们的前提假设都是:元素之间是相互独立的,输入与输出也是独立的,比如:给一个图片 识别出来是一个 猫 第二张图片识别一个 兔子 第一个图片 和第二个图片没有必然关系 是独立的。

我们说话是要根据上下文的信息推理一些东西:

一个人说了:我喜欢旅游,其中最喜欢的地方是云南,以后有机会一定要去__________.这里填空,人应该都知道是填“云南“。因为我们是根据上下文的内容推断出来的,但机器要做到这一步就相当得难了。因此,就有了现在的循环神经网络,他的本质是:像人一样拥有记忆的能力。因此,他的输出就依赖于当前的输入和记忆。

记忆在机器里面存储

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

经典RNN

在学习RNN之前,首先要了解一下最基本的单层网络,它的结构如图:
在这里插入图片描述

在实际应用中,我们还会遇到很多序列形的数据:
在这里插入图片描述

如:

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

序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看:

在这里插入图片描述

图示中记号的含义是:

圆圈或方块表示的是向量。
一个箭头就表示对该向量做一次变换。如上图中h0和x1分别有一个箭头连接,就表示对h0和x1各做了一次变换。
在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。

h2的计算和h1类似。要注意的是,在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点,一定要牢记。

在这里插入图片描述
依次计算剩下来的(使用相同的参数U、W、b)
我们这里为了方便起见,只画出序列长度为4的情况,实际上,这个计算过程可以无限地持续下去。

我们目前的RNN还没有输出,得到输出值的方法就是直接通过h进行计算

在这里插入图片描述
正如之前所说,一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1。

剩下的输出类似进行(使用和y1同样的参数V和c):

变形如下:
在这里插入图片描述

在这里插入图片描述

RNN 各种结构

N VS 1

有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,应该怎样建模呢?实际上,我们只在最后一个h上进行输出变换就可以了:

在这里插入图片描述

这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

1 VS N

输入不是序列而输出为序列的情况怎么处理?我们可以只在序列开始进行输入计算:
在这里插入图片描述

还有一种结构是把输入信息X作为每个阶段的输入

在这里插入图片描述
这种1 VS N的结构可以处理的问题有:

  1. 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子
  2. 从类别生成语音或音乐等

N VS M

下面我们来介绍RNN最重要的一个变种:N vs M。这种结构又叫Encoder-Decoder模型,也可以称之为Seq2Seq模型。

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

为此,Encoder-Decoder结构先将输入数据编码成一个上下文向量c:

在这里插入图片描述

得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换

拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态h0输入到Decoder中:

在这里插入图片描述

还有一种做法是将c当做每一步的输入:

在这里插入图片描述

由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:

机器翻译。Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的
文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。
阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
语音识别。输入是语音信号序列,输出是文字序列。

Attention机制

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

Attention机制通过在每个时间输入不同的c来解决这个问题,下图是带有Attention机制的Decoder

整体图:
在这里插入图片描述

将 Decoder 部分单拿出来:
在这里插入图片描述
在这里插入图片描述

以机器翻译为例(将中文翻译成英文):

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

a3j 的计算:

在这里插入图片描述

参考文献:

https://blog.youkuaiyun.com/xierhacker/article/details/73384760
https://zhuanlan.zhihu.com/p/28054589
https://zhuanlan.zhihu.com/p/43493999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值