【深度学习笔记】10_10 束搜索beam-search

news2025/1/17 1:06:20

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图

10.10 束搜索

上一节介绍了如何训练输入和输出均为不定长序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定长的序列。

上一节里已经提到,在准备训练数据集时,我们通常会在样本的输入序列和输出序列后面分别附上一个特殊符号"<eos>“表示序列的终止。我们在接下来的讨论中也将沿用上一节的全部数学符号。为了便于讨论,假设解码器的输出是一段文本序列。设输出文本词典 Y \mathcal{Y} Y(包含特殊符号”<eos>“)的大小为 ∣ Y ∣ \left|\mathcal{Y}\right| Y,输出序列的最大长度为 T ′ T' T。所有可能的输出序列一共有 O ( ∣ Y ∣ T ′ ) \mathcal{O}(\left|\mathcal{Y}\right|^{T'}) O(YT)种。这些输出序列中所有特殊符号”<eos>"后面的子序列将被舍弃。

10.10.1 贪婪搜索

让我们先来看一个简单的解决方案:贪婪搜索(greedy search)。对于输出序列任一时间步 t ′ t' t,我们从 ∣ Y ∣ |\mathcal{Y}| Y个词中搜索出条件概率最大的词

y t ′ = argmax ⁡ y ∈ Y P ( y ∣ y 1 , … , y t ′ − 1 , c ) y _ { t ^ { \prime } } = \underset { y \in \mathcal { Y } } { \operatorname { argmax } } P \left( y | y _ { 1 } , \ldots , y _ { t ^ { \prime } - 1 } , c \right) yt=yYargmaxP(yy1,,yt1,c)

作为输出。一旦搜索出"<eos>"符号,或者输出序列长度已经达到了最大长度 T ′ T' T,便完成输出。

我们在描述解码器时提到,基于输入序列生成输出序列的条件概率是 ∏ t ′ = 1 T ′ P ( y t ′ ∣ y 1 , … , y t ′ − 1 , c ) \prod_{t'=1}^{T'} P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \boldsymbol{c}) t=1TP(yty1,,yt1,c)。我们将该条件概率最大的输出序列称为最优输出序列。而贪婪搜索的主要问题是不能保证得到最优输出序列。

下面来看一个例子。假设输出词典里面有“A”“B”“C”和“<eos>”这4个词。图10.9中每个时间步下的4个数字分别代表了该时间步生成“A”“B”“C”和“<eos>”这4个词的条件概率。在每个时间步,贪婪搜索选取条件概率最大的词。因此,图10.9中将生成输出序列“A”“B”“C”“<eos>”。该输出序列的条件概率是 0.5 × 0.4 × 0.4 × 0.6 = 0.048 0.5\times0.4\times0.4\times0.6 = 0.048 0.5×0.4×0.4×0.6=0.048

在这里插入图片描述

图10.9 在每个时间步,贪婪搜索选取条件概率最大的词

接下来,观察图10.10演示的例子。与图10.9中不同,图10.10在时间步2中选取了条件概率第二大的词“C”。由于时间步3所基于的时间步1和2的输出子序列由图10.9中的“A”“B”变为了图10.10中的“A”“C”,图10.10中时间步3生成各个词的条件概率发生了变化。我们选取条件概率最大的词“B”。此时时间步4所基于的前3个时间步的输出子序列为“A”“C”“B”,与图10.9中的“A”“B”“C”不同。因此,图10.10中时间步4生成各个词的条件概率也与图10.9中的不同。我们发现,此时的输出序列“A”“C”“B”“<eos>”的条件概率是 0.5 × 0.3 × 0.6 × 0.6 = 0.054 0.5\times0.3\times0.6\times0.6=0.054 0.5×0.3×0.6×0.6=0.054,大于贪婪搜索得到的输出序列的条件概率。因此,贪婪搜索得到的输出序列“A”“B”“C”“<eos>”并非最优输出序列。

在这里插入图片描述

图10.10 在时间步2选取条件概率第二大的词“C”

10.10.2 穷举搜索

如果目标是得到最优输出序列,我们可以考虑穷举搜索(exhaustive search):穷举所有可能的输出序列,输出条件概率最大的序列。

