深度学习入门(六十六)循环神经网络——束搜索

news2024/12/22 16:24:04

深度学习入门(六十六)循环神经网络——束搜索)

  • 前言
  • 循环神经网络——束搜索
    • 课件
      • 贪心搜索
      • 穷举搜索
      • 束搜索
      • 总结
    • 教材
      • 1 贪心搜索
      • 2 穷举搜索
      • 3 束搜索
      • 4 小结

前言

核心内容来自博客链接1博客连接2希望大家多多支持作者
本文记录用,防止遗忘

循环神经网络——束搜索

课件

贪心搜索

在seq2seq中我们使用了贪心搜索来预测序列

  • 将当前时刻预测概率最大的词输出

但贪心很可能不是最优的:
在这里插入图片描述

穷举搜索

最优算法:对所有可能的序列,计算它的概率,然后选取最好的那个
如果输出字典大小为n,序列最长为T,那么我们需要考察nT个序列

  • n = 10000,T= 10: n T = 1 0 40 n^T = 10^{40} nT=1040
  • 计算上不可行

束搜索

保存最好的k个候选
在每个时刻,对每个候选新加一项(n种可能),在kn个选项中选出最好的k个
在这里插入图片描述
在这里插入图片描述

总结

束搜索在每次搜索时保存k个最好的候选

  • k =1时是贪心搜索
  • k = n时是穷举搜索

教材

在上一节中,我们逐个预测输出序列, 直到预测序列中出现特定的序列结束词元“<eos>”。 本节将首先介绍贪心搜索(greedy search)策略, 并探讨其存在的问题,然后对比其他替代策略: 穷举搜索(exhaustive search)束搜索(beam search)

在正式介绍贪心搜索之前,我们使用与上一节中 相同的数学符号定义搜索问题。 在任意时间步 t ′ t' t,解码器输出 y t ′ y_{t'} yt的概率取决于 时间步 t ′ t' t之前的输出子序列 y 1 , … , y t ′ − 1 y_1, \ldots, y_{t'-1} y1,,yt1 和对输入序列的信息进行编码得到的上下文变量 c \mathbf{c} c。 为了量化计算代价,用 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>”之后的部分(非本句) 将在实际输出中丢弃。

1 贪心搜索

首先,让我们看看一个简单的策略:贪心搜索, 该策略已用于上一节的序列预测。 对于输出序列的每一时间步, 我们都将基于贪心搜索从中找到具有最高条件概率的词元,即:
y t ′ = argmax ⁡ y ∈ Y P ( y ∣ y 1 , … , y t ′ − 1 , c ) y_{t'} = \operatorname*{argmax}_{y \in \mathcal{Y}} P(y \mid y_1, \ldots, y_{t'-1}, \mathbf{c}) yt=yYargmaxP(yy1,,yt1,c)

一旦输出序列包含了“<eos>”或者达到其最大长度 T ′ T' T,则输出完成。
在这里插入图片描述
如图中, 假设输出中有四个词元“A”“B”“C”和“<eos>”。 每个时间步下的四个数字分别表示在该时间步 生成“A”“B”“C”和“<eos>”的条件概率。 在每个时间步,贪心搜索选择具有最高条件概率的词元。 因此,将在图中 预测输出序列“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
那么贪心搜索存在的问题是什么呢? 现实中,最优序列(optimal sequence)应该是最大化 ∏ 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}, \mathbf{c}) t=1TP(yty1,,yt1,c)值的输出序列,这是基于输入序列生成输出序列的条件概率。 然而,贪心搜索无法保证得到最优序列。
在这里插入图片描述
上图中的另一个例子阐述了这个问题。 与前一张图不同,在时间步中, 我们选择图2中的词元“C”, 它具有第二高的条件概率。 由于时间步所基于的时间步和处的输出子序列已从 图1中的“A”和“B”改变为 图9.8.2中的“A”和“C”, 因此时间步处的每个词元的条件概率也在 图2中改变。 假设我们在时间步选择词元“B”, 于是当前的时间步基于前三个时间步的输出子序列“A”“C”和“B”为条件, 这与图1中的“A”“B”和“C”不同。 因此,在 图2中的时间步生成 每个词元的条件概率也不同于 图1中的条件概率。 结果, 图2中的输出序列 “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 , 这大于 图1中的贪心搜索的条件概率。 这个例子说明:贪心搜索获得的输出序列 “A”“B”“C”和“<eos>” 不一定是最佳序列。

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个序列。

