Beam Search 原理详解


1. 前言

Beam Search 是一种启发式图搜索算法,用于在图或树的搜索过程中寻找最有可能的路径。它常用于自然语言处理(NLP)中的序列生成任务,如机器翻译、语音识别和文本生成等。与穷举搜索(如广度优先搜索)不同,Beam Search 通过限制搜索过程中的候选节点数量来提高效率,从而在保证搜索质量的同时减少计算资源的消耗。

2. 原理

Beam Search 的核心思想是维护一个固定大小的候选列表(称为 beam),在每一步中,算法只保留最有可能的几个候选节点,而不是考虑所有可能的节点。这个“最有可能”的判断通常基于节点的累积得分,该得分是节点从起始点到当前节点路径的得分之和。

以下是 Beam Search 的基本步骤:

  1. 初始化:将起始节点(通常是序列的开始标记)加入到候选列表中,并将其得分设为0。

  2. 扩展节点:对于候选列表中的每个节点,生成所有可能的后继节点,并计算每个后继节点的得分。

  3. 选择和更新:根据得分,从所有生成的后继节点中选择得分最高的 beam 个节点,将它们加入到候选列表中,并更新它们的得分。

  4. 终止条件:重复步骤2和3,直到达到预设的终止条件,例如达到序列的最大长度,或者候选列表中没有新的节点生成。

  5. 选择最终结果:从候选列表中选择得分最高的节点作为搜索结果。

Beam Search 的关键参数是 beam 的宽度,即在每一步中保留的候选节点数量。beam 的宽度越大,搜索过程越接近穷举搜索,计算成本也越高;beam 的宽度越小,搜索过程越快,但可能丢失一些好的候选节点。

在实际应用中,Beam Search 已被证明是一种有效的搜索策略,特别是在处理具有大量可能输出的复杂序列生成任务时。通过调整 beam 的宽度,可以在搜索质量和计算效率之间取得平衡。

3. 举例

下面是 Beam Search 生成句子的具体例子,从 start token 开始,最终生成 the green witch arrived
在这里插入图片描述
Beam Search 不是在每个时间步选择最佳的生成词元,而是在每一步保留 k(束宽 beam width) 个可能的词元,k 可以根据需要调整得更宽或更窄。

在解码的第一步,计算整个词汇表上的 softmax 函数,给每个词分配一个概率。然后从这个 softmax 输出中选择 k 个最佳选项。这些初始的 k 个输出构成了搜索前沿,这 k 个初始词被称为假设 (hypotheses)。一个假设是一个输出序列,即到目前为止的翻译 + 概率。

在后续步骤中,每个最佳假设通过分别传递给不同的解码器而逐步扩展,这些解码器各自在全部词汇表上生成一个 softmax 函数以将假设扩展到每一个可能的下一个词元。

每个这样的 k ∗ V k*V kV 个假设都通过 P ( y i ∣ x , y < i ) P(y_i | x, y < i) P(yix,y<i) 来评分:当前词选择的概率乘以导致该路径的概率。然后我们将 k ∗ V k*V kV 个假设裁剪到 k 个最佳假设,因此搜索前沿始终不超过 k 个假设,且不会同时存在超过 k 个解码器。

4. 参考

https://stackoverflow.com/questions/22273119/what-does-the-beam-size-represent-in-the-beam-search-algorithm


欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤

在这里插入图片描述

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmallerFL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值