虽然穷举搜索可以得到最优输出序列,但它的计算开销 O ( ∣ Y ∣ T ′ ) \mathcal{O}(\left|\mathcal{Y}\right|^{T'}) O(YT)很容易过大。例如,当 ∣ Y ∣ = 10000 |\mathcal{Y}|=10000 Y=10000 T ′ = 10 T'=10 T=10时,我们将评估 1000 0 10 = 1 0 40 10000^{10} = 10^{40} 1000010=1040个序列:这几乎不可能完成。而贪婪搜索的计算开销是 O ( ∣ Y ∣ T ′ ) \mathcal{O}(\left|\mathcal{Y}\right|T') O(YT),通常显著小于穷举搜索的计算开销。例如,当 ∣ Y ∣ = 10000 |\mathcal{Y}|=10000 Y=10000 T ′ = 10 T'=10 T=10时,我们只需评估 10000 × 10 = 1 0 5 10000\times10=10^5 10000×10=105个序列。

10.10.3 束搜索

束搜索(beam search)是对贪婪搜索的一个改进算法。它有一个束宽(beam size)超参数。我们将它设为 k k k。在时间步1时,选取当前时间步条件概率最大的 k k k个词,分别组成 k k k个候选输出序列的首词。在之后的每个时间步,基于上个时间步的 k k k个候选输出序列,从 k ∣ Y ∣ k\left|\mathcal{Y}\right| kY个可能的输出序列中选取条件概率最大的 k k k个,作为该时间步的候选输出序列。最终,我们从各个时间步的候选输出序列中筛选出包含特殊符号“<eos>”的序列,并将它们中所有特殊符号“<eos>”后面的子序列舍弃,得到最终候选输出序列的集合。

在这里插入图片描述

图10.11 束搜索的过程。束宽为2,输出序列最大长度为3。候选输出序列有A、C、AB、CE、ABD和CED

图10.11通过一个例子演示了束搜索的过程。假设输出序列的词典中只包含5个元素,即 Y = { A , B , C , D , E } \mathcal{Y} = \{A, B, C, D, E\} Y={A,B,C,D,E},且其中一个为特殊符号“<eos>”。设束搜索的束宽等于2,输出序列最大长度为3。在输出序列的时间步1时,假设条件概率 P ( y 1 ∣ c ) P(y_1 \mid \boldsymbol{c}) P(y1c)最大的2个词为 A A A C C C。我们在时间步2时将对所有的 y 2 ∈ Y y_2 \in \mathcal{Y} y2Y都分别计算 P ( y 2 ∣ A , c ) P(y_2 \mid A, \boldsymbol{c}) P(y2A,c) P ( y 2 ∣ C , c ) P(y_2 \mid C, \boldsymbol{c}) P(y2C,c),并从计算出的10个条件概率中取最大的2个,假设为 P ( B ∣ A , c ) P(B \mid A, \boldsymbol{c}) P(BA,c) P ( E ∣ C , c ) P(E \mid C, \boldsymbol{c}) P(EC,c)。那么,我们在时间步3时将对所有的 y 3 ∈ Y y_3 \in \mathcal{Y} y3Y都分别计算 P ( y 3 ∣ A , B , c ) P(y_3 \mid A, B, \boldsymbol{c}) P(y3A,B,c) P ( y 3 ∣ C , E , c ) P(y_3 \mid C, E, \boldsymbol{c}) P(y3C,E,c),并从计算出的10个条件概率中取最大的2个,假设为 P ( D ∣ A , B , c ) P(D \mid A, B, \boldsymbol{c}) P(DA,B,c) P ( D ∣ C , E , c ) P(D \mid C, E, \boldsymbol{c}) P(DC,E,c)。如此一来,我们得到6个候选输出序列:(1) A A A;(2) C C C;(3) A A A B B B;(4) C C C E E E;(5) A A A B B B D D D和(6) C C C E E E D D D。接下来,我们将根据这6个序列得出最终候选输出序列的集合。

在最终候选输出序列的集合中,我们取以下分数最高的序列作为输出序列:

1 L α log ⁡ P ( y 1 , … , y L ) = 1 L α ∑ t ′ = 1 L log ⁡ P ( y t ′ ∣ y 1 , … , y t ′ − 1 , c ) , \frac{1}{L^\alpha} \log P(y_1, \ldots, y_{L}) = \frac{1}{L^\alpha} \sum_{t'=1}^L \log P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \boldsymbol{c}), Lα1logP(y1,,yL)=Lα1t=1LlogP(yty1,,yt1,c),

其中 L L L为最终候选序列长度, α \alpha α一般可选为0.75。分母上的 L α L^\alpha Lα是为了惩罚较长序列在以上分数中较多的对数相加项。分析可知,束搜索的计算开销为 O ( k ∣ Y ∣ T ′ ) \mathcal{O}(k\left|\mathcal{Y}\right|T') O(kYT)。这介于贪婪搜索和穷举搜索的计算开销之间。此外,贪婪搜索可看作是束宽为1的束搜索。束搜索通过灵活的束宽 k k k来权衡计算开销和搜索质量。

小结

  • 预测不定长序列的方法包括贪婪搜索、穷举搜索和束搜索。
  • 束搜索通过灵活的束宽来权衡计算开销和搜索质量。

注:本节与原书基本相同,原书传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1519026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次Spring事务失效的发现与解决过程

一、事情起因是这样的 首先&#xff0c;我们是使用Spring mybatis 进行开发。 某功能在测试环境看到报错日志&#xff0c; 但是数据库里面的数据发生了变化&#xff0c;没有回滚。 执行数据库update 操作的方法上明确有 Transactional(rollbackFor Exception.class)的注解。…

使用nuclei扩充自己的武器库-nuclei3 sdk开发指南

一、nuclei是什么 Nuclei 是一个快速、灵活、可扩展的开源漏洞扫描工具&#xff0c;用于发现 Web 应用程序中的安全问题。它允许安全研究人员和渗透测试人员轻松地定义和执行定制的漏洞扫描任务。 Nuclei 使用模板来定义漏洞扫描任务。这些模板是基于 YAML 格式的&#xff0c…

什么是MVC三层结构

1.MVC&#xff08;三层结构&#xff09; MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件设计模式&#xff0c;用于将应用程序的逻辑和界面分离成三个不同的组件。每个组件负责特定的任务&#xff0c;从而提高代码的可维护性和可扩展性。 以前的模式。 遇到…

kettle 9.4和Pentoho 9.4下载及安装方法简介

kettle 9.4和Pentoho 9.4下载及安装方法简介 下载地址&#xff1a; https://sourceforge.net/projects/pentaho/files/ 下载步骤&#xff1a; #------------- 一、点击选项卡&#xff1a;summary/ 二、点击第一行链接 https://www.hitachivantara.com/en-us/products/pentaho…

姿态旋转的哥氏定理以及速度微分的推导

姿态旋转中涉及到坐标系的转换&#xff0c;在有相对旋转的两个坐标系中观察一个向量的变化&#xff0c;用到了哥氏定理。 例如在i系中观察e系下的运动&#xff0c;则 哥氏定理的公式 wie是e相对于i的角运动 注意符号i在前e在后。 wie是e相对于i的角运动 注意符号i在前e在…

WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述

一、WPS简介 WRF 预处理系统 (WRF Pre-Processing System&#xff0c;WPS) &#xff0c;集成了基于Fortran和C编写的程序&#xff0c;这些程序主要用于处理输入到real.exe的数据。WPS主要有三个程序和一些辅助程序。 二、各程序介绍 主要的程序为geogrid.exe、ungrib.exe、met…

一篇文章带你了解低保真与高保真原型图区别

在原型设计中&#xff0c;低保真原型和高保真原型的区别主要体现在细节和功能上。那么我们在设计原型的时候是用低保真原型还是高保真原型呢&#xff1f;两者最好的使用场景是什么&#xff1f;对此&#xff0c;即时设计做了相应的分析。让我们来看看&#xff01; 1、低保真原型…

[蓝桥杯]-最大的通过数-CPP-二分查找、前缀和

目录 一、题目描述&#xff1a; 二、整体思路&#xff1a; 三、代码&#xff1a; 一、题目描述&#xff1a; 二、整体思路&#xff1a; 首先要知道不是他们同时选择序号一样的关卡通关&#xff0c;而是两人同时进行两个入口闯关。就是说两条通道存在相同关卡编号的的关卡被通…

3冠达成!原知因制药荣获2024年度JMR消费者评选三大No.1

近日&#xff0c;日本调查机构&#xff08;JMR&#xff09;公布了2024年度公众对品牌形象的调查结果&#xff0c;除了人们熟知的资生堂、CPB、POLA、小林制药、DHC等品牌依然获得不错的口碑外&#xff0c;日本高端健康品牌原知因制药凭借优秀的产品实力及良好的社会口碑&#x…

Python新手必学:输入输出全攻略

初学Python编程时&#xff0c;其中一个最基础、也是最重要的部分就是如何处理输入和输出。无论是简单的用户输入&#xff0c;还是程序输出结果&#xff0c;都很重要。现在&#xff0c;我们将一起学习Python输入输出的各种技巧和方法&#xff0c;让你在编写代码时得心应手。 目…

HTML5:七天学会基础动画网页11

CSS3动画 CSS3过渡的基本用法: CSS3过渡是元素从一种样式逐渐改变为另一种样式的效果。 过渡属性-transition 值与说明 transition-property 必需&#xff0c;指定CSS属性的name&#xff0c;transition效果即哪个属性发生过渡。 transition-duration 必需&#xff0c;t…

YOLOv9改进策略:注意力机制 |通道注意力和空间注意力CBAM | GAM超越CBAM,不计成本提高精度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;通道注意力和空间注意力CBAM&#xff0c;全新注意力GAM&#xff1a;超越CBAM&#xff0c;不计成本提高精度 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️…

LeetCode2115. 从给定原材料中找到所有可以做出的菜

拓扑排序 题面 题目链接&#xff1a;2115. 从给定原材料中找到所有可以做出的菜 - 力扣&#xff08;LeetCode&#xff09; 你有 n 道不同菜的信息。给你一个字符串数组 recipes 和一个二维字符串数组 ingredients 。第 i 道菜的名字为 recipes[i] &#xff0c;如果你有它 所有…

openstack(T)启动实例状态为错误,如何解决

---基本服务得是正常的 ---1.在web界面看是什么错误 点击你的实例名称&#xff0c;在概况里面去查看 当时我的error &#xff1a;编码500 消息 No valid host was found. 错误原因 1&#xff1a;资源不足 2&#xff1a;未开启虚拟机cpu虚拟化 解决&#xff1a; 1.资源不…

Element-Plus: Select组件实现滚动分页加载

Element-Plus的select组件并没有自带滚动分页加载的功能&#xff0c;其虽然提供了自定义下拉菜单的底部的方式可以自定义上一页及下一页操作按钮的方式进行分页加载切换&#xff1a; 但如果不想通过点击分页按钮的方式&#xff0c;利用滚动触底进行下一页加载的话&#xff0c;…

Arrays对象数组排序 --java学习笔记

假设有四个学生对象&#xff1a; name:"小明",height:168.8,age:22 name:"小红",height:178.5,age:20 name:"小智",height:160.1,age:21 name:"小白",height:230.6,age:22 现在需要按身高对他们进行排序 对象进行排序&#xff0c;默…

19.ADC模数转换器知识点+AD单通道AD多通道应用程序示例

0. 江协科技/江科大-STM32标准库开发-各章节详细笔记-查阅传送门_江协科技stm32笔记-CSDN博客文章浏览阅读2.9k次&#xff0c;点赞44次&#xff0c;收藏128次。江协科技/江科大-STM32标准库开发-各章节详细笔记-传送门至各个章节笔记。基本上课程讲的每句都详细记录&#xff0c…

修改 MySQL update_time 默认值的坑

由于按规范需要对 update_time 字段需要对它做默认值的设置 现在有一个原始的表是这样的 CREATE TABLE test_up (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,update_time datetime default null COMMENT 操作时间,PRIMARY KEY (id) ) ENGINEInnoDB DEF…

xss——pdfxss,mxss,uxss,flashxss

uxss&#xff08;但是需要很低的版本才可以使用&#xff09;&#xff08;但是csdn也会有过滤&#xff09; 浏览器插件漏洞 搜索这个跨站语句&#xff0c;然后用翻译功能&#xff0c;它会触发跨站、 测试的时候可以去不断的测试它的所有功能&#xff0c;看也没有触发跨站 flas…

C语言笔记:控制流

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a;ACM金牌带你零基础直达C语言精通 你也可以选择购买『船说系列课程-年度会员』产品『船票』&#xff0c;畅享一年内无限制学习已上线的所有船说系列课程&#xff1a;船票购…