5.3序列模型与注意力机制

觉得有用的话,欢迎一起讨论相互学习~Follow Me

3.3 集束搜索Beam Search

  • 对于机器翻译来说,给定输入的句子,会返回一个随机的英语翻译结果,但是你想要一个最好的英语翻译结果。对于语音识别也是一样,给定一个输入的语音片段,你不会想要一个随机的文本翻译结果,你想要一个最接近愿意的翻译结果。
  • Jane visite l'Afrique en septembre 希望翻译成英文句子 Jane is visiting Africa in September
  1. 集束搜索第一步就是挑选出英文翻译句子中的第一个单词。

    1. 首先英语字典可表示为:
    2. 第一个英语翻译的单词的概率可表示为:
      \(P(y^{<1>}|x)\) , 其中x表示输入的法语句子,\(y^{<1>}\)表示输出的第一个英语单词。
    3. 此步骤的结构可表示为:
    4. 贪婪算法只会挑出最可能的那个单词,然后继续,然而 集束搜索算法 会考虑多个结果, 集束搜索算法 会有一个参数B, 叫做 集束宽(beam width) 在这个例子中,设置集束宽(beam width) 为3 这表明其会一次性考虑三个候选单词。然后 集束搜索算法 会把结果存到计算机内存中,以便后面尝试使用这三个词。
    5. 过程是先将整个待翻译的句子输入到 绿色 的编码网络中,然后使用 紫色 的解码网络进行解码,结果是一个1W维的向量,用来表示第一个英文单词的概率,选择概率最大的 3个(集束宽) 单词存储在内存中。
  2. 对于第二个单词,是要在确定第一个单词的情况下进行搜索。
    1. 假设第一个单词被设置为 in 或 jane 或 september
    2. 将第一个单词 in 作为 解码器 的第一个节点的输出,并且将其作为第二个节点的输入。这样这个网络就能评估第二个词的概率了 \(P(y^{<2>}|x,"in")\)
    3. Note 在第二步中,第一个和第二个单词的联合概率是关心的重点即\(P(y^{<1>},y^{<2>}|x)\),根据概率公式,有:\(P(y^{<1>},y^{<2>}|x)=p(y^{<1>}|x)P(y^{<2>}|x,y^{<1>})\).
    4. 同样,对第一个翻译结果的其他候选词("jane, september")进行如上操作.
    5. 由于使用的 集束宽 为3 ,并且词汇表中单词的数量为 1W, 所以最终会有3W(集束宽 * 词典中词汇总量)个可能的结果
    6. 再从3W个结果中挑选出3(集束宽)个概率最大的结果
    • Note 对于第二个单词的挑选,使用三(集束宽)个不同的网络,因为每个网络的 \(y^{<1>}\) 不同。

  3. 保存已经挑选出的前两个单词与在输入为x的条件下,前两个单词的概率,同上述操作挑选出第三个词:

  4. 集束搜索通过这种方法每次找到一个词,最终 得到 Jane visits africa in september 这个句子终止在句尾符号


3.4 改进集束搜索Refinements to beam search

长度归一化 Length Normalization

取log值

  1. 集束搜索的目的是最大化下式

其中: 上式也可表示为下式 \[P(y^{<1>}y^{<2>}...y^{<T_{y}>})=P(y^{<1>}|x)P(y^{<2>}|x,y^{<1>})...P(y^{<T_{y}>}|x,y^{<1>}...,y^{<T_{y}-1>})\]

  1. 但是\(P(y^{<1>}|x)P(y^{<2>}|x,y^{<1>})...P(y^{<T_{y}>}|x,y^{<1>}...,y^{<T_{y}-1>})\)这个乘积式中的因子都是小数,其乘积会是一个十分小的数,会造成 数值下溢(numerical underflow)
  2. 为了解决这个问题 ,将最大化的乘积式取对数 ,由 **logM*N=logM+logN** 公式可得,上述需要最大化的乘积式可以转化为:

即乘积的log变成了log的求和,最大化这个log的求和值能够得到同样的结果,并且不会出现 数值下溢和四舍五入

