怎么理解BeamSearch?

news2024/12/26 22:31:59

在大模型推理中,常会用到BeamSearch,本文就BeamSearch原理与应用理解展开讲解。在这里插入图片描述

一、BeamSearch原理

Beam Search 是一种启发式搜索算法,常用于自然语言处理(NLP)和其他需要生成序列的任务中,比如机器翻译、自动摘要和语音识别,大模型推理等。它是一种改进的贪心算法,旨在平衡计算效率与搜索质量。

基本思想
Beam Search 通过维护一个有限大小的候选集(称为“beam”),在每一步只选择最有希望的若干个候选项,从而避免了暴力搜索空间的指数级增长。简言之,Beam Search 会在每个时间步上选择最佳的“beam width”(宽度)个候选,而不是总是选择最好的单个候选。

二、工作流程

假设要生成一个序列,算法的步骤如下:

  1. 初始化:开始时,Beam Search 选择一个初始状态(比如一个空的序列)并评估其可能性。
  2. 扩展候选项:每一步,算法生成所有可能的下一个词或状态,并评估这些候选项的得分(通常通过某种概率模型来评估,如语言模型或神经网络的输出)。
  3. 选择最佳候选:然后,只保留得分最高的“beam width”个候选项,并丢弃其他候选项。这些候选项将继续向下扩展。
  4. 停止条件:直到满足某种停止条件(如生成完毕或达到最大长度)时,算法会停止,最终选择得分最高的候选序列作为结果。

三、举例说明

假设我们正在进行一个简单的语言模型任务,要生成句子“I am a student”。假设我们的候选词在每个时间步都来自一个有限的词汇表。

  1. Step 1 - 选择初始词
    我们从“I”开始生成序列。
  2. Step 2 - 选择下一个单词
    我们现在需要从“I”出发,选择下一个单词。假设当前候选词和它们的概率(或得分)如下:
    “am”(概率 = 0.6)
    “is”(概率 = 0.2)
    “was”(概率 = 0.1)
    “I”(概率 = 0.1)
    假设我们选择 Beam Width = 2,因此我们保留得分最高的 2 个候选单词:
    选择“am”(得分 0.6)
    选择“is”(得分 0.2)
  3. Step 3 - 继续生成下一个单词
    现在,我们有两个候选序列:
    “I am”
    “I is”
    对于每个序列,我们根据模型的得分选择下一个词。假设得分如下:
    对于 “I am”(从“am”继续):
    “a”(概率 = 0.5)
    “the”(概率 = 0.3)
    “an”(概率 = 0.2)
    对于 “I is”(从“is”继续):
    “am”(概率 = 0.4)
    “was”(概率 = 0.3)
    “a”(概率 = 0.2)
    我们再次选择 Beam Width = 2,所以保留概率最大的 2 个候选项:
    “I am a”(得分 0.6 × 0.5 = 0.3)
    “I am the”(得分 0.6 × 0.3 = 0.18)
    “I is am”(得分 0.2 × 0.4 = 0.08)
    “I is was”(得分 0.2 × 0.3 = 0.06)
    最终,我们选择前两个候选:
    “I am a”
    “I am the”
  4. Step 4 - 决定最后的单词
    接下来,我们继续为每个候选序列添加下一个单词:
    对于 “I am a”(从“a”继续):
    “student”(概率 = 0.7)
    “teacher”(概率 = 0.2)
    “doctor”(概率 = 0.1)
    对于 “I am the”(从“the”继续):
    “student”(概率 = 0.6)
    “man”(概率 = 0.3)
    “teacher”(概率 = 0.1)
    继续选择 Beam Width = 2,保留得分最高的两个候选:
    “I am a student”(得分 0.3 × 0.7 = 0.21)
    “I am a teacher”(得分 0.3 × 0.2 = 0.06)
    “I am the student”(得分 0.18 × 0.6 = 0.108)
    “I am the man”(得分 0.18 × 0.3 = 0.054)
    最终,我们选择最好的两个序列:
    “I am a student”
    “I am the student”
    Step 5 - 完成生成

假设我们已经达到了序列的结束条件(比如长度或特殊的结束符),最后选择 “I am a student” 作为最优序列。

如果当 Beam Width = 2,但是有三个概率相等的候选时,我们通常会遇到一个需要做出决策的情况。Beam Search 是基于保留每步得分最好的候选项来进行的,但是如果有多个候选项的概率相同,可以选择随机从这些候选中选出若干个,或者可以选择 按顺序 排列所有候选项,并选出得分相同的前 N 个候选项。

停止生成的条件:

  1. 生成的序列有一个预设的最大长度,超过这个长度就停止生成。
  2. 在生成句子的任务中,如果当前候选序列已经包含 ,而该序列的后续扩展也不会再生成其他单词,那么就可以提前停止对该序列的扩展,直接输出该序列

四、与贪心算法的对比

  • 贪心算法:每一步只选择当前最优的选项,不回溯或考虑全局优化。
  • Beam Search:每一步选择多个候选项(由宽度控制),并且可以保持多个候选状态,在后续步骤中进行进一步扩展,从而能够考虑更多的可能性。

如果我们使用 贪心算法,每一步只选择最有可能的下一个词。假设我们在第一步选择 “am” 后,接下来我们会选择“a”作为下一个单词,然后选择“student”。但是这种方法可能会导致不理想的结果,而 Beam Search 则能够考虑多个可能性,最终找到最佳序列。

五、Beam Search 的优缺点

  • 优点:
    比贪心算法更好:能够考虑多个候选项,避免早期陷入局部最优解。
    计算效率较高:相对于暴力搜索,Beam Search 大大减少了搜索空间。
  • 缺点:
    计算开销较大:随着 Beam Width 增大,计算的复杂度也会增加。
    不能保证全局最优解:由于只保留固定数量的候选项,可能会错过一些较优的解。

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

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

