Beam Search学习

Beam Search 原理详解 本文介绍 LLM 的Beam Search的详细原理。 阅读详情

BackGround

在生成的时候,模型的输出是一个时间步一个时间步依次获得的,而且前面时间步的结果还会影响后面时间步的结果。也就是说,每一个时间步,模型给出的都是基于历史生成结果的条件概率。

  • 为了生成完整的句子,需要一个称为解码的额外动作来融合模型多个时间步的输出,而且使得最终得到的序列的每一步条件概率连乘起来最大。

在文本生成任务中,每一个时间步可能的输出种类称为字典大小(vocabulary size,我们用V表示),进行T步随机的生成可能获得的结果总共有VTV^TVT种。拿中文文本生成来说,V 的值大约是5000-6000,即常用汉字的个数。在如此大的基数下,遍历整个生成空间是不现实的。

贪心搜索

每一个时间步都取出一个条件概率最大的输出
在这里插入图片描述

Beam Search

思路也很简单,就是稍微放宽一些考察的范围。在每一个时间步,不再只保留当前分数最高的1个输出,而是保留num_beams个。当num_beams=1时集束搜索就退化成了贪心搜索。

  • 实际上是堆树的思想

在这里插入图片描述

  1. 在第一个时间步,A和C是最优的两个,因此得到了两个结果[A],[C],其他三个就被抛弃了;
  2. 第二步会基于这两个结果继续进行生成,在A这个分支可以得到5个候选人,[AA],[AB],[AC],[AD],[AE],C也同理得到5个,此时会对这10个进行统一排名,再保留最优的两个,即图中的[AB]和[CE];
  3. 第三步同理,也会从新的10个候选人里再保留最好的两个,最后得到了[ABD],[CED]两个结果。 可以发现,beam search在每一步需要考察的候选人数量是贪心搜索的num_beams倍,因此是一种牺牲时间换性能的方法。

Beam Search例子

上面的贪心搜索只选择了概率最大的一个,而集束搜索则选择了概率最大的前k个。这个k值也叫做集束宽度(Beam Width)。

  • k值等于2,则集束搜索的过程如下
    在这里插入图片描述

  • 得到第一个输出的概率分布[0.1,0.1,0.3,0.4,0.1][0.1,0.1,0.3,0.4,0.1],选择概率最大的前两个,0.3和0.4,即Je和moi。

  • 然后Je和moi分别作为Decoder的输入,得到两个概率分布,然后再选择概率和最大的前两个序列,0.3+0.8和0.4+0.6,即Je suis和moi suis。

以此类推,最终可以得到两个序列,即Je suis étudiant和moi suis étudiant,很明显前者的概率和最大,为2.2,所以这个序列是最终得到的结果。

缺点

Beam Search虽然比贪心强了不少,但还是会生成出空洞、重复、前后矛盾的文本。如果你有文本生成经验,一定对这些现象并不陌生。在语言模型还不像如今的BERT、GPT这么厉害的时候,这种现象更加明显。

  • 可以发现即使是如今最顶级的语言模型加上足够长的引文输入,还是无法得到高质量的生成结果。

论文认为这种问题是由于这种试图最大化序列条件概率的解码策略从根上就有问题。

他们对比了给定同样引文的情况下人类续写和机器生成的词用语言模型计算出来的概率。
如下图所示,人类选择的词(橙线)并不是像机器选择的(蓝线)那样总是那些条件概率最大的词。从生成的结果也可以看出,机器生成的结果有大量重复。

在这里插入图片描述

改进方法

随机采样

第一种方法是用随机采样(sampling)代替取概率最大的词。采样的依据就是解码器输出的词典中每个词的概率分布。相比于按概率“掐尖”,这样会增大所选词的范围,引入更多的随机性。当时那篇论文的结论就是这种随机采样的方法远好于Beam Search。但这其实也是有条件的,随机采样容易产生前后不一致的问题。

  • 而在开放闲聊领域,生成文本的长度都比较短,这种问题就被自然的淡化了。

temperature 随机采样

通过温度参数可以控制softmax函数产生的概率分布的平滑程度。温度参数(通常表示为T)是一个正数,用于调整指数运算的尺度。较高的温度会使得softmax函数的输出更加平滑,而较低的温度则会使得输出更加尖锐。

具体来说,给定输入向量 xxx,使用温度参数 TTT 的softmax函数的计算公式如下:

yi=exiT∑j=1nexjT,fori=1,2,...,ny_i = \frac{e^{\frac{x_i}{T}}}{\sum_{j=1}^{n} e^{\frac{x_j}{T}}}, \quad \text{for} \quad i = 1, 2, ..., nyi​=∑j=1n​eTxj​​eTxi​​​,fori=1,2,...,n

通过调整温度参数 TTT 的值,可以改变输出向量 yyy 中每个元素的相对大小。当温度参数 TTT 较高时,指数运算的结果会变得更加平均,导致概率分布更加均匀,各个类别的概率差异较小。而当温度参数 TTT 较低时,指数运算的结果会更加集中,导致概率分布更加尖锐,各个类别的概率差异较大。

需要注意的是,当温度参数 TTT 趋近于无穷大时,softmax函数的输出将趋近于均匀分布,即每个类别的概率接近于 1n\frac{1}{n}n1​,其中 nnn 是类别的数量。而当温度参数 TTT 趋近于零时,softmax函数的输出将趋近于一个独热编码,即只有最大值对应的类别的概率接近于1,其他类别的概率接近于0。

top-k采样

这个方法就是在采样前将输出的概率分布截断,取出概率最大的k个词构成一个集合,然后将这个子集词的概率再归一化,最后从新的概率分布中采样词汇。

  • 这个办法据说可以获得比Beam Search好很多的效果,但也有一个问题,就是这个k不太好选。

因为这个概率分布变化比较大,有时候可能很均匀(flat),有的时候比较集中(peaked)。对于集中的情况还好说,当分布均匀时,一个较小的k容易丢掉很多优质候选词。但如果k定的太大,这个方法又会退化回普通采样。

在这里插入图片描述

top-p采样

在这里插入图片描述

  • 累加概率,前若干个词多概率进行累加一直到达到p的阈值,然后取出前面这若干个词,重新进行概率归一化,并把剩下词的概率设为0。

惩罚重复

为了解决重复问题,还可以通过惩罚因子将出现过词的概率变小或者强制不使用重复词来解决。惩罚因子来自于同样广为流传的《CTRL: A Conditional Transformer Language Model for Controllable Generation》[2]

Beam Search的学习笔记(附代码实现) 引言 阅读详情

相关推荐

(10-4)Bellman-Ford算法的局限性与改进

Beam Search (束搜索)算法的主要优点是在保证一定搜索质量的前提下,降低了搜索的复杂度,适用于那些搜索空间较大但解空间又不太复杂的问题。Beam Search (束搜索)算法的基本思想是维护一个大小固定的束(beam),在每一步中,从当前节点扩展出若干个子节点,并根据一定的评价准则(例如启发函数)选择若干个最有希望的子节点加入束中。需要注意的是,在实现束搜索时,需要选择合适的评价准则来评估节点的质量,并动态调整束的大小以平衡搜索的广度和深度,从而提高搜索效率。否则,返回搜索过程中得到的最优解。

码农三叔 2122

什么是 Beam Search?深入理解模型生成策略

深入理解 Beam Search:原理, 示例与代码实现

Hoper-J的博客 7325

【NLP】使用 LSTM 和Beam Search进行文本自动完成

在本章中,我们不是使用数值的时间序列,而是将 RNN 应用于自然语言文本(英语)。有两种简单的方法可以做到这一点。我们可以将文本视为字符序列或单词序列。在本章中,我们将它视为一个字符序列,因为这是最简单的入门方法。在许多情况下,使用单词比使用字符更强大,在接下来的几章中将对此进行探讨。除了使用文本而不是数值之外,我们还演示了如何将模型与可变输入长度一起使用,以及如何预测多个时间步长,而不仅仅是紧跟在输入数据之后的一个步骤。

sikh_0529的博客 1304

Beam Search介绍与代码梳理(transformer、tensor2tensor)

最近在学transformer,tensor2tensor库中用了beam search(束搜索),了解了下束搜索的原理,但是实现中还是有很多细节问题需要梳理。

qq_41809534的博客 5129

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 577

Ubuntu系统全盘备份——TimeShift的安装与使用

