2020-11-18 吴恩达DL学习-C5 序列模型-W3 序列模型和注意力机制(3.3 定向搜索-集束搜索,集束宽。集束宽=1,只考虑1种可能结果,就变成了贪婪搜索,不好。)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

3.3 定向搜索 Beam search

这节课中你会学到集束搜索(定向搜索,beam search)算法,上节课中我们讲了对于机器翻译来说,给定输入,比如法语句子,你不会想要输出一个随机的英语翻译结果,你想要一个最好的,最可能的英语翻译结果。对于语音识别也一样,给定一个输入的语音片段,你不会想要一个随机的文本翻译结果,你想要最好的,最接近原意的翻译结果,集束搜索就是解决这个最常用的算法。

这节课里,你会明白怎么把集束搜索算法应用到你自己的工作中,就用我们的法语句子的例子来试一下集束搜索吧。

“Jane visite l’Afrique en Septembre.”(法语句子),我们希望翻译成英语,“Jane is visiting Africa in September”.(英语句子),

step1,集束搜索算法首先做的就是挑选要输出的英语翻译中的第一个单词。

在这里插入图片描述

这里我列出了10,000个词的词汇表(上图左边里列表),为了简化问题,我们忽略大小写,所有的单词都以小写列出来。在集束搜索的第一步中我用这个网络部分,如上图,绿色是编码部分,紫色是解码部分,来评估第一个单词的概率值,给定输入序列,即法语作为输入 x x x,第一个输出 y < 1 > y^{<1>} y<1>的概率值是多少。

贪婪算法只会挑出最可能的那一个单词,然后继续。

集束搜索则会考虑多个选择,集束搜索算法会有一个参数B,叫做集束宽(beam width)。在这个例子中我把这个集束宽设成3,这样就意味着集束搜索不会只考虑一个可能结果,而是一次会考虑3个,比如对第一个单词有不同选择的可能性,最后找到in、jane、september,是英语输出的第一个单词的最可能的三个选项,然后集束搜索算法会把结果存到计算机内存里以便后面尝试用这三个词。

如果集束宽设的不一样,如果集束宽这个参数是10的话,那么我们跟踪的不仅仅3个,而是10个第一个单词的最可能的选择。所以要明白,为了执行集束搜索的第一步,你需要输入法语句子到编码网络,然后会解码这个网络,这个softmax层(上图蓝色圆圈)会输出10,000个概率值,得到这10,000个输出的概率值,取前三个存起来。

step2,找到最可能的第一个和第二个单词对

让我们看看集束搜索算法的第二步。
在这里插入图片描述

已经选出了in、jane、september作为第一个单词三个最可能的选择,集束算法接下来会针对每个第一个单词考虑第二个单词是什么,单词in后面的第二个单词可能是a或者是aaron,我就是从词汇表里把这些词列了出来,或者是列表里某个位置,september,可能是列表里的 visit,一直到字母z,最后一个单词是zulu。

为了评估第二个词的概率值,我们用下图这个NN的部分,绿色是编码部分,而对于解码部分,当决定单词in后面是什么,别忘了解码器的第一个输出 y ^ < 1 > \hat y^{<1>} y^<1>,我把 y ^ < 1 > \hat y^{<1>} y^<1>设为单词in,然后把它喂回来,这里就是单词in,因为它的目的是努力找出第一个单词是in的情况下,第二个单词是什么,这个输出就是 y ^ < 2 > \hat y^{<2>} y^<2>
在这里插入图片描述

有了这个连接 y ^ < 1 > \hat y^{<1>} y^<1>,输出的第一个单词in作为输入,这样这个网络就可以用来评估第二个单词的概率了,在给定法语句子和翻译结果的第一个单词in的情况下, P ( y ^ < 2 > ∣ x , " i n " ) P(\hat y^{<2>}|x,"in") P(y^<2>x,"in")

注意,在第二步里我们更关心的是要找到最可能的第一个和第二个单词对,所以不仅仅是第二个单词有最大的概率,而是第一个、第二个单词对有最大的概率( P ( y ^ < 1 > , y ^ < 2 > ∣ x ) P(\hat y^{<1>},\hat y^{<2>}|x) P(y^<1>,y^<2>x))。按照条件概率的准则,这个可以表示成第一个单词的概率( P ( y ^ < 1 > ∣ x ) P(\hat y^{<1>}|x) P(y^<1>x))乘以第二个单词的概率( P ( y ^ < 2 > ∣ x , y ^ < 1 > ) P(\hat y^{<2>}|x,\hat y^{<1>}) P(y^<2>x,y^<1>)),这个可以从上图NN部分里得到( P ( y ^ < 2 > ∣ x , " i n " ) P(\hat y^{<2>}|x,"in") P(y^<2>x,"in"))。
在这里插入图片描述

对于已经选择的in、jane、september这三个单词,你可以先保存这个概率值( P ( y ^ < 1 > ∣ x ) P(\hat y^{<1>}|x) P(y^<1>x)),然后再乘以第二个概率值( P ( y ^ < 2 > ∣ x , y ^ < 1 > ) P(\hat y^{<2>}|x,\hat y^{<1>}) P(y^<2>x,y^<1>))就得到了第一个和第二个单词对的概率( P ( y ^ < 1 > , y ^ < 2 > ∣ x ) P(\hat y^{<1>},\hat y^{<2>}|x) P(y^<1>,y^<2>x))。
在这里插入图片描述