相关文章

shodan2-批量查找CVE-2019-0708漏洞

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

SciPy Optimize和 CVXPY对比

CVXPY和SciPy Optimize模块都是在Python中解决优化问题的强大工具,但它们是为不同类型的问题而设计的,具有不同的优点和局限性。本文对比两者的优缺点,阐述各自的应用场景,同时解释常用求解器,并给出实际示例进行说明。…

DevOps工程技术价值流:GitLab源码管理与提交流水线实践

在当今快速迭代的软件开发环境中,DevOps(开发运维一体化)已经成为提升软件交付效率和质量的关键。而GitLab,作为一个全面的开源DevOps平台,不仅提供了强大的版本控制功能,还集成了持续集成/持续交付(CI/CD)…

Android Studio 右侧工具栏 Gradle 不显示 Task 列表

问题: android studio 4.2.1版本更新以后AS右侧工具栏Gradle Task列表不显示,这里需要手动去设置 解决办法: android studio 2024.2.1 Patch 2版本以前的版本设置:依次打开 File -> Settings -> Experimental 选项&#x…

Linux详解:文件权限

文章目录 前言Linux文件权限基础文件成员与三组权限字符 权限的修改修改文件所有者总结 前言 在浩瀚的操作系统世界中,Linux以其开源、灵活和强大的特性,成为了服务器、开发环境以及众多个人用户的首选。而在Linux的众多特性中,文件权限机制…

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习还是公司研发需求,都相当合适,包您满…

Spark常问面试题---项目总结

一、数据清洗,你都清洗什么?或者说 ETL 你是怎么做的? 我在这个项目主要清洗的式日志数据,日志数据传过来的json格式 去除掉无用的字段,过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据&#xff…

数据结构4——栈和队列

目录 1.栈 1.1.栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2队列的实现 1.栈 1.1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为…

限定符使用

正则表达式的元字符一次一般只能匹配一个位置或一个字符,如果想要匹配零个、一个或多个字符时,则需要使用限定符。限定符用于指定允许特定字符或字符集自身重复出现的次数。常用限定符如下: <asp:TextBox [^>]> 正则表达式字符类[^>]匹配除过“>”之外的任何字…

【Python】Selenium模拟在输入框里,一个字一个字地输入文字

我们平常在使用Selenium模拟键盘输入内容&#xff0c;常用的是用send_keys来在输入框上输入字&#xff1a; 基本的输入方式&#xff1a; input_element driver.find_element(By.ID, searchBox) input_element.send_keys("我也爱你") #给骚骚的自己发个骚话不过这种…

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…

配置宝塔php curl 支持http/2 发送苹果apns消息推送

由于宝塔面板默认的php编译的curl未加入http2的支持&#xff0c;如果服务需要使用apns推送等需要http2.0的访问就会失败&#xff0c;所以重新编译php让其支持http2.0 编译方法&#xff1a; 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…

YOLOv11 NCNN安卓部署

YOLOv11 NCNN安卓部署 之前自己在验证更换relu激活函数重新训练部署模型的时候&#xff0c;在使用ncnn代码推理验证效果很好&#xff0c;但是部署到安卓上cpu模式会出现大量的错误检测框&#xff0c;现已更换会官方默认的权重 前言 YOLOv11 NCNN安卓部署 目前的帧率可以稳定…

MeterSphere接口测试提取数组及引用

实际工作中常见的使用场景&#xff1a; 1、提取数组中某个特定值&#xff1b; $.data.groups[n].name提取特定值 2、提取数组中全部值&#xff1b; $.data.groups[*].name&#xff0c;并勾选匹配多条以提取全部值 3、提取数组中的某几个特定值&#xff1b; 如提取数组中第1个和…

【数据结构】队列的概念、结构和实现详解

本文来介绍一下数据结构中的队列&#xff0c;以及如何用C语言去模拟实现。 1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。 特点&#xff1a;数据先进先出FIFO&#xff08;first in first out&#xf…

【Linux】设计文件系统(C实现)

要求&#xff1a; (1)可以实现下列几条命令 dir 列文件目录 create 创建文件 delete 删除文件 read 读文件 write 写文件 (2)列目录时要列出文件名、存取权限&#xff08;八进制&#xff09;、文件长度、时间&#xff08;创建时间&#xff0c;修改时间以及…

基于Java Springboot武汉市公交路线查询APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

单片机-- 松瀚sonix学习过程

硬件&#xff1a;松瀚sn8f5701sg、SN-LINK 3 Adapter模拟器、sn-link转接板 软件&#xff1a; keil-c51&#xff08;v9.60&#xff09;&#xff1a;建立工程&#xff0c;编辑&#xff0c;烧录程序 SN-Link_Driver for Keil C51_V3.00.005&#xff1a;安装sonix设备包和snlin…

http(请求方法,状态码,Cookie与)

目录 1.http中常见的Header(KV结构) 2.http请求方法 2.1 请求方法 2.2 telnet 2.3 网页根目录 2.3.1 概念 2.3.2 构建一个首页 2.4 GET与POST方法 2.4.1 提交参数 2.4.2 GET与POST提交参数对比 2.4.3 GET和POST对比 3.状态码 3.1 状态码分类 3.2 3XXX状态码 3.2 …

实现PDF文档加密,访问需要密码

01. 背景 今天下午老板神秘兮兮的来问我&#xff0c;能不能做个文档加密功能&#xff0c;就是那种用户下载打开需要密码才能打开的那种效果。boss都发话了&#xff0c;那必须可以。 需求&#xff1a;将 pdf 文档经过加密处理&#xff0c;客户下载pdf文档&#xff0c;打开文档需…