所以如果有那天你不小心作了个大死,并且幸运到还能打开GNOME桌面和Timeshift(只要不是执行sudo rm -f /*这样的自杀程序)的时候,点击你要恢复的那个备份文件再点击Restore,经过短暂的重启后你的系统就成功恢复了。打开软件后,会有一些初始化设置,只需要一直点击 Next。根据自己电脑的内存大小决定是自动备份还是手动备份。当然,对于虚拟机用户来说,没有比在客户机直接拷贝虚拟磁盘文件更棒的方式了。点击左上角的 Create,就会执行备份操作。最下面的意思就是说不会自动备份需要手动操作。

琉璃轻纱的博客 4706

【深度学习基础】第四十六课:Beam Search

【深度学习基础】系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记。

qq_34222839的博客 840

UE5新手必看:Gameplay框架中的GameInstance与子系统实战指南(含蓝图配置)

本文为UE5新手提供了Gameplay框架中GameInstance与子系统的实战指南。文章深入解析了GameInstance作为全局数据中枢的核心作用与生命周期,并手把手演示了如何创建自定义GameInstance、构建模块化的子系统(如存档管理),以实现跨关卡的持久数据管理。指南旨在帮助开发者构建清晰、可维护的项目架构,解决数据管理混乱的常见痛点。

weixin_29015801的博客 575

Beam Search 学习

Beam Search是一种用于序列生成的启发式搜索算法,通过保留多个候选序列(束宽k)平衡搜索效率与质量。核心步骤包括迭代扩展候选序列、按得分剪枝、终止后选择最优解(可长度归一化)。相比贪婪搜索,它能减少局部最优问题,但需权衡k值选择。优化方法包括N-gram惩罚和束分组。广泛应用于机器翻译、文本生成等任务,代码实现通常基于优先级队列。

日常分享模型调优、Data Agent 搭建实操案例与行业技术思考,记录从数据预处理到智能体迭代的完整实践。沉心打磨可落地的算法方案,输出干货向技术内容,与同好一同探索数据智能与大模型进阶路径。 622

远程桌面报‘数据加密错误‘?可能是网卡设置惹的祸(附TCP校验关闭教程)

本文深入分析远程桌面连接中出现的'数据加密错误'问题,指出网卡设置可能是根本原因,并提供详细的TCP校验关闭教程。通过禁用网卡高级属性中的'TCP校验和IPv4'与'IPv4承载卸载'功能,可有效解决RDP协议与硬件加速的兼容性问题,适用于Windows和Linux系统。

view3的博客 276

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 362

【深度学习】Beam Search原理和实现、闲聊机器人优化

在进行模型评估的过程中,每次选择概率最大的token id作为输出,那么整个输出的句子的概率就是最大的么?又被称作束集搜索,是一种seq2seq中用来优化输出结果的算法(不在训练过程中使用)。例如:传统的获取解码器输出的过程中,每次只选择概率最大的那个结果,作为当前时间步的输出,等到输出结束,会发现整个句子可能并不通顺。虽然在每一个时间步上的输出确实是概率最大的,但是整体的概率不一定是最大的,经常把它叫做greedy search[贪心算法]

weixin_43923463的博客 1371

Python 爬虫实战:爬取万方数据文献信息

本文介绍了基于Python爬虫技术合规获取万方数据文献信息的方法。通过分析万方数据的请求机制与反爬策略,采用requests库结合Session维持合法会话,实现了文献标题、摘要、作者等核心元数据的提取。文章详细讲解了Token验证、动态请求构造、JSON数据解析等关键技术,并提供了完整可运行代码。同时强调严格遵守《万方数据知识服务平台用户协议》,控制请求频率,仅限学术研究使用。该方案为万方数据文献信息获取提供了标准化解决方案,支持数据清洗、结构化存储及后续分析应用。

2503_91057718的博客 2138

NLP学习16_表示学习、理解深度学习、multimodal learning、Seq2Seq model、Beam Search

表示学习 特征工程中对数据的表示就是表示学习 对用户信息的表示也是表示学习 图像分类中,每一神经层都是一个表示学习,当然最有用的是最后输出层的表示 所以说机器学习最重要的就是表示学习 好的表示具备哪些特点,然后根据这些特点会延伸出不同的模型,比如PCA、ICA、LDA 重点!! 如果你对每一种表示方法有一个很深入的了解,知道每种表示的优缺点,那我对于任何一个模型都可以沿着这个思路进行拓展,然后就对一个模型进行了创新,如果效果优于原来的模型,这就是创新点,可以将原来模型作为baseline,进而发出你的论文

TimEcho的博客 723

OSG三维渲染引擎编程学习之一:“第一章:OSG介绍” 之 “1.1 OSG简介”

第一章:OSG介绍; 1.1 OSG简介。

LuckyHanMo的博客 3223

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1183

深度学习之beam search

van的博客 833

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【深度学习】beam search过程以及优缺点

beamsearch 的过程 Beamseach 是我们在生成任务中常用的技术,它是在测试的时候使用。 过程: 假设我们的单词表大小为50,我们设置的beam_size为5 在生成第一个单词的时候,选择概率最大的5个单词,假设为a,b,c,d,e 在生成第二个单词的时候,我们将第一步生成的5个单词和单词表中的每个单词进行组合,我们将得到5*50中组合,在这些组合中选择概率最高的5个 重复上述过程,...

UESTC_201722的博客 3014

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深度学习-beam search

通过调整温度参数 T 的值,可以改变输出向量 y中每个元素的相对大小。而当温度参数T趋近于零时,softmax函数的输出将趋近于一个独热编码,即只有最大值对应的类别的概率接近于1,其他类别的概率接近于0。top k 采样 这个方法就是在采样前将输出的概率分布截断,取出概率最大的k个词构成一个集合,然后将这个子集词的概率再归一化,最后从新的概率分布中采样词汇。top p 采样 累加概率,前若干个词多概率进行累加一直到达到p的阈值,然后取出前面这若干个词,重新进行概率归一化,并把剩下词的概率设为0。

fj1024的博客 436

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

李宏毅《DLHLP》学习笔记3 - Beam Search

最近在学习语音识别的知识,发现李宏毅老师今年也出了相应的视频,相应的课件可以从下面的位置获取:http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html Beam Search只是课件中的一小部分,之所以单独提出来,是因为前几天才看过,又看李宏毅老师的视频,觉得讲的通俗易懂,值得推荐。 Youtube视频:video-1 video-2 vid...

好记性不如烂笔头 598

Beam Search是什么?一文讲清AI大模型知识点Beam Search(束搜索)

模型会根据设定的 Decode 策略,从中选择一个词输出。这个选择过程被称为: Decoding,而 BeamSearch(束搜索)就是其中一种常用的 Decode 策略。

javatiange的博客 779

深度学习:自然语言生成-集束/柱搜索beam search和随机搜索random search

http://blog.youkuaiyun.com/pipisorry/article/details/78404964 当我们训练完成一个自然语言生成模型后,需要使用这个模型生成新的语言(句子),如何生成这些句子,使用如下的方法:采样,集束搜索,随机搜索。 Greedy Search/采样Sampling 在每个阶段都选择分值最高的项。此方法经常奏效,但显然不是最优的...

皮皮blog 3万+

深度学习——词汇embedded、Beam Search

BeamSearch(集束搜索)是一种近似搜索算法,它是为了减少搜索所占用的空间和时间,所以在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。但缺点就是有可能存在潜在的最佳方案被丢弃集束宽度是一个需要设置的参数,它代表着每次保留高质量结点的数量集束搜索本质上也是贪心的思想,只不过它考虑了更多的候选搜索空间。...

胡图图不糊涂的博客 759

【机器学习】【seq2seq模型与attention机制,Beam Search】

Beam Search一张图来表示 贪心的做法:每次选择输出概率最大的那个单词,但是这样无法保证最终整体概率最大;而集束搜索每次会选择Beam个概率最大的单词(Beam表示每次选择单词数,本例中为3),然后进行下一步...直到最后会得到Beam个句子,挑出概率最大的那句就可以了。 seq2seq模型依赖于encode和decode两个模块。encoder用于对输入序列编码,decorder...

mystery_guest的博客 3976

大模型的参数解析及Beam Search算法精讲

总结没有放之四海而皆准的策略。不同的业务场景,需要使用不同的解码策略。本文讨论的Temperature、Greedy Search、Beam Search、Top-K Sampling、Top-p Sampling等都是基本解码策略。有时候,基于不同的业务场景,需要将这些策略混合起来使用,例如通过top-k&top-p&Temperature等进行联合采样,才能达到更好的效果!

大模型教程的博客 1189

深度学习基础—Beam search集束搜索

注意:观察集束搜索算法,可以发现其搜索树相当于每次生成3*10000个结果(除了第一次生成外),然后剪枝,只保留3种概率最大的结果,即节省了计算,有能保证最好的结果没有被网络丢掉(一般来说最好的结果和概率最大的结果概率相差不会很远,合理的选择集束宽B的大小可以保证找到最优的结果)B越大,算法可选择的越多,结果越好,但计算更慢;说明集束搜索算法得到的使概率最大化的句子(y^)是使概率最大化的句子,但是y*显然是更好的句子,RNN应该输出的是y*的概率更大,此时RNN网络输出更差,更值得优化RNN网络。

sniper_fandc的博客 1317
上一篇: 咱们边玩边学BLIP2
下一篇: Agent相关工作调研
银晗
博客等级 码龄6年 1万+粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值