循环神经网络(RNN)的工作方式(一)

本文介绍了循环神经网络(RNN)的基础知识,包括为何使用序列模型、数学符号、RNN模型结构以及通过时间的反向传播。重点讲述了RNN在处理序列数据时的优势,如共享参数和处理不同长度序列的能力。此外,还讨论了不同的RNN类型,如Many-to-many、Many-to-one和Encoder-Decoder结构,并探讨了RNN在语言模型和序列生成中的应用。
摘要由CSDN通过智能技术生成

0 前言

这篇博客主要是吴恩达《深度学习》课程的《序列模型》第一周课《循环序列模型》的笔记整理,中间加入了一些自己的理解,供自己以后能够快速复习,也供一些有需要的朋友查看。

1.1 为什么选择序列模型

pic_1
序列模型有着丰富的应用场景。我们一起来看看上面ppt中的例子。
第一行是语音识别(Speech recognition)的应用,输入是一段音频,输出是一段文字;第二行是音乐生成(Music generation),输入是一个开始音符或者为空,输出是一段音符序列;第三行是情感分析(Sentiment classification),输入是一段评论,输出是情感倾向;第四行是DNA序列分析(DNA sequence analysis),输入是一个DNA序列,输出是匹配的蛋白质;第五行是机器翻译(Machine translation),输入是一种语言的文字,输出是另外一种语言的文字;第六行是视频行为识别(Video activity recognition),输入是视频帧,输出是识别的行为;第七行是命名实体识别(Name entity recognition),输入是一段文字,输出中标记出文字中的命名实体(比如人名)。
需要注意的是上面的输入输出中可以不全是序列,长度也不一定需要相等,后面我们会谈到这个问题。

1.2 数学符号

在继续后面的内容之前,我们先看一下吴恩达在循环神经网络课程中规定的一些符号。
pic_2
如上面ppt所示,我们用x<t>来索引序列,表示序列中第t个元素,无论这个序列是否是时间序列。x(i)表示第i个样本,x(i)<t>表示训练样本i的序列中的第t个元素,比如ppt中那句话中的单词’invented’可以表示为x(0)<5>。Tx来表示输入序列x的长度,Ty来表示输出序列y的长度,Tx(i)表示第i个样本的输入序列长度,Ty(i)表示第i个样本的输出序列长度。pic_3
如上述ppt,接下来我们看一下一个序列中的某个单词的表示方法。为了表示单词,我们首先要制作一个词典(vocabulary或dictionary)存储表示方法中将要用到的单词。一般的商业应用中词典的大小为30, 000到50, 000个词,我们这里以10, 000个词为例。我们可以采用遍历训练集找到前10,000个常用单词或者浏览网络上的词典获取最常用的10, 000个英文单词的方法来构造词典。
为了表示词典里的每个单词,我们使用one-hot表示法。one-hot表示法中每个单词向量的维度就是词典的大小,并且只有一个位置为1(该单词在词典中的序号),其余都是零,比如ppt中单词’Harry’的向量的第4075个位置(这里序号从1开始)为1,其余全为0。
这样我们可以用9个one-hot向量来表示上述句子中的9个词,输出Y表示成如本节第一张ppt中所示在特定位置为1(这里是命名实体识别问题)的向量(比如 [ 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 ] [1, 1, 0, 1, 1, 0, 0, 0, 0] [1,1,0,1,1,0,0,0,0]),构建输入X和输出Y之间的映射,使其成为一个监督学习问题。
最后,不在词典内的词采用<unk>表示,即unknown word。

1.3 循环神经网络模型

pic_4
如上述ppt所示,图中是一个传统的神经网络,左侧是输入数据,右侧是输出。现在需要明白的是我们为什么要用循环神经网络处理序列型数据,而不用这种传统神经网络呢?
这有两方面原因:

  1. 不同的样本的输入输出长度可能不同,比如输入的一个句子长度为10,而下一个可能为20。
  2. 传统的神经网络不能够共享从文本不同位置上学习到的特征。比如输入数据位置1学习到’Harry’是个人名,可能换了个位置就不行了。

对于问题1,也许我们可以使用填充(pad)较短长度的句子来解决,但这种方法并不见得是一种比较好的表达方式。对于问题2,我们需要的是像在卷积神经网络里那样,将在图片的一部分学习到的内容快速推广到图片的其他部分。
因此,我们有必要使用循环神经网络来处理这些问题,并且用一个更好的神经网络的实现方式还可以减少模型中的参数数量。下面我们来看一下循环神经网络中处理数据的过程:
pic_5
上述ppt中左侧的笔绘部分是吴恩达采用的循环神经网络的表达方式,这是一个按照时间展开的循环神经网络。而右侧的笔绘图则是其他一些文献中可能会采用的表达方式,它没有按照时间展开。
在吴恩达绘制的循环神经网络中,展开的每个部分表达了循环神经网络的一个timestep,也就是某个时刻整个循环神经网络的处理过程,这些timestep中的参数是共享的。通俗点说,一个timestep相当于for循环中的某次循环,各个timestep是有先后顺序的,我们所看到的展开的结构并不共同组成循环神经网络,相反它的某个timestep就已经是整个网络结构了。因此,循环神经网络处理输入数据时其实可以看做一个从左向右的扫描过程。
从ppt中我们可以看到循环神经网络第二个timestep的预测值 y ^ &lt; 2 &gt; \hat y^{\lt2\gt} y^<2>并不只是考虑当前timestep的输入 x &lt; 2 &gt; x^{\lt2\gt} x<2>,还结合了上一个timestep神经网络隐藏层的输出 a &lt; 1 &gt; a^{\lt1\gt} a<1>。还比如说,在ppt中第3个timestep之前的绿线所示, y ^ &lt; 3 &gt; \hat y^{\lt3\gt} y^<3>的值不仅仅取决于 x &lt; 3 &gt; x^{\lt3\gt} x<3>,其实还结合了 x &lt; 1 &gt; x^{\lt1\gt} x<1> x &lt; 2 &gt; x^{\lt2\gt} x<2>的信息。一般地,在循环神经网络中,每个timestep都会传递一个激活值到下一个timestep用于计算。因此,在零时刻我们需要造一个伪激活值 a &lt; 0 &gt; a^{\lt0\gt} a<0>(通常是零向量)作为一开始的输入。
还有一点值得提一下的是,ppt中神经网络的缺点在于,它只使用了序列中之前的信息来做出预测。例如ppt中下面两句话,为了判断Teddy是不是人名,仅仅使用Teddy之前的两个词是不够的,还需要使用Teddy之后的信息。为了解决这个问题,我们可以使用BRNN,这个在后面的小节中会写到。
另外,ppt中用红色书写的文字表示循环神经网络的参数, W a x W_{ax} Wax负责输入数据和隐藏层, W a a W_{aa} Waa负责激活值和隐藏层,输出结果由 W y a W_{ya} Wya决定。
pic_6
上述ppt展示了循环神经网络的前向传播过程和计算公式,我们可以看到公式中参数 W a x W_{ax} Wax的下标x意味着要乘以某个x类型的量,下标a意味着用来计算某个a类型的量。
计算 a &lt; t &gt; a^{\lt t \gt} a<t>的激活函数在循环神经网络中一般是tanh或者Relu,计算 y ^ &lt; t &gt; \hat y^{\lt t \gt} y^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值