《动手学深度学习 Pytorch版》 9.8 束搜索

本节将介绍几大:

  • 贪心搜索(greedy search)策略

  • 穷举搜索(exhaustive search)

  • 束搜索(beam search)

9.8.1 贪心搜索

贪心搜索已用于上一节的序列预测。对于输出序列的每一时间步 t ′ t' t′,都从 Y \boldsymbol{Y} Y 中找到具有最高条件概率的词元,即:

y t ′ = arg ⁡ max ⁡ y ∈ Y P ( y ∣ y 1 , ... , y t − 1 , c ) y_{t'}=\mathop{\arg\max}\limits_{y\in\boldsymbol{Y}}{P(y|y_1,\dots,y_{t-1},\boldsymbol{c})} yt′=y∈YargmaxP(y∣y1,...,yt−1,c)

一旦输出序列包含了"<eos>"或者达到其最大长度 T ′ T' T′,则输出完成。

问题:

  • 最优序列应该是最大化值的输出序列,而贪心搜索无法保证得到最优序列。

  • 每次选择都会影响后续的所有结果。

9.8.2 穷举搜索

穷举搜索(exhaustive search)穷举地列举所有可能的输出序列及其条件概率,然后计算输出条件概率最高的一个。其计算量 O ( Y T ′ ) O(\boldsymbol{Y}^{T'}) O(YT′) 可能高的惊人。

9.8.3 束搜索

穷举搜索有精度优势,贪心搜索有计算成本优势,而束搜索则介于这两个极端之间。

束搜索(beam search)是贪心搜索的一个改进版本。它有一个超参数,名为束宽(beam size) k k k。在时间步 1,我们选择具有最高条件概率的 k k k 个词元。这 k k k 个词元将分别是 k k k 个候选输出序列的第一个词元。在随后的每个时间步,基于上一时间步的 k k k 个候选输出序列,继续从 k k k 个可能的选择中挑出具有最高条件概率的 k k k 个候选输出序列。

最后,选择其中条件概率乘积最高的序列作为输出序列。

练习

(1)我们可以把穷举搜索看作一种特殊的束搜索吗?为什么?

可以看作束宽拉满的束搜索。


(2)在 9.7 节的机器翻译问题中应用束搜索。束宽是如何影响预测的速度和结果的?

束搜索需要的计算更多,肯定是越宽越慢。


(3)在 8.5 节中,我们基于用户提供的前缀,通过使用语言模型来生成文本。这个例子中使用了哪种搜索策略?可以改进吗?

上束搜索。

相关推荐
饼干哥哥30 分钟前
扣子3.0测评:我让 Codex 和 Claude Code 住同一个桌面,结果它们打架了!
人工智能·开源·代码规范
Token炼金师1 小时前
IP-Adapter:解耦交叉注意力如何让扩散模型看见图像
人工智能
Bigfish_coding1 小时前
前端转agent-【python】-11 LangGraph 高级特性:时间旅行与人工介入
人工智能
Token炼金师1 小时前
从safetensors到像素:ComfyUI Checkpoint加载机制的底层拆解
人工智能
AI闲人1 小时前
AI 写代码越来越快,为什么 Code Review 反而更慢了?
人工智能·code review·ai 编程
武子康1 小时前
调查研究-202 SGLang 深度解析:为什么大模型推理框架不只是“把模型跑起来“
人工智能·openai·agent
我是大卫1 小时前
Trae 读取 agents.md 并驱动 AI 完整底层原理
人工智能
石小石Orz1 小时前
AI具身交互:实现一个会说话的3D虚拟伴侣
前端·人工智能·后端
恋猫de小郭2 小时前
如何让 AI 快速搭建一套生产 Agent ?全面理解 Agent 架构。
前端·人工智能·ai编程