Ng深度学习笔记--序列模型--循环神经网络(RNN)

本文介绍了序列模型在语音识别、自然语言处理等领域的应用,并详细讲解了循环神经网络(RNN)的结构、反向传播过程、不同类型的RNN以及在语言模型和序列生成中的应用。通过实例展示了RNN如何处理序列数据,包括one-hot编码、损失函数和梯度消失问题。
摘要由CSDN通过智能技术生成

Why sequence models

序列模型能够应用在许多领域,例如:

  • 语音识别

  • 音乐发生器

  • 情感分类

  • DNA序列分析

  • 机器翻译

  • 视频动作识别

  • 命名实体识别

这些序列模型基本都属于监督式学习,输入x和输出y不一定都是序列模型。如果都是序列模型的话,模型长度不一定完全一致。

Notation

下面以命名实体识别为例,介绍序列模型的命名规则。示例语句为:

Harry Potter and Hermione Granger invented a new spell.

该句话包含9个单词,输出y即为1 x 9向量,每位表征对应单词是否为人名的一部分,1表示是,0表示否。很明显,该句话中“Harry”,“Potter”,“Hermione”,“Granger”均是人名成分,所以,对应的输出y可表示为:

y=[1 1 0 1 1 0 0 0 0]
一般约定使用y表示序列对应位置的输出,使用Ty表示输出序列长度,则1≤t≤Ty。

对于输入x,表示为:

[ x < 1 > x < 2 > x < 3 > x < 4 > x < 5 > x < 6 > x < 7 > x < 8 > x < 9 > ] [x^{<1>} x^{<2>} x^{<3>} x^{<4>} x^{<5>} x^{<6>} x^{<7>} x^{<8>} x^{<9>}] [x<1>x<2>x<3>x<4>x<5>x<6>x<7>x<8>x<9>]
同样,x表示序列对应位置的输入,Tx表示输入序列长度。注意,此例中,Tx=Ty,但是也存在Tx≠Ty的情况。

如何来表示每个x呢?方法是首先建立一个词汇库vocabulary,尽可能包含更多的词汇。例如一个包含10000个词汇的词汇库为:

在这里插入图片描述

该词汇库可看成是10000 x 1的向量。值得注意的是自然语言处理NLP实际应用中的词汇库可达百万级别的词汇量。

然后,使用one-hot编码,例句中的每个单词x都可以表示成10000 x 1的向量,词汇表中与x对应的位置为1,其它位置为0。该x为one-hot向量。值得一提的是如果出现词汇表之外的单词,可以使用UNK或其他字符串来表示。

对于多样本,以上序列模型对应的命名规则可表示为:X(i),y(i),T(i)x,T(i)y。其中,i表示第i个样本。不同样本的T(i)x或T(i)y都有可能不同。
在这里插入图片描述

Recurrent Neural Network Model

对于序列模型,如果使用标准的神经网络,其模型结构如下:

在这里插入图片描述

使用标准的神经网络模型存在两个问题:

第一个问题,不同样本的输入序列长度或输出序列长度不同,即T(i)x≠T(j)x,T(i)y≠T(j)y,造成模型难以统一。解决办法之一是设定一个最大序列长度,对每个输入和输出序列补零并统一到最大长度。但是这种做法实际效果并不理想。

第二个问题,也是主要问题,这种标准神经网络结构无法共享序列不同x之间的特征。例如,如果某个x即“Harry”是人名成分,那么句子其它位置出现了“Harry”,也很可能也是人名。这是共享特征的结果,如同CNN网络特点一样。但是,上图所示的网络不具备共享特征的能力。值得一提的是,共享特征还有助于减少神经网络中的参数数量,一定程度上减小了模型的计算复杂度。例如上图所示的标准神经网络,假设每个x扩展到最大序列长度为100,且词汇表长度为10000,则输入层就已经包含了100 x 10000个神经元了,权重参数很多,运算量将是庞大的。

标准的神经网络不适合解决序列模型问题,而循环神经网络(RNN)是专门用来解决序列模型问题的。RNN模型结构如下:
在这里插入图片描述

序列模型从左到右,依次传递,此例中,Tx=Ty。 x < t > x^{<t>} x<t> y < t > y^<t> y<t>之间是隐藏神经元。a会传入到第t+1个元素中,作为输入。其中, a < 0 > a^{<0>} a<0>一般为零向量。

RNN模型包含三类权重系数,分别是 W a x W_{ax} Wax W a a W_{aa} Waa W y a W_{ya} Wya。且不同元素之间同一位置共享同一权重系数。
在这里插入图片描述

RNN的正向传播(Forward Propagation)过程为:

a < t > = g ( W a a ⋅ a < t − 1 > + W a x ⋅ x < t > + b a ) a^{<t>}=g(W_{aa}⋅a^{<t−1>}+W_{ax} ⋅ x^{<t>}+ba) a<t>=g(Waa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值