归一化

  1. 由于\(P(y^{<1>}|x)P(y^{<2>}|x,y^{<1>})...P(y^{<T_{y}>}|x,y^{<1>}...,y^{<T_{y}-1>})\)乘积式中各个因此都是小数,所以随着翻译句子的增长,P的乘积会越来越小。而 集束搜索 的结果会选取较大的P的乘积式。这样搜索方法会不自然的偏向 更短的翻译输出 因为 短句子 的概率是由更少的小于1的数字乘积得到的。而对于乘积的 对数式 ,由于取对数后的结果是负数,要取得更大的概率值,也会偏向于 更短的翻译结果
  2. 因此将原先的公式 除以翻译后句子的总长度/翻译后句子总长度的指数(指数小于1)这样很明显的减少了对输出长的结果的惩罚

束宽选择 Beam width B

  • 束宽B越大,你考虑的选择越多,找到的句子可能越好,但是B越大,算法的计算代价越大,程序运行的也会相对较慢,因为要把更多可能的选择保存下来。
  • 束宽B越小,需要考虑的选择越少,内存占用小,程序运行越快,但是效果没有那么好。
  • 普通时候B一般选择10,工业界上也可以选择100,科研任务中需要得到最好的结果,也有将B设置为1000或3000的时候。

  • Note 相对于 深度优先搜索广度优先搜索 等算法来说,束搜索运行的更快但是不能包含保证一定能找到arg max的准确的最大值


3.4 集束搜索误差分析 Error analysis on beam search

  • 束搜索算法是一种 近似搜索算法(approximate search algorithm) , 也被称为 heuristic search algorithm 启发式搜索算法 , 其不总是输出可能性最大的句子 , 它仅记录着B为前3或者10或者100种可能。 所以束搜索方法也会出现错误。 本节将使用 误差分析 的方法对 束搜索(beam search) 进行改进,发现到底是束搜索方法出现了问题还是构造的RNN模型出现了问题导致整个系统的失效。
  • 例句 Jane visite l'Afrique en septembre ,验证集中人工翻译的正确答案为 Jane visits Africa in September 将人工翻译的结果标记为 \(y^{ * }\) ,使用训练完成的机器翻译模型翻译为 Jane visited Africa last September 并将其标记为 \(\hat{y}\)
  • 当然,机器翻译的结果不能算是好的翻译,其中机器翻译可以被分成两个部分 编码器与解码器束搜索B 。必须有方法判断出是两部分中的哪部分的问题,导致翻译系统不能很好的工作。

  • 增大束宽B 意味着在选择单词时有更好的选择 ,但是一味的增大束宽B也会带来不好的结果。
  • RNN的功能是计算P(y|x),所以可以通过比较 \(P(y^{ * }|x)\) 和 \(P(\hat{y}|x)\) 的值的大小来判断RNN和束搜索方法的好坏。

\(P(y^{ * }|x) \ge P(\hat{y}|x)\)

  • 束搜索方法选择了 \(\hat{y}\) , RNN计算P(y|x), 而束搜索方法就是找到了 \(\hat{y}\) ,使得P(y|x)达到最大。所以此时能够判断 束搜索方法不能提供一个能是P(y|x)达到最大的y值

    \(P(y^{ * }|x) \le P(\hat{y}|x)\)

  • 在例子中设定 \(y^{ * }\) 是比 \(\hat{y}\) 更好的翻译结果,不过根据RNN的概率计算 \(P(y^{ * }|x) \le P(\hat{y}|x)\) 这与P(x|y)的实际定义不符合,RNN应该判断更好的翻译结果具有更高的P(x|y)值,所以此时可以认为是RNN模型出了问题,不能对P(x|y)做出有效的判断。

    总结

  • 通过这个过程,你就能执行误差分析得出束搜索算法和RNN模型出错的比例是多少。可以通过对开发集中每一个错误例子(即翻译比人工差的情况)尝试确定这些错误,是搜索算法还是RNN模型出错。并且通过这个过程可以发现其中哪个对翻译出错的影响更大。并且只有当发现是束搜索算法引发了大量错误时,才可以决定增大集束宽度B。如果是发现RNN出了问题,你可以进行更深层次的分析来决定是需要增加正则化还是获取更多的训练数据或是尝试一个不同的网络结构

