集束搜索(beam search)和贪心搜索(greedy search)

本文深入浅出地介绍了集束搜索和贪心搜索两种算法,详细解释了它们的工作原理和应用场景,通过实例展示了如何利用这两种算法进行序列生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近读论文的时候看到文中经常用到集束搜索(beam search),可能很多人不懂这到底是个什么算法,其实很简单,顺便把贪心搜索(greedy search)也介绍一下。

贪心搜索(greedy search)

贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度。

在这里插入图片描述

集束搜索(beam search)

集束搜索是一种启发式图搜索算法,在图的解空间比较大的情况下,为了减少搜索所占用的空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的结点,保留下一些质量较高的结点。

具体过程为:使用广度优先策略在树的每一层建立搜索树,按照启发代价对节点进行排序,然后仅留下预先确定的个数(Beam Width-集束宽度)的节点,仅这些节点在下一层次继续扩展,其他节点就被剪掉了。(注意:如果集束宽度无穷大,那该搜索就是宽度优先搜索)

好处:减少了空间消耗,并提高了时间效率。

概念可能不好理解,下完下面的例子你就会发觉真的很简单。

假设字典为[a,b,c],beam size选择2,则如下图有:

  1. 在生成第1个词的时候,选择概率最大的2个词,那么当前序列就是a或b。
  2. 生成第2个词的时候,我们将当前序列a或b,分别与字典中的所有词进行组合,得到新的6个序列aa ab ac ba bb bc,然后从其中选择2个概率最高的,作为当前序列,即ab或bb。
  3. 不断重复这个过程,直到遇到结束符为止。最终输出2个概率最高的序列。

在这里插入图片描述

是不是很简单啊?

### 贪心搜索算法在图遍历路径查找中的应用 #### 定义与特性 Greedy Search, 或称为 Best-First Search,在图搜索中是一种启发式的搜索策略。该方法优先考虑当前节点中最有可能接近目标的那个节点作为下一个访问对象[^2]。 #### 工作原理 此算法通过维护一个开放列表来跟踪待探索的节点,新节点总是被添加到这个开放列表里。当选择要扩展的新节点时,并不是简单地按照加入顺序选取,而是基于某种评估函数挑选最优者先行处理。对于每一个从起始位置出发到达的不同状态,都会计算其估计代价并据此排序决定前进方向。 #### 实现方式 下面给出一段 Python 代码用于展示如何实现基本版的最佳优先搜索: ```python from heapq import heappop, heappush def greedy_search(graph, start, goal): frontier = [] heappush(frontier, (0, start)) came_from = {start: None} while frontier: _, current = heappop(frontier) if current == goal: break for next_node in graph.neighbors(current): if next_node not in came_from: priority = heuristic(next_node, goal) heappush(frontier, (priority, next_node)) came_from[next_node] = current return reconstruct_path(came_from, start, goal) def heuristic(a, b): # A simple example using Manhattan distance as the heuristic function. (x1, y1) = a (x2, y2) = b return abs(x1 - x2) + abs(y1 - y2) def reconstruct_path(came_from, start, goal): reverse_path = [] current = goal while current != start: reverse_path.append(current) current = came_from[current] reverse_path.reverse() return reverse_path ``` 上述代码片段展示了利用最小堆数据结构管理待考察顶点集合的方法;`heuristic()` 函数定义了一个简单的曼哈顿距离度量法作为评价标准之一;最后 `reconstruct_path()` 则负责回溯构建最终找到的目标路径。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值