吴恩达深度学习 第五课 第三周 序列模型和注意力机制


本文概要,seq2seq模型的学习包含了机器翻译和语音识别领域,此外,还有集束搜索算法(beam search)和注意力机制(attention model)

基础模型概述

当我们的输入和输出都是一个序列时,比如机器翻译,基础的一种模型是利用两个网络:编码网络(encoder network)和解码网络(decoder network)。
编码网络RNN接受原始出入并输出一个向量表达输入序列,之后解码网络接受编码网络的输出为输入,训练我们想要的输出结果,同时每次生成的输入都会传递到下一单元来预测输出。
类似的,如果我们的模型要给一张照片添加描述,可以输入一张照片,借用图片处理模型例如Alexnet输出一个包含图片特征的向量,出入到RNN中来生成图像的描述。

选择最可能的句子

seqseq机器翻译模型与语言模型十分相似的,区别在于输入处变为编码器输出的特征向量,而不是语言模型的零向量,因而我们称之为条件语言模型。

在机器翻译的结果选择上,我们没有使用贪心算法。第一点,首先我们没有使用在结果分布中随机抽取结果的方法,显然不和我们的初衷,我们想要一个最好的翻译结果而不是随机的–选取 P ( y x ) P(y|x) 的y。第二点,在选取结果时我们没有选择贪心算法,以下图为例,贪心算法会选择每一步概率最大的结果,而由于is in等常用词明显概率更大,因为贪心算法会选择第二种翻译结果,这显然会将结果带偏,我们选择的集束搜索将在下面介绍。

集束搜索(beam search)

集束搜索首先会挑选出翻译结果的第一个单词,挑选的方式是选择三个或多个最可能的单词,这里选择的数量是一个超参数–集束宽(beam width),接下来算法会针对三个词语选择第二个单词,这样我们获取了最可能的三个单词对,然后在第二个单词的基础上继续寻找第三个单词,直至输出句尾符号。这里我们采用的是三个网络副本,每个网络的第一个单词不同,所以不需要初始化网络副本。最后我们获取了三个翻译结果,选择概率最大的结果。

改进集束搜索

这里我们使用长度归一化来改进模型。我们的目的是极大化集束搜索的概率,而集束搜索的概率借助于极大似然估计可以转化为概率的乘积。而概率值都是小于1的,乘积会特别小,因为我们可以回选择取对数,log是一个增函数,因为不会影响每个翻译结果的概率大小的变化。
对于目标函数,我们还可以做一点优化,我们知道句子的长短会影响到概率,每当增加一个单词就会乘一个概率,因为模型会倾向于更少的单词来翻译,所以我们可以对目标函数再做一步归一化,即目标函数除以预测的单词数量,这样就减少了对长输出的惩罚。
在实践中,我们会给 T y T_y 添加一个指数a,当a为1,相当于完全长度归一化;当a为0,则为没有完全归一化,当a介于0到1,则介于未归一化和完全归一化之间。

集束搜索的误差分析

我们知道,误差分析和束搜索算法是相互作用,当模型出现问题,我们怎么确定是RNN(编码网络和解码网络)出现问题还是集束搜索算法的问题呢?
我们假设标准的答案是 P ( y x ) P(y|x) ,首先通过RNN网络计算标准答案的概率然后与之前的输出结果概率作比较,如下图,如果标准答案概率大于之前的结果概率,说明是集束搜索的问题;反之,如果标准答案概率小于之前的结果概率,则说明是RNN的责任更大。

机器翻译评估(bleu score)

机器翻译不像图像识别那样测量准确性就可以了,机器翻译通过blue得分,考虑的是一元词组、二元词组、三元词组等。
首先,考虑单词出现的准确度,如果一个单词出现在标准结果,那么就可能是合理,但这里我们要考虑一种特殊情况,如下,如果机器翻译的结果是7个the,准确度也为1,因而我们可以限定一个单词可以出现的最大次数,下图中我们知道the出现的最大次数为2,所以我们限定翻译结果the出现的最大次数为2,那么准确度就为 2 7 \frac{2}{7}

接下来考虑二元词组的,一是要考虑二元词组出现的次数,而是考虑不同的二元词组。

接下来我们定义一下最终的bleu得分, P n P_n 是n元数组的准确度,那么blue得分即为取平均值做指数运算,这里的BP包含了“简短惩罚”,事实上,机器翻译倾向于翻译较少的单词,这样可以提高准确度。所以这里BP是一个惩罚因子,惩罚输出过短的结果。

注意力模型直观理解

注意力模型分为两部分,一部分是特征提取(双层网络),包含了注意力权重,二是生成网络RNN。特征提取会计算隐藏状态与生成网络状态的相关性,生成注意力权重,通过权重化的隐藏特征与RNN网络的单元状态结合生成下一单元的状态。

权重的表示方法 a < t , t > a^{<t,t^{'}>} ,表示我们在生成网络的一个状态时 y ( t ) y(t) 应该在 t t^{'} 时花在a上的注意力的数量。

语音识别

CTC算法

语音输入比如10秒的语音,100赫兹,即每秒有100个样本,那么一共有1000个输入,输出可能没有这么多,因而CTC算法允许这样的输出"ttt___",算法会将没有被下划线分割的重复的字符折叠起来,而下划线用来表示特殊的空白符与空格符不同。

触发字检测(trigger word detection)

一个可用的算法是,把声频片段计算出他的生谱图特征得到特征向量,然后放入RNN中,最后定义我们的目标标签y,当出现我们设定的比如"hi siri",就把这个点的标签设为1,这种算法的问题在于构建了一个不平衡的数据集,0比1多太多了。

一种粗暴的方法是当出现目标值时,将附近的标签都设为1,增加正样本。

参考第三周 序列模型和注意力机制
Coursera吴恩达《序列模型》课程笔记

扫描二维码关注公众号,回复: 5107161 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_40548136/article/details/86544390