3 束搜索

那么该选取哪种序列搜索策略呢? 如果精度最重要,则显然是穷举搜索。 如果计算成本最重要,则显然是贪心搜索。 而束搜索的实际应用则介于这两个极端之间。

束搜索(beam search)是贪心搜索的一个改进版本。 它有一个超参数,名为束宽(beam size)k。 在时间步1,我们选择具有最高条件概率的k个词元。 这k个词元将分别是k个候选输出序列的第一个词元。 在随后的每个时间步,基于上一时间步的k个候选输出序列, 我们将继续从 k ∣ Y ∣ k\left|\mathcal{Y}\right| kY个可能的选择中 挑出具有最高条件概率的k个候选输出序列。
在这里插入图片描述

上图演示了束搜索的过程。 假设输出的词表只包含五个元素: 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 \mathbf{c}) P(y1c)的词元是A和C。 在时间步2,我们计算所有 y 2 ∈ Y y_2 \in \mathcal{Y} y2Y为:
P ( A , y 2 ∣ c ) = P ( A ∣ c ) P ( y 2 ∣ A , c ) , P ( C , y 2 ∣ c ) = P ( C ∣ c ) P ( y 2 ∣ C , c ) , \begin{split}\begin{aligned}P(A, y_2 \mid \mathbf{c}) = P(A \mid \mathbf{c})P(y_2 \mid A, \mathbf{c}),\\ P(C, y_2 \mid \mathbf{c}) = P(C \mid \mathbf{c})P(y_2 \mid C, \mathbf{c}),\end{aligned}\end{split} P(A,y2c)=P(Ac)P(y2A,c),P(C,y2c)=P(Cc)P(y2C,c),

从这十个值中选择最大的两个, 比如 P ( A , B ∣ c ) P(A, B \mid \mathbf{c}) P(A,Bc) P ( C , E ∣ c ) P(C, E \mid \mathbf{c}) P(C,Ec)。 然后在时间步3,我们计算所有 y 3 ∈ Y y_3 \in \mathcal{Y} y3Y为:

P ( A , B , y 3 ∣ c ) = P ( A , B ∣ c ) P ( y 3 ∣ A , B , c ) , P ( C , E , y 3 ∣ c ) = P ( C , E ∣ c ) P ( y 3 ∣ C , E , c ) , \begin{split}\begin{aligned}P(A, B, y_3 \mid \mathbf{c}) = P(A, B \mid \mathbf{c})P(y_3 \mid A, B, \mathbf{c}),\\P(C, E, y_3 \mid \mathbf{c}) = P(C, E \mid \mathbf{c})P(y_3 \mid C, E, \mathbf{c}),\end{aligned}\end{split} P(A,B,y3c)=P(A,Bc)P(y3A,B,c),P(C,E,y3c)=P(C,Ec)P(y3C,E,c),

从这十个值中选择最大的两个, 即 P ( A , B , D ∣ c ) P(A, B, D \mid \mathbf{c}) P(A,B,Dc) P ( C , E , D ∣ c ) P(C, E, D \mid \mathbf{c}) P(C,E,Dc), 我们会得到六个候选输出序列: (1)A;(2)C;(3)A,B;(4)C,E;(5)A,B,D;(6)C,E,D。

最后,基于这六个序列(例如,丢弃包括“<eos>”和之后的部分), 我们获得最终候选输出序列集合。 然后我们选择其中条件概率乘积最高的序列作为输出序列:

