吴恩达《深度学习-序列模型》3 -- 序列模型和注意力机制

1. Basic model基础模型

例如将法语翻译成英语:
这里写图片描述
首先将法语单词逐个输入到CNN,这部分称为encoder network,而后一次输出一个英语单词,这部分称为decoder network。
这里写图片描述
CNN结合RNN解读图片内容,如上图输入一副图像,生成一句描述图像的句子。web

2.Picking the most likely sentence最优句子

这里写图片描述
如图,是语言模型和机器翻译的流程对比,能够发现语言模型和机器翻译的decoder network部分很是类似,区别是语言模型的输入为0向量,因此输出为随机的一句话的几率。而机器翻译decoder network输入是非零向量,若是将机器翻译的encoder结果输入语言模型,语言模型的输出就是有输入决定的几句话的几率,称之为条件语言模型。算法

那么在输出的几句话中,如何选择最佳的一句呢?
这里写图片描述
也就是找到能使条件几率最大的的序列,一般作法为Beam search集束搜索,下一节会讲。svg

为何不用greedy search贪婪搜索呢?
贪婪搜索就是逐词的找到其几率最大的那个词,也就是先肯定第一个词,找到其几率最大的词,而后肯定第二个、第三个直到最后一个,这样产生的结果也不错,但咱们须要的是最优序列,事实证实这样搜索一般很难找到咱们所要的最佳序列函数

3. 序列模型—-定向搜索

Beam search集束搜索:
集束搜索也是逐词肯定,可是与贪心搜索不一样的是,它设置参数B(集束宽),对每一个位置的词选择多个可能性较大的词,如B=3,那么对于第一个词来讲,选择3个可能性最大的词,存到内存。
具体作法是:
1)将法语句子输入encoder network,而后输入softmax,输出第一个词 y < 1 > 的10000(词典长度)几率值 P ( y < 1 > | x ) ,取前三个存起来。好比in,jane,september;
这里写图片描述
2)第二步是要选择第一个词和第二个词组合的可能性最大的前三个,第一个词有3种可能,对于每种可能,做为输入代入decoder的下一个单元,产生10000个几率值,也就是一共3*10000=30000个几率值 P ( y < 2 > | x , y < 1 > ) ,而后计算组合几率,公式以下:
大数据

P ( y < 1 > , y < 2 > | x ) = P ( y < 1 > | x ) P ( y < 2 > | x , y < 1 > )

选择几率最大的前3个,存入内存。
这里写图片描述
这里写图片描述

4. 序列模型—-改进定向搜索

长度归一化(length normalization)

定向搜索的目标是要最大化条件几率:
atom

a r g max y t = 1 T y P ( y < t > | x , y < 1 > y < t 1 > )

t = 1 T y P ( y < t > | x , y < 1 > y < t 1 > ) = P ( y < 1 > | x ) P ( y < 2 > | x , y < 1 > ) P ( y < t > | x , y < 1 > y < t 1 > )

这样作有两个问题:
1)因为每个几率P都是小于1的,多个小于1的数相乘,结果会愈来愈小,有可能小到超出float型的精度而没法表示,因此一般会取log,变成加法:
a r g max y t = 1 T y l o g ( P ( y < t > | x , y < 1 > y < t 1 > ) )

2)这样作一般会偏向较短的句子,由于较短的句子词少,由于每一个词的几率都是小于1的数,因此乘的数越少那么结果就越大,解决办法就是用长度进行归一化,也就是除以长度:
a r g max y 1 T y t = 1 T y l o g ( P ( y < t > | x , y < 1 > y < t 1 > ) )

在实际工做中有个实验性的作法,就是给长度 T y 添加一个参数 α
a r g max y 1 T y α t = 1 T y l o g ( P ( y < t > | x , y < 1 > y < t 1 > ) )

一般 α = 0.7 ,虽然这样所并无什么理论依据,可是这样作表现确实很好,有时候这个函数也叫作归一化的对数似然目标函数。

如何选择集束宽B

理论上B越大越好,可是B越大,计算代价也越高,对于产品系统来讲一般B=10,对于学术研究来讲B有可能取1000甚至更大的数。lua

总结:Beam search不像广度优先搜索BFS或深度优先搜索DFS等精确的搜索算法,它运算速度更快,可是不保证能找到最优结果。spa

5 定向搜索的偏差分析

这里写图片描述
如图,人类翻译为理想结果,算法翻译跟人类翻译差别较大,这时候须要分析是RNN仍是Beam搜索致使的这个问题,解决办法就是计算两个句子的几率:
-若人类翻译的几率大于算法翻译的几率,那么也就是Beam搜索并无为咱们找到最优的条件几率最大值,问题就在搜索算法;
-若人类翻译的几率小于等于算法翻译的几率,那么搜索算法没问题,就应该是RNN的问题。
以上是对单个例子来讲的,但一般咱们并不根据单个例子的结果采起行动,而是对多个偏差样本进行分析,决定主因是谁,再采起行动。
这里写图片描述
如图是对多个偏差样本分析的表格,At fault一列是缘由,B表明Beam搜索算法,R表明RNN,经过这样的分析来定位主因。.net

