machine-learning - Beam Search 如何对 The Transformer 的输出进行操作?
问题描述
根据我的理解(如果我错了,请纠正我),Beam Search 是 BFS,它只探索最可能的选项b下的可能性“图”,其中b是光束大小。
为了计算/评分每个选项,特别是对于我正在做的 NLP 领域的工作,我们基本上通过计算令牌的概率来计算可能性的分数,给定它之前的所有内容。
这在循环架构中是有意义的,在这种架构中,您只需通过最佳b个第一个令牌运行您的解码器模型,以获得每个第一个令牌的第二个令牌的概率。最终,您会得到具有概率的序列,然后您只需选择概率最高的序列。
然而,在 Transformer 架构中,模型没有这种重复性,输出是词汇表中每个单词、序列中每个位置的整个概率(批量大小、最大序列长度、词汇大小)。我如何解释 Beam Search 的这个输出?我可以得到输入序列的编码,但是由于没有重复使用前一个输出作为下一个令牌解码的输入,我该如何计算源自最佳b的所有可能序列的概率代币?
解决方案
束搜索的工作方式与循环模型完全相同。解码器不是循环的(它是自注意力的),但它仍然是自回归的,即生成一个标记取决于先前生成的标记。
在训练时,self-attention 被屏蔽,因此只关注当前生成的单词左侧的单词。当您确实只有左侧上下文时(因为尚未生成右侧上下文),它会模拟您在推理时的设置。
唯一的区别是,在 RNN 解码器中,您只在每个波束搜索步骤中使用最后一个 RNN 状态。使用 Transformer,您始终需要保留整个假设并对整个左侧上下文进行自我注意。
推荐阅读
- firebase - Vue.js / Quasar 移动应用程序推送通知运行带有电容器和 Firebase 的 Service Worker
- loops - 使用自定义范围创建 for if 循环
- android - Android Fused Location Provider 有时会给出无效的坐标
- java - Popup 中的导航问题以及如何使用 setLocationRelativeto()
- list - 键值联合函数 ocaml
- javascript - Javascript Code Words Only After Second Click
- laravel - 如何更正 Laravel 中的 public_path()?
- php - 如何从脚本 PHP 实现搜索
- javascript - composer.render() 无法正确渲染
- system.io.directory - 系统 io 目录未找到异常