Beam Search、GREEDY DECODER、SAMPLING DECODER等解码器工作原理可视化

简介: Beam Search、GREEDY DECODER、SAMPLING DECODER等解码器工作原理可视化

图像标注的任务让我们可以构建和训练一个为任何给定图像生成字幕的神经网络。在设计时使用了解码器的来完成文字的生成。当我们描述了每个解码器的工作原理时,我发现当它们被可视化时,更容易理解它们。

640.png

图像标注任务流程图

与翻译模型类似,我们的图像字幕模型通过输入图像张量和特殊的句首标记(即<start>)来启动字幕生成过程。这个模型生成了我们单词的概率分布(实际上是logits)。橙色方框显示解码算法的选择,帮助我们选择使用哪个单词。然后,选择的单词和图像再次传递给模型,直到我们满足停止条件,即我们获得特殊的句子结束标记(即<STOP>)作为下一个单词,或者我们超过了预先定义的步骤数。一个步骤是将图像和单词的张量传递给字幕生成器模型,并使用解码算法选择单词。

在这篇文章中,我们关注的是橙色的盒子。帮助我们从整个词汇表的概率分布中选择单词的解码算法。

GREEDY DECODER(贪心解码器)

这是最直接的方法,我们选择的词有最高的可能性(贪婪的行动)。虽然它可以生成单词序列,但与其他解码算法相比,输出的质量往往较低。

640.gif

所以我们选择了前60个单词来可视化。另外,它导致标签在每个时间步上切换。

BEAM SEARCH(定向搜索解码器)

在贪婪解码器中,我们在每一步都考虑一个字。如果我们可以在每一步跟踪多个单词并使用它们来生成多个假设会怎样呢?

这正是定向搜索算法所做的,我们定义了每一步需要保留多少个单词(k)。该算法跟踪k个单词及其得分,每个单词都是从之前得分最高的k个单词中获得种子。分数是由到目前为止生成的假设的概率的和计算出来的。

640.png

其中t为步长,x为输入图像,y为生成的单词。停止条件与贪心搜索相同,贪心搜索假设在遇到<stop>或超出预先定义的最大步数时停止。</stop>最终的结果是一个单词树多个假设),然后选择得分最高的一个作为最终的解。

640.png

单词树结构,橙色表示最终的解

当我们使用k=1时,它的工作方式和贪婪解码器算法一样,同样会产生低质量的输出。当我们增加k时,算法开始产生更好的质量的输出,尽管在更大的k时,输出变得非常短。另外,注意增加k是计算密集型的,因为我们需要在每一步跟踪k个单词。

例如一下图片

640.jpg

使用训练好的模型后生成文字的过程

640.gif

开始和停止单词以绿色和红色突出显示,灰色文本显示该步骤或时间点的序列得分。

PURE SAMPLING DECODER(纯采样解码器)

纯采样译码器与贪婪搜索译码器非常相似,但不是从概率最高的单词中抽取,而是从整个词汇表的概率分布中随机抽取单词。纯抽样和Top-K抽样(下面)等抽样方法提供了更好的多样性,通常被认为更能生成自然语言。

640.jpg

上图的文字描述生成过程

640.gif

您可能已经注意到解码器没有在“street<stop>”处停止,这是因为我们的stop条件需要精确的“<stop>”令牌。</stop></stop>

TOP-K SAMPLING DECODER(TOP-K抽样解码器)

该方法类似于纯采样译码器,但不是使用整个概率分布,而是只对top-k个可能单词进行采样。如果我们用k=1,它和贪婪搜索是一样的如果我们用词汇表的总长度作为k,那么它可以作为纯采样解码器。下面的可视化使用与纯采样示例相同的输入图像。

640.gif

结论

这就是我在关于神经图像标题生成的文章中使用的各种解码算法的可视化。下面是最后一个示例,显示了四个解码器对同一输入图像的输出。

640.png

虽然这里生成的字幕的整体质量不如基于注意力的模式好,但我们可以看到不同的解码器对于结果的影响。

目录
相关文章
|
JSON 网络协议 数据安全/隐私保护
nps npc docker 部署 解决端口报错问题
nps npc docker 部署 解决端口报错问题
1369 0
|
存储 OLAP OLTP
漫谈OceanBase 列式存储
列式存储主要的目的有两个: 大部分OLAP查询只需要读取部分列而不是全部列数据,列式存储可以避免读取无用数据; 将同一列的数据在物理上存放在一起,能够极大地提高数据压缩率。 OLAP和OLTP OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。
6970 0
|
数据可视化 Python
神操作!用 Python 操作 xmind 绘制思维导图!
在平时的工作中当我们要总结一些知识的时候就需要一款工具来画画流程图,这里推荐 XMind 软件,用 Xmind 绘制的思维导图看起来思路清晰,那么今天的文章介绍关于思维导图的相关知识以及用 Python 如何操作 Xmind 绘制思维导图。
3123 0
神操作!用 Python 操作 xmind 绘制思维导图!
|
10月前
|
人工智能 定位技术 知识图谱
【两大核心+四轮驱动】Geo优化方案规划:避开17个AI时代获客陷阱的实战指南
于磊老师首创“两大核心+四轮驱动”Geo优化方法论,倡导人性化Geo与内容可信度,助力企业避开17大陷阱,在AI时代构建权威信源,实现获客提效与品牌升级。
489 12
|
9月前
|
数据采集 Java 调度
从10个协程到1000个协程:性能下降的背后究竟发生了什么?
本文探讨了异步程序中常见的误解“协程越多越快”,并通过一个实际的异步抓取学术论文元数据的例子来阐明这一点。文章首先解释了协程过多可能导致的效率低下的原因,包括事件循环的调度限制、网络瓶颈、代理并发限制以及Python协程切换的成本。接着,文章提供了一个使用代理、从DOAJ抓取开放论文元数据并存入SQLite数据库的完整异步代码示例,并强调了合理设置并发量的重要性。最后,文章总结了初学者在编写异步抓取程序时容易遇到的几个陷阱,并提供了相应的解决方案。
376 2
|
数据可视化 JavaScript 前端开发
代码可视化平台
这是一个代码可视化工具,旨在简化代码理解过程。用户无需额外配置,直接复制代码即可实时观看执行过程,支持前进后退和动画展示。目前支持JavaScript和Python,未来将扩展更多语言。工具提供了数组、链表、栈、队列、二叉树和哈希表的可视化,并包含辅助函数和自定义注释功能。主要局限在于仅支持单段代码,且执行步数限制为500步。[了解更多](https://staying.fun/zh)
1122 20
|
人工智能 弹性计算 Kubernetes
【云故事探索】NO.10:厦门立马耀的数字化转型之路
厦门立马耀网络科技有限公司在数字化转型中,凭借敏锐的市场洞察和技术创新,将云计算深度融合于业务。其品牌“蝉妈妈”为中小企业提供全方位数字营销解决方案,成为行业标杆。面对快速变化的市场需求,公司通过与阿里云合作,构建高可靠性计算平台,提升效率,并利用AI技术赋能客户,推动业务多元化发展,展现了云计算在企业成长中的巨大潜力。
|
jenkins 持续交付 开发工具
通过jenkins构建一个多分支的Pipeline项目
通过jenkins构建一个多分支的Pipeline项目
|
Oracle 架构师 分布式数据库
OceanBase数据库的发展历程是什么?
【8月更文挑战第11天】OceanBase数据库的发展历程是什么?
747 63