当前位置: 首页 > news >正文

【机器学习】BeamSearch算法

BeamSearch原理

Beam Search 是一种启发式搜索算法,常用于自然语言处理和其他需要生成序列的任务中,比如机器翻译、自动摘要和语音识别,大模型推理等。它是一种改进的贪心算法,旨在平衡计算效率与搜索质量。相对Greedy search扩大了搜索空间,但远远不及穷举搜索指数级的搜索空间,是二者的一个折中方案。Greedy search 可以看做是 beam size = 1时的 beam search,即每一步都选概率排名Top-1的token,一条路走到黑。

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

Beam Search有一个超参数beam size(束宽),设为k。第一个时间步长,选取当前条件概率最大的k个词,当做候选输出序列的第一个词。之后的每个时间步长,基于上个步长的输出序列,挑选出所有组合中条件概率最大的k个,作为该时间步长下的候选输出序列。始终保持k个候选。最后从k个候选中挑出最优的。

算法流程

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

初始化:开始时,Beam Search 选择一个初始状态(比如一个空的序列)并评估其可能性。

扩展候选项:每一步,算法生成所有可能的下一个词或状态,并评估这些候选项的得分(通常通过某种概率模型来评估,如语言模型或神经网络的输出)。

选择最佳候选:然后,只保留得分最高的“beam width”个候选项,并丢弃其他候选项。这些候选项将继续向下扩展。

停止条件:直到满足某种停止条件(如生成完毕或达到最大长度)时,算法会停止,最终选择得分最高的候选序列作为结果。

Beam Search 是基于保留每步得分最好的候选项来进行的,但是如果有多个候选项的概率相同,可以选择随机从这些候选中选出若干个,或者可以选择 按顺序 排列所有候选项,并选出得分相同的前 N 个候选项。

BeamSearch的优缺点

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

参考文献

【CSDN】怎么理解BeamSearch?

【知乎】如何通俗的理解beam search?

http://www.lryc.cn/news/583163.html

相关文章:

  • 华为OD机试_2025 B卷_观看文艺汇演问题(Python,100分)(附详细解题思路)
  • 七牛云C++开发面试题及参考答案
  • Vue 3 中父子组件双向绑定的 4 种方式
  • mysql互为主从失效,重新同步
  • qml加载html以及交互
  • HarmonyOS中各种动画的使用介绍
  • C语言extern的用法(非常详细,通俗易懂)
  • 〔从零搭建〕数据湖平台部署指南
  • 17.Spring Boot的Bean详解(新手版)
  • OpenCV颜色矩哈希算法------cv::img_hash::ColorMomentHash
  • STM32-待机唤醒实验
  • [Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
  • User手机上如何抓取界面的布局uiautomatorviewer
  • 【机器人】Aether 多任务世界模型 | 4D动态重建 | 视频预测 | 视觉规划
  • 速卖通跨境运营破局:亚矩阵云手机如何用“本地化黑科技”撬动俄罗斯市场25%客单价增长
  • React 编译器与性能优化:告别手动 Memoization
  • 开始读 PostgreSQL 16 Administration Cookbook
  • 苍穹外卖项目日记(day04)
  • 【Netty+WebSocket详解】WebSocket全双工通信与Netty的高效结合与实战
  • 冷冻电镜重构的GPU加速破局:从Relion到CryoSPARC的并行重构算法
  • 《重构项目》基于Apollo架构设计的项目重构方案(多种地图、多阶段、多任务、状态机管理)
  • 仓颉语言 1.0.0 升级指南:工具链适配、collection 操作重构与 Map 遍历删除避坑
  • IT系统安全刚需:绝缘故障定位系统
  • Tailwind CSS纵向滚动条设置
  • PiscTrace深蹲计数功能实现:基于 YOLO-Pose 和人体关键点分析
  • 基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(4)集成Allure报表
  • JavaScript数组方法——梳理和考点
  • SpringBoot实现动态Job实战
  • DRT-Net: Dual-Branch Rectangular Transformer with Contrastive Learning
  • 离线二维码生成器,无需网络快速制作