循环神经网络RNN 1—— 基本模型及其变体

RNN是非常重要的神经网络结构,直接将数据处理提高了一个维度,在序列数据建模方面效果非常好,广泛应用于语音、视频、文本等领域,本篇将从模型结构上对RNN进行总结。
(文末有相关的参考资料连接,有兴趣的可以进一步拓展。)
循环神经网络RNN 1—— 基本模型及其变体
循环神经网络RNN 2—— attention注意力机制(附代码)
循环神经网络RNN 3——LSTM及其变体


1,RNN的基本结构

RNN结构是从基本的神经网络变换而来的,加入了时间维度,可以很方便的处理序列数据。

1.1,单层网络

首先要了解一下最基本的单层网络,它的结构如图,输入是 x x x,经过变换 W x + b Wx+b Wx+b和激活函数f得到输出 y y y,这个不必多说。

在这里插入图片描述

1.2,经典的RNN结构(N vs N)

在这里插入图片描述
如:
• 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
• 语音处理。此时,x1、x2、x3……是每帧的声音信号。
• 时间序列问题。例如每天的股票价格等等
我们一般看到的RNN结构是这样的:
在这里插入图片描述
计算公式是这样的:

O t = g ( V ∗ S t ) S t = f ( U ∗ X t + W ∗ S t − 1 ) \begin{aligned} & O_t = g(V*S_t)\\ & S_t = f(U*X_t + W*S_{t-1}) \end{aligned} Ot=g(VSt)St=f(UXt+WSt1)

思路很简单:
x为输入,s为隐藏层,o为输出,u和v分别是权重,这是一般的神经网络,由于数据是序列数据,按照时间线展开,逐次输入数据x,依次训练神经网络,其中u和v的参数是共享的,其中连接时间数据的就是w,不同时间点的w也是共享的,起到对之前数据记忆的作用。

下面我们看下细节:
为了建模序列问题,RNN引入了隐状态h(hidden state)的概念(用后面用h表示隐藏层),h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看:
在这里插入图片描述
图示中记号的含义是:
• 圆圈或方块表示的是向量。
• 一个箭头就表示对该向量做一次变换。如上图中 h 0 h_0 h0 x 1 x_1 x1分别有一个箭头连接,就表示对 h 0 h_0 h0 x 1 x_1 x1各做了一次变换。
h 2 h_2 h2的计算和 h 1 h_1 h1类似。要注意的是,在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点。

在这里插入图片描述
依次计算剩下来的(使用相同的参数U、W、b):
在这里插入图片描述
我们这里为了方便起见,只画出序列长度为4的情况,实际上,这个计算过程可以无限地持续下去。
我们目前的RNN还没有输出,得到输出值的方法就是直接通过h进行计算:
在这里插入图片描述
正如之前所说,一个箭头就表示对对应的向量做一次类似于 f ( W x + b ) f(Wx+b) f(Wx+b)的变换,这里的这个箭头就表示对 h 1 h_1 h1进行一次变换,得到输出 y 1 y_1 y1

剩下的输出类似进行(使用和 y 1 y_1 y1同样的参数 V V V c c c):
在这里插入图片描述
以上就是最经典的RNN结构,我们像搭积木一样把它搭好了。它的输入是x1, x2, …xn,输出为y1, y2, …yn,也就是说,输入和输出序列必须要是等长的。

由于这个限制的存在,经典RNN的适用范围比较小,但也有一些问题适合用经典的RNN结构建模,如:
• 计算视频中每一帧的分类标签。因为要对每一帧进行计算,因此输入和输出序列等长。
• 输入为字符,输出为下一个字符的概率。这就是著名的Char RNN(详细介绍请参考:The Unreasonable Effectiveness of Recurrent Neural Networks,地址:http://karpathy.github.io/2015/05/21/rnn-effectiveness/。Char RNN可以用来生成文章,诗歌)。

2、RNN变体

2.1 N vs 1 模型

有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,应该怎样建模呢?实际上,我们只在最后一个h上进行输出变换就可以了:
在这里插入图片描述
这种结构通常用来处理序列分类问题。如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

2.2, 1 vs N 模型

输入不是序列而输出为序列的情况怎么处理?我们可以只在序列开始进行输入计算:
在这里插入图片描述
还有一种结构是把输入信息X作为每个阶段的输入:
在这里插入图片描述
这种1 VS N的结构可以处理的问题有:
• 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子
• 从类别生成语音或音乐等

2.3、N vs N模型

在这里插入图片描述
得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。
拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态 h 0 h_0 h0输入到Decoder中:
在这里插入图片描述
还有一种做法是将c当做每一步的输入:

在这里插入图片描述
由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:
• 机器翻译。Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的
• 文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。
• 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
• 语音识别。输入是语音信号序列,输出是文字序列。

参考资料:
https://www.leiphone.com/news/201709/8tDpwklrKubaecTa.html
https://zhuanlan.zhihu.com/p/67115572
https://zhuanlan.zhihu.com/p/30844905

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值