[DeeplearningAI笔记]序列模型3.3集束搜索的更多相关文章

  1. [DeeplearningAI笔记]序列模型3.2有条件的语言模型与贪心搜索的不可行性

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.2选择最可能的句子 Picking the most likely sentence condition lan ...

  2. [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.9语音辨识 Speech recognition 问题描述 对于音频片段(audio clip)x ,y生成文本 ...

  3. [DeeplearningAI笔记]序列模型3.7-3.8注意力模型

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.7注意力模型直观理解Attention model intuition 长序列问题 The problem of ...

  4. [DeeplearningAI笔记]序列模型3.6Bleu得分/机器翻译得分指标

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.6Bleu得分 在机器翻译中往往对应有多种翻译,而且同样好,此时怎样评估一个机器翻译系统是一个难题. 常见的解决 ...

  5. [DeeplearningAI笔记]序列模型3.1基本的 Seq2Seq /image to Seq

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1基础模型 [1] Sutskever I, Vinyals O, Le Q V. Sequence to Se ...

  6. [DeeplearningAI笔记]序列模型1.10-1.12LSTM/BRNN/DeepRNN

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10长短期记忆网络(Long short term memory)LSTM Hochreiter S, Schmidhu ...

  7. [DeeplearningAI笔记]序列模型1.7-1.9RNN对新序列采样/GRU门控循环神经网络

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.7对新序列采样 基于词汇进行采样模型 在训练完一个模型之后你想要知道模型学到了什么,一种非正式的方法就是进行一次新序列采 ...

  8. [DeeplearningAI笔记]序列模型1.5-1.6不同类型的循环神经网络/语言模型与序列生成

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.5不同类型的循环神经网络 上节中介绍的是 具有相同长度输入序列和输出序列的循环神经网络,但是对于很多应用\(T_{x}和 ...

  9. [DeeplearningAI笔记]序列模型1.3-1.4循环神经网络原理与反向传播公式

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.3循环神经网络模型 为什么不使用标准的神经网络 假如将九个单词组成的序列作为输入,通过普通的神经网网络输出输出序列, 在 ...

随机推荐

  1. 网易客户端授权密码,errormsg='authentication failed (method LOGIN)' exitcode=EX_NOPERM

    zabbix群里一网友在安装msmtp+mutt测试发送邮件失败 配置文件如下: /usr/local/msmtp/etc/msmtprc account default host smtp..com ...

  2. eclipse技巧-快捷键

    ctrl + 1,快速修复 ctrl + d, 快捷删除行 shift + Enter,快速移动光标到下一行 ctrl + F11,运行代码 alt + ↑/↓,快速移动行 ctrl + alt + ...

  3. “Hello World!”团队——Final发布用户使用报告

    博客内容: 1.用户体验报告表 2.用户评论截图 3.总结 一.用户体验报告表 用户使用报告 用户类别 用户姓名(化名) 性别 用户职业 使用频次 用户评论 新增用户 小小静 女 中学信息技术老师 8 ...

  4. 《Linux内核与分析》第七周

    by 21035130王川东 Linux内核如何装载和启动一个可执行程序 一. EIF文件格式: 1.ELF头部在文件的开始,描述文件的总体格式,保存了路线图,描述该文件的组织情况,即生成该文件系统的 ...

  5. 咱们的team1序章

    之前都参加了好多组织,这是第一次参加变成组织.首先要介绍团队名称了,为什么叫“咱们的team”呢,因为,我们需要每个人都认真的参与进来,只有每个人都十分投入地参与进来,这个team才能称之为一个tea ...

  6. Java中的抽象类abstract

    abstract定义抽象类 abstract定义抽象方法,只需要声明,不需要实现 包含抽象方法的类是抽象类 抽象类中可以包含抽象方法,也可以包含普通方法 抽象类不能直接创建,可以定义父类引用变量指向子 ...

  7. gitLab服务器搭建+ rundeck自动化部署

    git服务器搭建 https://blog.csdn.net/gx_1_11_real/article/details/79406427 rundeck   部署 https://blog.csdn. ...

  8. 有关rand(),srand()产生随机数学习总结

    看到夏雪冬日的有关rand()和srand()产生随机数的总结,挺好的,学习了,然后又有百度其他人的成果,系统总结一下.本文转自夏雪冬日:http://www.cnblogs.com/heyongga ...

  9. 结对项目之对PIE的测试程序

    项目要求: 构造程序,分别是: 不能触发Fault. 触发Fault,但是不能触发Error. 触发Error,但是不能产生Failure. 结对对象:陈秋月  学号:2013110404  博客地址 ...

  10. 【Biocode】产生三行的seq+01序列

    代码说明: sequence.txt与site.txt整合 如下图: sequence.txt: site.txt: 整理之后如下: 蛋白质序列中发生翻译后修饰的位置标记为“1”,其他的位置标记为“0 ...