deeplearning.31循环序列模型

为什么选择序列模型

循环序列模型,比如循环神经网络(RNN)。在语音识别和自然语言处理有较强应用。
看一个例子,输入的是音频信号,得到输出是相对应的文字,这个输入x和输出y都是序列数据,因为x是一个按时序播放的音频片段。在这里插入图片描述
在处理情感分类时,输入数据x是序列,比如输入一段某人的评论,输出这句评论对应几星。
在这里插入图片描述
在进行视频识别时,视频分割成了很多帧,然后输出视频内的内容。这里的例子是视频内的人正在跑。
在这里插入图片描述
这些都可以认为是使用标签训练集(X,Y)进行的监督学习。

序列模型的一些符号定义

假如我们输入一段话,想建立一个能够识别句子中人名位置的序列模型。这常用于搜素引擎。该例子有九个单词组成,那么我们就使用特征集合来表示这九个单词,并且使用X ^<1>,X ^<2>,…,X ^<9>来进行索引,输出的数据y也一样用Y ^<1>,…Y ^<9>来进行索引。
在这里插入图片描述
在这里插入图片描述
最后我们还使用了Tx=9表示输入序列的长度,该例子中表示句子长度,同理Ty表示输出序列的长度。
在这里插入图片描述
X ^(i)表示第i个训练样本中的第t个元素,Tx ^(i)表示第i个训练样本的输入序列长度。同理Y ^(I)和Ty ^(i)分别表示第i个训练样本输出的第t个元素和第i个样本的输出序列长度。
具体表示句子中的单词,建立一个词典,如下是一个10000词的词典,Harry在其中第4075个位置,Potter在第6830个位置,and在第367个位置,然后使用独热编码表示,这就等于把每个x ^变成了一个向量。
在这里插入图片描述

循环神经网络

这是循环神经网络前向传播图示,每一个输入x的预测输出y都会参考前一个输入x。一开始的a<0>,是一个初始化0向量。
在这里插入图片描述
每一次层的参数计算如下,可以理解为一层神经网络有两个计算公式。分别是计算a和y的。
在这里插入图片描述
循环神经网络的损失函数,单个时间步,即在一句话中,单个单词的损失函数定义如下

在这里插入图片描述
那么整个序列的损失函数如下,把每个时间步的损失函数相加。
在这里插入图片描述
反向传播也是使用梯度下降的方法,神经网络框架会有相应的函数,调用计算即可。

语言模型

做一个语音识别系统,输入一段语音,系统识别说的是什么。例如输入的是下图第二段语音,但是还有相似的第一段发音极其相似,系统如何判定我们说的是第二段呢。
在这里插入图片描述
这里系统会给出一个概率,即为该段语音的概率。显然第二段的概率更高。
在这里插入图片描述
所以语言模型做的事就是告诉我们某段话出现的概率是多少。
构建语言模型需要的首先是一个语料库,就是一个很多的单词或者句子存储的库。然后取出一个训练样本,在这之前还需要建立一个词典,我们需要对这个句子进行独热编码,对里边的单词进行向量化的操作。最后句子的结尾需要加一个EOS,表示结束。
随后就是构建一个RNN模型。我们使用如下句子,作为 运行的样例。在这里插入图片描述
经过运算后,可能会通过一个softmax函数预测输出,那么就可能会有10000个输出,因为我们的字典中有10000个词,那么找到这些输出中概率最高的词P(Cats)。
在这里插入图片描述
然后RNN进入下一个时间步,那么我们会告诉他该步中的输入x<2>,就是前一步预测输出的y<1>,即Cats这个单词,然后该时间步同样经过softmax层进行预测。
在这里插入图片描述
所以如此循环往复就得到了最终的预测输出的句子。每一个时间步都会考虑前一步的预测。
在这里插入图片描述
单个时间步损失函数和整体序列的损失函数如下
在这里插入图片描述

新序列采样

当训练了一个序列模型后,想看看他到底学到了什么,需要进行新序列采样。下图是训练好的序列模型结构。
在这里插入图片描述
so,我们要做的是对第一个时间步进行采样,根据softmax输出进行随机的采样,softmax输出的是一些概率,如单词为a的概率P(a),单词为cat的概率P(cat),然后例如使用numpy命令np.random.choice进行采样。
在这里插入图片描述
然后进行下一个时间步的操作,这里我们要把刚刚取样得到的预测输出,放入这里的输入。比如第一个时间步取样的是the这个单词,那么第二个时间步输入就是the。然后继续利用numpy命令进行第二个时间步的采样。
在这里插入图片描述
对于字典的构成,可以有如下两种,一种是基于词汇的,一种是基于字母的,基于字母的对英文句子来说训练起来计算成本过高。
在这里插入图片描述

GRU单元(门控循环单元)

改变了RNN的隐藏层,使其可以更好的捕捉深层连接,并改善了梯度消失问题。
下图是在RNN的时间步中某一时间步中的计算激活值。
在这里插入图片描述
我们使用C表示一个记忆细胞,在某一时间步中C=a,在RNN继续执行到某一时间步时,C会发生更新。更新公式可以采取下图所示。
在这里插入图片描述
比如应用在下边句子,在预测到cat时,是单数形式,那么c=1,然后继续运行到was这一时间步时,c还为1,所以这里预测的单词是was而不是复数形式were。
在这里插入图片描述
而γu(更新门)的作用就是决定什么时候会更新这个值。γu的公式如下。
在这里插入图片描述
总结GRU门控单元,就是初始输入c=a,随后输入下一时间步的输入x,然后经过合适的权重通过tanh函数得出候选的c~,同时还通过合适的权重与公式得到γu,最后通过c的更新公式得到新的c。
在这里插入图片描述
这就是门控单元,通过γu门控来决定记忆细胞c是否要在后续的预测中进行更新。
注意:这里的c和c~,γu也可以是多维向量,如100维的向量。
完整的GRU如下图所示,其中最后一句英文句子是运行样例,γu是更新门控,γr是相关门控。
在这里插入图片描述

LSTM(长短期记忆网络)

与GRU相比,用了全新的更新门γu,遗忘门γf,输出门γo。主要的式子如下
在这里插入图片描述
用一个图来表示工作原理,这个单个时间步中的原理。
在这里插入图片描述
当多个时间步连起来后,就形成了一个完整的循环神经网络,LSTM与GRU一样都非常善于远距离连接,即类似于一句话中,发掘首尾单词之间的关系。
在这里插入图片描述

双向RNN模型(BRNN)

在命名体识别应用时,我们判断一个单词是不是人名,只看单词前部分是不够的,如下图。同一个单词在两个句子中不都是指人名的意思。
在这里插入图片描述
双向RNN(BRNN)的原理如下,我们增加一个反向连接,即绿色框代表的部分。这使得某一个预测输出,不仅仅输入了过去的信息,还输入了未来的信息。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值