1 L α log ⁡ P ( y 1 , … , y L ∣ c ) = 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}\mid \mathbf{c}) = \frac{1}{L^\alpha} \sum_{t'=1}^L \log P(y_{t'} \mid y_1, \ldots, y_{t'-1}, \mathbf{c}), Lα1logP(y1,,yLc)=Lα1t=1LlogP(yty1,,yt1,c),

其中 L L L是最终候选序列的长度, α \alpha α通常设置为 0.75 0.75 0.75。 因为一个较长的序列在上式的求和中会有更多的对数项, 因此分母中 L α L^\alpha Lα的用于惩罚长序列。

束搜索的计算量为 O ( k ∣ Y ∣ T ′ ) \mathcal{O}(k\left|\mathcal{Y}\right|T') O(kYT), 这个结果介于贪心搜索和穷举搜索之间。 实际上,贪心搜索可以看作一种束宽为1的特殊类型的束搜索。 通过灵活地选择束宽,束搜索可以在正确率和计算代价之间进行权衡。

4 小结

  • 序列搜索策略包括贪心搜索、穷举搜索和束搜索。

  • 贪心搜索所选取序列的计算量最小,但精度相对较低。

  • 穷举搜索所选取序列的精度最高,但计算量最大。

  • 束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡。

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

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

相关文章

MySQL批量导入数据时,为何表空间膨胀了N倍

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;叶金荣文章来源&#xff1a;GreatSQL社区原创 问题缘起 同事在客户现场利用DTS工具&#xff0c;从A实例将数据…

I2C(IIC)的仲裁、时钟同步和时钟扩展

I2C&#xff08;IIC&#xff09;的仲裁、时钟同步和时钟扩展 注意&#xff0c;CSDN以及博客园上有大量抄袭和以讹传讹的情况&#xff0c;注意鉴别。 本文参考了Philip的I2C specification以及wiki pedia&#xff0c;并且通过实践验证。 阅读本文要求你已经对i2c的协议有基本的…

调剂的事情该什么时间想?

小部分硕士考生已经开始关心调剂的事情了&#xff0c;其实这个事情还早&#xff0c;但对于考试成绩不是很理想又想要今年顺利读书的考生&#xff0c;调剂有可能会成为实现其目标的一条途径。针对这个问题小立老师针对MBA/MPA/MEM管理类硕士为大家做个前期的梳理&#xff0c;以平…

立足信创国产化运维,打造安全可控IT运维管理系统

随着国产化信创应用试点行业的不断扩大&#xff0c;应用信创产品的企事业单位逐渐增多。大多数企业均面临着陌生的国产化环境与产品&#xff0c;其使用习惯和解决问题的方式都面临改变。北京智和信通切实立足用户需求&#xff0c;提供信创运维服务。 通过“监、管、控、析、安…

监控 DolphinDB 进程对服务器资源的使用情况

本方案主要用于监控 DolphinDB 进程对服务器资源的使用情况及 DolphinDB 性能&#xff0c;如 DolphinDB 进程 CPU 占用情况、DolphinDB 进程内存占用情况、DolphinDB 进程磁盘资源使用情况等。DolphinDB 内置了相应的运维函数以获取当前节点的资源使用情况&#xff0c;Promethe…

OpenHarmony#深入浅出学习eTs#(五)eTs语言初识

本项目Gitee仓地址&#xff1a;深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) 一、eTs介绍 概述 基于TS扩展的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架&#xff0c;支持开发者高效的构建跨设备应用UI界面。 基础能力 使用基于…

实战:一个脚本实现统计linux进程相关的信息

文章目录公司任务脚本思路脚本源码及写作过程执行测试又遇到问题问题解决总结公司任务 王同学刚刚入职&#xff0c;就被安排了一项任务&#xff0c;据说还比较紧急。 公司一共有200多台服务器&#xff0c;要求王同学统计一下每台服务器的IP&#xff0c;以及各个进程的数量。 …

Spring Boot[概述、功能、快速入门]

系列文章目录 从今天开始&#xff0c;将会发关于SpringBoot的内容&#xff0c;持续更新基础篇、高级篇&#xff08;查看源码部分&#xff09;。今天是第一天&#xff0c;我们来了解SpringBoot和快速创建SpringBoot项目。 该系列文章会持续更新~ 目录 系列文章目录 前言 一…

在国内用Windows给BT做种,真是一山绕过一山缠(附解决方案)

国内的网盘&#xff0c;动不动就乱删东西&#xff0c;实在是狗的不像样子&#xff0c;于是我有了玩一下BT&#xff08;俗称 比特洪流&#xff0c;种子&#xff09;的想法。 BT技术的玩法是&#xff0c;我有一份资源&#xff0c;制作一个种子&#xff0c;然后分享这个种子&#…

【1.2】认识微服务--微服务技术对比SpringCloud

认识微服务--微服务技术对比&SpringCloud微服务结构微服务技术对比DubboSpringCloudSpringCloudAlibaba企业需求SpringCloud知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。 微服务结构 微服务这种方案需要技术框架来落地…

如何用电脑录制视频?图文教学,快速学会

​与图片相比&#xff0c;视频可以更生动地表达信息。除了记录一些应用程序的内容外&#xff0c;有时我们还需要记录电脑桌面和录制视频。如何用电脑录制视频&#xff1f;本篇文章&#xff0c;将会以图文讲解的方式&#xff0c;教你如何用电脑录制视频。 电脑录制视频1&#xf…

第001课 - 项目介绍

文章目录 项目背景项目技术和特色项目前置要求分布式基础篇,就是快速开发一个电商的后台管理系统。 后端使用的技术栈,就是springboot+springcloud+mybatis+docker作为后端的基础环境。 结合前端的vue和elementui。 使用逆向工程的方式,快速帮助我们开发出来一个后台管理…

想入行软件测试不知道往哪个职业发展方向

现在关于软件测试领域的群体就有4种情况&#xff1a;‘低管理&#xff0c;低技术’ ‘低管理&#xff0c;高技术’ ‘高管理&#xff0c;低技术’ ‘高管理&#xff0c;高技术’ 好多人对自己测试的职业发展很迷茫&#xff0c;个人觉得这篇文章不错&#xff0c;转给大家分享下&…

数据可视化④:大学生就业可视化呈现

大学生就业是和我们息息相关的话题&#xff0c;每一位大学生都关注着&#xff0c;我们常常在网络上看到有关大学生就业的话题&#xff0c;比如毕业季的一些讨论。在大一的创新创业课中&#xff0c;我们也了解到自己所学的专业和以后如何就业&#xff0c;往哪方面就业。但我们了…

高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

前端常见问题汇总(九)

一、let ,const, var 有什么区别 用let声明变量&#xff0c;它的用法类似var&#xff0c;但是let所声明的变量&#xff0c;只在所在的代码块内有效 {let a 10 var b 1}console.log(a) //: a is not definedconsole.log(b) //1let const 不存在变量提升,规范代码&#xff08…

华尔街抢Web3商标!汇丰注册元宇宙虚拟信用卡、富达抢NFT市场

全球最大投行摩根大通&#xff08;JPMorgan&#xff09;在今年2月发布了一份元宇宙研究报告&#xff0c;指出元宇宙、Web3 经济在未来每年可创造1 兆美元的商机。 与此同时&#xff0c;摩根大通于今年2月15日成为首家进入元宇宙的银行&#xff0c;其在热门元宇宙平台Decentral…

企业数据上下云高速传输解决方案

国家大力发展数字经济&#xff0c;工信部将提供一批成本低、见效快、适用性强的数字化解决方案&#xff0c;让中小企业逐步将业务数据上云&#xff0c;实现高质量发展&#xff0c;数据上云则将成为趋势。 镭速传输便是提供这种数字化解决方案的一款软件&#xff0c;使用镭速的高…

C#,大数计算类Skyiv.BigInterger和任意精度算术运算的静态类BigArithmetic的C#源代码

尊重与诚信是软件发展的根本因素。 1、多年前 Skyivben 发布的大数计算的代码 本文的代码全部来自于 银河 的文章。 博客园——Skyivbenhttps://www.cnblogs.com/skyivben/ 因为 博客园 的格式问题&#xff0c;大家用起来不方便&#xff0c;因而作者稍微整理一下&#xff0c;…

程序员必学的编辑语法——Markdown

Markdown是一种纯文本格式的标记语言。通过简单的标记语法&#xff0c;它可以使普通文本内容具有一定的格式。能使博客笔记更易阅读。 优点:因为是纯文本&#xff0c;所以只要是支持Markdown的地方都能获得一样的编辑效果&#xff0c;可以让作者摆脱排版的困扰&#xff0c;专心…