现在你已经知道在第一个单词是in的情况下如何评估第二个单词的概率,现在第一个单词是jane,道理一样,句子可能是"jane a"、“jane aaron”,等等到"jane is"、"jane visits"等等。你会用这个新的网络部分(如上图),我在这里画一条线,代表从 y ^ < 1 > \hat y^{<1>} y^<1>,即jane, y ^ < 1 > \hat y^{<1>} y^<1>连接jane,那么这个网络部分就可以告诉你给定输入 x x x和第一个词是jane下,第二个单词 y ^ < 2 > \hat y^{<2>} y^<2>的概率了,和上面一样,你可以乘以 P ( y ^ < 1 > ∣ x ) P(\hat y^{<1>}|x) P(y^<1>x)得到 P ( y ^ < 1 > , y ^ < 2 > ∣ x ) P(\hat y^{<1>},\hat y^{<2>}|x) P(y^<1>,y^<2>x)
在这里插入图片描述

针对第二个单词所有10,000个不同的选择,最后对于单词september也一样,从单词a到单词zulu,用这个网络部分,我把它画在这里。来看看如果第一个单词是september,第二个单词最可能是什么。
在这里插入图片描述

所以对于集束搜索的第二步,由于我们一直用的集束宽为3,并且词汇表里有10,000个单词,那么最终我们会有3乘以10,000也就是30,000个可能的结果,因为这里(上图step2右上)是10,000,这里(上图上图step2右中)是10,000,这里(上图step2右下)是10,000,就是集束宽乘以词汇表大小,你要做的就是评估这30,000个选择。按照第一个词和第二个词的概率 P ( y ^ < 1 > , y ^ < 2 > ∣ x ) P(\hat y^{<1>},\hat y^{<2>}|x) P(y^<1>,y^<2>x),然后选出前三个可能性,这样又减少了这30,000个可能性,30,000个可能性又变成了3个,减少到集束宽的大小。

假如这30,000个选择里最可能的是“in September”(下图红圈所示)和“jane is”(下图红圈所示),以及“jane visits”(下图红圈所示),画的有点乱,但这就是这30,000个选择里最可能的三个结果,集束搜索算法会保存这些结果,然后用于下一次集束搜索。
在这里插入图片描述

注意一件事情,如果集束搜索找到了第一个和第二个单词对最可能的三个选择是“in September”或者“jane is”或者“jane visits”,这就意味着我们去掉了september作为英语翻译结果的第一个单词的选择,所以我们的第一个单词现在减少到了两个可能结果,但是我们的集束宽是3,所以还是有 y ^ < 1 > \hat y^{<1>} y^<1> y ^ < 2 > \hat y^{<2>} y^<2>对的三个选择。
在这里插入图片描述

在我们进入集束搜索的第三步之前,我还想提醒一下因为我们的集束宽等于3, B = 3 B=3 B=3,每一步我们都复制3个,同样的这种网络来评估部分句子和最后的结果,由于集束宽等于3,我们有三个网络副本(上图所示),每个网络的第一个单词不同(本例中为in,jane和steptember),而这三个网络可以高效地评估第二个单词所有的30,000个选择(上图左边3个黄色圆圈)。所以不需要初始化30,000个网络副本,只需要使用3个网络的副本就可以快速的评估softmax的输出,即 y ^ < 2 > \hat y^{<2>} y^<2>的10,000个结果。

Step3,根据step2得到的前2个单词组合,考虑第三个单词是什么

让我们快速解释一下集束搜索的下一步,前面说过前两个单词最可能的选择是“in September”和“jane is”以及“jane visits”,对于每一对单词我们应该保存起来,给定输入 x x x,即法语句子作为 x x x的情况下, y ^ < 1 > \hat y^{<1>} y^<1> y ^ < 2 > \hat y^{<2>} y^<2>的概率值和前面一样, P ( y ^ < 1 > , y ^ < 2 > ∣ x ) P(\hat y^{<1>},\hat y^{<2>}|x) P(y^<1>,y^<2>x),现在我们考虑第三个单词是什么。
在这里插入图片描述

可以是“in September a”,可以是“in September aaron”,一直到“in September zulu”。为了评估第三个单词可能的选择,我们用这个网络部分,第一单词是in(上图编号1所示),第二个单词是september(上图编号2所示),所以这个网络部分可以用来评估第三个单词的概率, P ( y ^ < 3 > ∣ x , " i n s e p t e m b e r " ) P(\hat y^{<3>}|x,"in september") P(y^<3>x,"inseptember"),在给定输入 x x x的法语句子和给定的英语输出的前两个单词“in September”情况下。
在这里插入图片描述

对于第二个片段来说也一样,就像这样一样,对于“jane visits”也一样,然后集束搜索还是会挑选出针对前三个词的三个最可能的选择,可能是“in september jane”(上图红色圆圈所示),“Jane is visiting”也很有可能(上图红色圆圈所示),也很可能是“Jane visits Africa”(上图红色圆圈所示)。

Step4,再加一个单词继续搜索

在这里插入图片描述

然后继续,接着进行集束搜索的第四步,再加一个单词继续,最终这个过程的输出一次增加一个单词,集束搜索最终会找到“Jane visits africa in september”这个句子,终止在句尾符号,用这种符号的系统非常常见,它们会发现这是最有可能输出的一个英语句子。

在本周的练习中,你会看到更多的执行细节,同时,你会运用到这个集束算法,在集束宽为3时,集束搜索一次只考虑3个可能结果。

注意:如果集束宽等于1,只考虑1种可能结果,这实际上就变成了贪婪搜索算法,上节课里我们已经讨论过了。但是如果同时考虑多个,可能的结果比如3个,10个或者其他的个数,集束搜索通常会找到比贪婪搜索更好的输出结果。

你已经了解集束搜索是如何工作的了,事实上还有一些额外的提示和技巧的改进能够使集束算法更高效,我们在下一节课中一探究竟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值