Beam Search 原理详解:束宽如何影响生成
Beam Search(束搜索)是贪心搜索的改进解码方法,在预测阶段按束宽保留多个高概率候选序列,适合理解机器翻译生成、束宽如何影响预测及剪枝局限。

什么是 Beam Search?
Beam Search(束搜索)是一种用于序列预测或解码阶段的搜索方法,通常被视为贪心搜索的改进版本。它不改变模型训练过程,也不需要重新训练模型,而是在预测时决定如何从多个候选序列中选择更有希望的输出。
直观地看,贪心搜索像是每一步都只走当前看起来最好的那条路;Beam Search 则会同时保留几条看起来较好的路,继续向前比较,直到生成结束。
在机器翻译等序列生成任务中,模型通常需要一步一步生成下一个词或 token。Beam Search 的核心思想是:不要过早把搜索空间压缩成唯一候选,而是在每个时间步保留一组高概率候选序列。
要点: Beam Search 是预测阶段的解码策略,不是训练算法。它影响生成时的候选选择方式,而不是模型参数本身。
Beam Search 与贪心搜索有什么关键区别?
贪心搜索和 Beam Search 都可以用于预测阶段解码,但它们保留候选的方式不同。贪心搜索每一步通常只保留一个当前最优选择,Beam Search 则会根据束宽保留多个候选路径。
| 对比维度 | 贪心搜索 | Beam Search |
|---|---|---|
| 每一步保留的候选 | 通常只保留当前概率最高的一个候选 | 保留多个概率较高的候选 |
| 对早期选择的依赖 | 非常强,早期一步选错后难以修正 | 相对降低单步选择错误的影响 |
| 是否穷举所有序列 | 否 | 否 |
| 是否改变模型参数 | 否 | 否 |
| 使用阶段 | 预测或解码阶段 | 预测或解码阶段 |
Beam Search 的优势在于,它不会像贪心搜索那样过早锁定单一路径,因此在一些序列生成任务中更稳健。但它仍然不是穷举搜索:固定束宽会剪掉一部分候选,被剪掉的序列不会在后续步骤中自动回到候选集合。
束宽如何决定候选序列数量?
束宽是 Beam Search 的关键超参数,用来表示每个时间步保留多少个候选序列。当束宽设为 k 时,Beam Search 会在第一个时间步选取条件概率最大的 k 个候选。
随后,每个候选会继续扩展出新的可能结果,搜索过程再根据概率或得分保留较高的 k 个候选。这样,Beam Search 会在“保留多个可能路径”和“避免搜索空间无限扩大”之间做折中。
| 束宽设置 | 含义 | 对搜索过程的影响 |
|---|---|---|
| k = 1 | 每一步只保留一个候选 | 接近每一步只选当前最优的贪心方式 |
| k 较小 | 保留少量候选 | 搜索空间更受限制,早期剪枝影响更明显 |
| k 较大 | 保留更多候选 | 可以观察到更多候选路径,但仍不是穷举所有可能序列 |
束宽会影响预测结果,因此它常被作为观察生成效果的重要参数。需要注意的是,束宽变化可能改变输出,但不能简单理解为束宽越大结果就一定越合适。
Beam Search 的基本流程
Beam Search 可以理解为一个逐步扩展、逐步剪枝的过程。它在每个时间步根据当前候选生成下一步可能结果,再按照束宽保留概率或得分较高的候选。
初始化候选
在生成开始时,搜索过程从初始状态出发。此时还没有完整输出,模型会根据输入和当前状态预测第一个时间步的候选。
按条件概率扩展候选
在第一个时间步,如果束宽为 k,就选取当前条件概率最大的 k 个候选。之后,每个已保留的候选序列都会继续扩展,形成新的候选序列集合。
根据束宽保留候选
扩展后,候选数量会增加。Beam Search 会重新比较这些候选,并只保留概率或得分较高的 k 个候选继续向后生成。
重复直到结束条件
上述过程会在后续时间步重复进行,直到达到任务设定的结束条件,例如生成结束标记或满足输出长度要求。
输出最终候选
搜索结束后,系统会从保留下来的候选序列中选择最终输出。以机器翻译为例,输入源语言句子后,模型会逐步生成目标语言词序列,Beam Search 则用于在多个译文候选路径中进行选择。
Beam Search 适合哪些应用场景?
Beam Search 常见于机器翻译等序列生成任务。在这类任务中,输入是一段源语言文本,模型需要生成目标语言序列;生成过程不是一次性完成,而是逐词或逐 token 展开。
| 用户需求 | 解决方式 | 可能带来的效果 |
|---|---|---|
| 希望生成较稳定的译文 | 在解码阶段保留多个高概率候选 | 降低单一路径选择失误的影响 |
| 任务存在较明确的目标答案 | 对候选序列逐步扩展和筛选 | 更容易在候选中保留接近目标的输出 |
| 需要观察不同候选带来的输出变化 | 调整束宽并比较生成结果 | 帮助理解束宽对预测的影响 |
在有较明确正确答案的任务中,Beam Search 往往更容易发挥作用。例如机器翻译通常存在相对明确的目标语义,保留多个候选路径可以减少早期单步选择带来的误判风险。
固定束宽搜索有哪些局限和常见误区?
固定束宽搜索是一种启发式近似方法。它通过保留有限数量的候选来控制搜索范围,但这也意味着它不会遍历所有可能序列。
一个重要局限是:早期被剪掉的序列不会再回到候选集合。某条序列在前几个时间步得分不高,但后续可能形成更合适的完整输出;如果它已经被剪枝,Beam Search 就无法继续探索这条路径。
要点: Beam Search 不是全局最优搜索。它是在有限候选范围内做近似搜索,结果会受到束宽和早期剪枝影响。
常见误区包括:
- 误以为 Beam Search 会遍历所有可能结果。实际上它只保留固定数量的候选。
- 误以为束宽越大,结果一定越好。束宽会影响预测,但结果是否更合适需要结合任务和输出质量观察。
- 误以为使用 Beam Search 需要重新训练模型。Beam Search 用于预测阶段,不改变模型训练过程。
- 误以为 Beam Search 能完全避免贪心搜索的问题。它能降低单步贪心选择的风险,但仍会发生剪枝。
如何理解和选择束宽?
选择束宽时,可以把它看作对搜索范围的控制:束宽越小,保留的候选越少;束宽越大,保留的候选越多。但由于固定束宽搜索仍然是近似搜索,束宽不应被理解为越大越可靠的单向参数。
可以用以下检查清单帮助判断:
- 当前任务是否有较明确的目标输出,例如机器翻译这类序列到序列任务?
- 是否需要在生成时保留多个候选,而不是只相信当前最高概率的一步?
- 生成结果是否明显受到早期 token 或词选择的影响?
- 调整束宽后,最终输出是否发生变化?
- 输出变化是否符合任务需求,而不只是候选路径不同?
更稳妥的做法是,在可控范围内小幅调整束宽,并观察预测结果变化。对于入门理解,重点不是记住某个固定数值,而是理解束宽如何决定每一步保留的候选数量,以及这种剪枝方式为什么会影响最终生成结果。