吴恩达深度学习 第五课 第三周 序列模型和注意力机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了吴恩达深度学习 第五课 第三周 序列模型和注意力机制相关的知识,希望对你有一定的参考价值。
文章目录
- 基础模型概述
- 选择最可能的句子
- 集束搜索(beam search)
- 改进集束搜索
- 集束搜索的误差分析
- 机器翻译评估(bleu score)
- 注意力模型直观理解
- 语音识别
- CTC算法
- 触发字检测(trigger word detection)
本文概要,seq2seq模型的学习包含了机器翻译和语音识别领域,此外,还有集束搜索算法(beam search)和注意力机制(attention model)
基础模型概述
当我们的输入和输出都是一个序列时,比如机器翻译,基础的一种模型是利用两个网络:编码网络(encoder network)和解码网络(decoder network)。
编码网络RNN接受原始出入并输出一个向量表达输入序列,之后解码网络接受编码网络的输出为输入,训练我们想要的输出结果,同时每次生成的输入都会传递到下一单元来预测输出。
类似的,如果我们的模型要给一张照片添加描述,可以输入一张照片,借用图片处理模型例如Alexnet输出一个包含图片特征的向量,出入到RNN中来生成图像的描述。
选择最可能的句子
seqseq机器翻译模型与语言模型十分相似的,区别在于输入处变为编码器输出的特征向量,而不是语言模型的零向量,因而我们称之为条件语言模型。
在机器翻译的结果选择上,我们没有使用贪心算法。第一点,首先我们没有使用在结果分布中随机抽取结果的方法,显然不和我们的初衷,我们想要一个最好的翻译结果而不是随机的–选取的y。第二点,在选取结果时我们没有选择贪心算法,以下图为例,贪心算法会选择每一步概率最大的结果,而由于is in等常用词明显概率更大,因为贪心算法会选择第二种翻译结果,这显然会将结果带偏,我们选择的集束搜索将在下面介绍。
集束搜索(beam search)
集束搜索首先会挑选出翻译结果的第一个单词,挑选的方式是选择三个或多个最可能的单词,这里选择的数量是一个超参数–集束宽(beam width),接下来算法会针对三个词语选择第二个单词,这样我们获取了最可能的三个单词对,然后在第二个单词的基础上继续寻找第三个单词,直至输出句尾符号。这里我们采用的是三个网络副本,每个网络的第一个单词不同,所以不需要初始化网络副本。最后我们获取了三个翻译结果,选择概率最大的结果。
改进集束搜索
这里我们使用长度归一化来改进模型。我们的目的是极大化集束搜索的概率,而集束搜索的概率借助于极大似然估计可以转化为概率的乘积。而概率值都是小于1的,乘积会特别小,因为我们可以回选择取对数,log是一个增函数,因为不会影响每个翻译结果的概率大小的变化。
对于目标函数,我们还可以做一点优化,我们知道句子的长短会影响到概率,每当增加一个单词就会乘一个概率,因为模型会倾向于更少的单词来翻译,所以我们可以对目标函数再做一步归一化,即目标函数除以预测的单词数量,这样就减少了对长输出的惩罚。
在实践中,我们会给添加一个指数a,当a为1,相当于完全长度归一化;当a为0,则为没有完全归一化,当a介于0到1,则介于未归一化和完全归一化之间。
集束搜索的误差分析
我们知道,误差分析和束搜索算法是相互作用,当模型出现问题,我们怎么确定是RNN(编码网络和解码网络)出现问题还是集束搜索算法的问题呢?
我们假设标准的答案是,首先通过RNN网络计算标准答案的概率然后与之前的输出结果概率作比较,如下图,如果标准答案概率大于之前的结果概率,说明是集束搜索的问题;反之,如果标准答案概率小于之前的结果概率,则说明是RNN的责任更大。
机器翻译评估(bleu score)
机器翻译不像图像识别那样测量准确性就可以了,机器翻译通过blue得分,考虑的是一元词组、二元词组、三元词组等。
首先,考虑单词出现的准确度,如果一个单词出现在标准结果,那么就可能是合理,但这里我们要考虑一种特殊情况,如下,如果机器翻译的结果是7个the,准确度也为1,因而我们可以限定一个单词可以出现的最大次数,下图中我们知道the出现的最大次数为2,所以我们限定翻译结果the出现的最大次数为2,那么准确度就为
接下来考虑二元词组的,一是要考虑二元词组出现的次数,而是考虑不同的二元词组。
接下来我们定义一下最终的bleu得分,是n元数组的准确度,那么blue得分即为取平均值做指数运算,这里的BP包含了“简短惩罚”,事实上,机器翻译倾向于翻译较少的单词,这样可以提高准确度。所以这里BP是一个惩罚因子,惩罚输出过短的结果。
注意力模型直观理解
注意力模型分为两部分,一部分是特征提取(双层网络),包含了注意力权重,二是生成网络RNN。特征提取会计算隐藏状态与生成网络状态的相关性,生成注意力权重,通过权重化的隐藏特征与RNN网络的单元状态结合生成下一单元的状态。
权重的表示方法,表示我们在生成网络的一个状态时应该在时花在a上的注意力的数量。
语音识别
CTC算法
语音输入比如10秒的语音,100赫兹,即每秒有100个样本,那么一共有1000个输入,输出可能没有这么多,因而CTC算法允许这样的输出"ttt___",算法会将没有被下划线分割的重复的字符折叠起来,而下划线用来表示特殊的空白符与空格符不同。
触发字检测(trigger word detection)
一个可用的算法是,把声频片段计算出他的生谱图特征得到特征向量,然后放入RNN中,最后定义我们的目标标签y,当出现我们设定的比如"hi siri",就把这个点的标签设为1,这种算法的问题在于构建了一个不平衡的数据集,0比1多太多了。
一种粗暴的方法是当出现目标值时,将附近的标签都设为1,增加正样本。
参考第三周 序列模型和注意力机制Coursera吴恩达《序列模型》课程笔记
以上是关于吴恩达深度学习 第五课 第三周 序列模型和注意力机制的主要内容,如果未能解决你的问题,请参考以下文章
吴恩达深度学习课程第一课 — 神经网络与深度学习 — 第三周练习
吴恩达实验(神经网络和深度学习)第一课第三周,代码和数据集,亲测可运行