循环神经网络经典模型

落花浮王杯 提交于 2020-02-19 23:12:40

详细地介绍了经典的RNN、RNN几个重要变体,以及Seq2Seq模型、Attention机制。
#一、从单层网络谈起
在学习RNN之前,首先要了解一下最基本的单层网络,它的结构如图:
输入是x,经过变换Wx+b和激活函数f得到输出y。
#二、经典的RNN结构(N vs N)
在实际应用中,遇到很多序列形的数据
如:

自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
语音处理。此时,x1、x2、x3……是每帧的声音信号。
时间序列问题。例如每天的股票价格等等
序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看:
在这里插入图片描述
图示中记号的含义是:圆圈或方块表示的是向量。
一个箭头就表示对该向量做一次变换。如上图中h0和x1分别有一个箭头连接,就表示对h0和x1各做了一次变换。
在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。
h2的计算和h1类似。要注意的是,在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点,一定要牢记。
在这里插入图片描述
依次计算剩下来的(使用相同的参数U、W、b):
在这里插入图片描述
一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1。剩下的输出类似进行(使用和y1同样的参数V和c):

在这里插入图片描述
#三、N VS 1
有的时候,我们要处理的问题输入是一个序列,输出是一个单独的值而不是序列,应该怎样建模呢?实际上,我们只在最后一个h上进行输出变换就可以了:
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
这种1 VS N的结构可以处理的问题有:
1\从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子
2\从类别生成语音或音乐等

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!