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

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

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.mzph.cn/news/746690.shtml

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

相关文章

【测试知识】业务面试问答突击版3---bug、测试用例设计

文章目录 一个完整的缺陷报告包含一个完整的测试用例包含一个完整的测试计划包含缺陷严重等级简述等价类划分法并举例简述边界值分析法逻辑覆盖针对具体场景的测试用例设计软件中存在多个分支时如何设计测试用例静态代码检查什么白盒测试是&#xff1f;常用方法是&#xff1f; …

3dmax2020模型显示黑白不稳定---模大狮模型网

如果在3ds Max 2020中显示的模型出现黑白不稳定的情况&#xff0c;可能有几个常见原因和解决方法&#xff1a; 显卡驱动问题&#xff1a; 首先检查你的显卡驱动程序是否是最新版本。过时或不兼容的显卡驱动可能导致显示问题。建议更新到最新的显卡驱动程序&#xff0c;并确保其…

JAVA泛型-泛型方法的定义和使用

请直接看原文: JAVA泛型-泛型方法的定义和使用-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 1.泛型方法的定义和语法 1.1 定义 泛型方法 是在调用方法的时候指明泛型的…

YOLOv9(3):YOLOv9损失(Loss)计算

1. 写在前面 YOLOv9的Loss计算与YOLOv8如出一辙&#xff0c;仅存在略微的差异。多说一句&#xff0c;数据的预处理和导入方式都是一样的。因此如果你已经对YOLOv8了解的比较透彻&#xff0c;那么对于YOLOv9你也只是需要多关注网络结构就可以。 YOLOv9本身也是Anchor-Free的&a…

编译esp32s3的ncnn,并运行mnist 手写数字识别

东哥科技&#xff0c;专注科技研发&#xff0c;wx交流&#xff1a;dg_i688 我的项目代码 https://github.com/cdmstrong/ncnn_on_esp32s3 下载ncnn git clone https://github.com/Tencent/ncnn.git安装idf 环境 这里直接按官网的可执行文件来就好了&#xff0c;直接安装完…

[mysql必备面试题]-mysql索引(B+ Tree )

一 B Tree 原理 1. 数据结构 B Tree 指的是 Balance Tree&#xff0c;也就是平衡树。平衡树是一颗查找树&#xff0c;并且所有叶子节点位于同一层。 B Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现&#xff0c;它具有 B Tree 的平衡性&#xff0c;并且通过顺序访问指针…

【python中处理日期和时间二】扩展内容datetime模块-pytz模块-dateutil模块

扩展内容&#xff1a;日期和时间 datetime模块&#xff1b;pytz模块&#xff1b;dateutil模块 一、 datetime模块 查看datetime模块函数&#xff1a; >>> import datetime >>> dir(datetime) [MAXYEAR, MINYEAR, UTC, __all__, __builtins__, __cached__…

2024最新国内外低代码平台大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

PTA L1-079 天梯赛的善良(C++)

天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内&#xff0c;使得每个参赛的学生都有能做出来的题目&#xff0c;并且最厉害的学生也要非常努力才有可能得到高分。 于是命题组首先将编程能力划分成了 106 个等级&#xff08;太疯狂了&#xff0c;这是假的&…

在C#中使用NModbus4通信库执行读操作

Modbus是一种工业领域内广泛使用的通信协议&#xff0c;它是一种基于主从结构的串行通信协议。NModbus4是一个开源的Modbus通信库&#xff0c;用于.NET平台&#xff0c;可以方便地在C#中执行Modbus操作。本文将介绍如何使用NModbus4通信库在C#中执行读操作&#xff0c;包括安装…

Linux下非阻塞IO实验一

一. 简介 前面文章学习了 Linux内核提供的针对应用程序阻塞与非阻塞访问设备的处理方法。文章地址如下&#xff1a; Linux内核中处理非阻塞访问的方法&#xff1a;轮询-CSDN博客 Linux内核中轮询对应于应用层的函数之一&#xff1a;poll函数-CSDN博客 Linux内核中轮询对应…

Python常用新特性记录

Python常用新特性记录 Python3.8PEP 572 &#xff1a;赋值表达式f-字符串支持 用于自动记录表达式和调试文档 Python3.9PEP 584&#xff1a;字典合并与更新运算符PEP 616&#xff1a;新增用于移除前缀和后缀的字符串方法PEP 585&#xff1a;标准多项集中的类型标注泛型 Python…

python面向对象的三大特性:封装,继承,多态

1、面向对象有哪些特性 三种&#xff1a;封装性、继承性、多态性 2、Python中的封装 在Python代码中&#xff0c;封装有两层含义&#xff1a; ① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 ② 封装可以为属性和方法添加为私有权限&#xff0c;不能直…

Midjourney新功能:角色参照指南

基本概念 角色参照&#xff08;Character Reference&#xff09;&#xff1a;这个功能允许用户在不同的图像生成中保持给定参照角色的一致性。适用模型&#xff1a;适用于Midjourney V6和Niji6型号。 功能亮点 跨风格一致性&#xff1a;可以在不同风格&#xff08;如动漫风、…

数据泄露态势(2024年2月)

监控说明&#xff1a;以下数据由零零信安0.zone安全开源情报系统提供&#xff0c;该系统监控范围包括约10万个明网、深网、暗网、匿名社交社群威胁源。在进行抽样事件分析时&#xff0c;涉及到我国的数据不会选取任何政府、安全与公共事务的事件进行分析。如遇到影响较大的伪造…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的安全帽检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;开发先进的安全帽识别系统对提升工作场所的安全性至关重要。本文详细介绍了使用深度学习技术创建此类系统的方法&#xff0c;并分享了完整的实现代码。系统采用了强大的YOLOv8算法&#xff0c;并对其与YOLOv7、YOLOv6、YOLOv5的性能进行了详细比较&#xff0c;…

Windows主机多网卡访问内外网

1&#xff1a;在实际生产环境有可能需要某台机器既能访问公司的内部网络也要能够访问外网。 2&#xff1a;首先机器要有两块网卡根据实际情况分别设置内外网的IP地址&#xff0c;掩码&#xff0c;网关&#xff0c;DNS等信息。设置完成时会出现下面的提示。 3&#xff1a;打开命…

空间计算综合指南

空间计算&#xff08;spatial computing&#xff09;是指使人类能够在三维空间中与计算机交互的一组技术。 该保护伞下的技术包括增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;。 这本综合指南将介绍有关空间计算所需了解的一切。 你将了解 AR、VR…

.NET后端返回File文件,及前端处理直接在浏览器下载

后端代码 [AllowAnonymous] public System.Web.Mvc.ActionResult ExportByteExcel(string datatab, string columnnames, string schemecode) { 返回excel。 string ReportName "ExcelTemplete" DateTime.Now.Ticks.ToString(); …

漏洞复现-红帆OA系列

漏洞复现-红帆OA GetWorkUnit.asmx存在SQL注入iOffice ioDesktopData存在SQL注入list接口存在SQL注入漏洞ioffice wssrtfile sql注入任意⽤户登录(2个)后台多处⽂件上传(7个)后台密码修改(1个)⽂件读取(2个)SQL注⼊(15个)红帆OA任意文件上传漏洞红帆HF Office系统SQL…