6. Bleu score(Bilingual evaluation understudy)双语评估替补

做用:评估文本生成系统的单一实数评估指标,如机器翻译系统、图像描述系统等
具体作法,以机器翻译为例,给定一个或多个参考,一个机器翻译结果,而后逐词元的求机器翻译结果和给定参考的匹配几率,如先求一元词的匹配几率P1:
这里写图片描述
机器翻译句子是:The cat sat on the mat,找到这句话中全部在参考语句中出现的一元词在整句话中的占比,The cat on the mat这5个一元词都在参考语句中出现了,sat没有,因此匹配几率是 5/6。
可是这里有个问题那就是若是翻译句子是: the the the the the the the,显然这句翻译很很差,但这句话的一元词匹配几率倒是P1=7/7,显然这是不合理的,因此定义一下有效词,也就是即便一个词出如今参考语句中,其有效个数不能超过其在参考语句中出现的次数,如上面的例子,the在参考语句1中出现了1词那么相对参考语句1其一元词匹配几率就是P1=1/7,换一句再试试,好比the cat the cat on the mat, the cat都出现了两次,可是在参考语句中只出现了一次,因此多出来的那次就是无效的,其匹配几率为P1=5/7。
到这里是计算了一元词的匹配几率,下面计算二元词的匹配几率P2:
这里写图片描述
如图,机器翻译的二元词有5组,其中有三组在人工翻译中出现了,那么其匹配几率就是P2=3/5;
同理能够算三元词、四元词等n元词。
计算出来以后,求均值,在这里为了防止短句子得分太高的状况,好比:The cat,其P1=P2=1,因此均值也是1,这是不合理的,因此这里增长一个参数BP惩罚因子,因此最终的计算公式为:
翻译

B P e x p ( 1 N n = 1 N P n )

其中N为最高次元组,BP的取值见下图:
这里写图片描述

在实现过程当中一般有封装好的函数,不须要本身实现。
具体参考博文https://blog.csdn.net/wwj_748/article/details/79686042

7. Attention model注意力机制

对于很长的句子,人工翻译的时候通常是一部分一部分的翻译,因此咱们也但愿RNN不要记忆太长的东西,而像人类同样一部分一部分的翻译,这样就引出了注意力机制,帮助决定将注意力放在多长的上下文上。
这里写图片描述
以法语翻译为英语为例,使用双向RNN,可是并不直接生成英语词y,而是将decoder部分增长一个注意力参数 α 而后输入到一个新的RNN层,称之为S,好比 α < 1 , 1 > 表示生成第一个词的时候应该放多少注意力在第一个法语单词上, α < 1 , 2 > 表示生成第一个词的时候应该放多少注意力在第二个法语单词上,而后再由S层生成英语。下一节讲细节。

8 注意力机制的细节

这里写图片描述
将法语单词逐个输入到RNN以后,计算前向传播和后向传播的激活值,而后用激活值乘以注意力参数,组合成context,context输入隐藏层S。
a < t > :表示输入法语单词的激活值(包括前向和后向)
α < t , t > :注意力参数,表示对于输出英语单词t应该放多少注意力在输入法语单词t’上,注意对于任意一个输出来讲,其全部的注意力参数之和应该为1,即对于第t个输出单词来讲 t α < t , t > = 1
C:context,对于第t个单词来讲其上下文环境 C < t > = t α < t , t > a < t >

接下来的问题就是注意力参数应该如何肯定呢?
这里写图片描述
为了保证 t α < t , t > = 1 咱们采用了softmax,也就是把S层上一单元的预测结果 S < t 1 > 以及全部的激活函数 a < t > 输入softmax函数,其输出为 e < t , t > 而后再根据上图公式计算注意力参数 α

9 Speech Recognition语音识别

人耳能听到声音,是由于耳朵可以捕捉气压的变化。
预处理:
生成声谱图(spectrogram),为空白输出(false blank outputs)

之前语言学家认为用音位表示音频是作语音识别最好的方式,这种人工设计在小数据时代是必须的,可是在大数据时间人们发如今end-to-end模型中音位是没必要要的,能够构建系统直接由输入的音频生成其文本。
语音识别方法:
1)用注意力模型实现语音识别
这里写图片描述
2)CTC损失函数和语音识别
这里举例用了单向的many-to-many结构的RNN,实际中更倾向于使用LSTM/GRU的双向RNN。语音识别的一个特色是输出可能会比输入少不少,CTC能够容许有空白字符输出,并且会把空白符和其之间的重复字符折叠。
这里写图片描述

10 Trigger Word Detection触发文字检测

这个功能玩过天猫精灵的伙伴应该很熟悉,只要你说“天猫精灵”,它就会被激活,不须要手动按开关,当你跟它说“安静”的时候,它就会中止一切活动进入睡眠状态
这里写图片描述 如图是解决触发文字检测的一种方法,预先设置检测标签为0,而后随着音频的输入,当检测到激活关键词的时候,就将标签置为1。