Beam Search(集束搜索/束搜索)


找遍百度也沒有找到關於Beam Search的詳細解釋,只有一些比較泛泛的講解,於是有了這篇博文。

首先給出wiki地址:http://en.wikipedia.org/wiki/Beam_search

1.簡介

Beam Search(集束搜索)是一種啟發式圖搜索算法,通常用在圖的解空間比較大的情況下,為了減少搜索所占用的空間和時間,在每一步深度擴展的時候,剪掉一些質量比較差的結點,保留下一些質量較高的結點。這樣減少了空間消耗,並提高了時間效率,但缺點就是有可能存在潛在的最佳方案被丟棄,因此Beam Search算法是不完全的,一般用於解空間較大的系統中。

2.流程

Beam Search(集束搜索)使用廣度優先策略建立搜索樹,在樹的每一層,按照啟發代價對節點進行排序,然后僅留下預先確定的個數(Beam Width-集束寬度)的節點,僅這些節點在下一層次繼續擴展,其他節點就被剪掉了。如果集束寬度無窮大,那該搜索就是寬度優先搜索。

  • 將初始節點插入到list中,
  • 將給節點出堆,如果該節點是目標節點,則算法結束;
  • 否則擴展該節點,取集束寬度的節點入堆。然后到第二步繼續循環。
  • 算法結束的條件是找到最優解或者堆為空。

 

集束寬度可以是預先定好的,也可以是變動的,可以先按照一個最小的集束寬度進行搜索,如果沒有找到合適的解,再擴大集束寬度再找一遍。

Ps. 個人認為集束搜索方法其實提供了一種找最優解的思路,就是說在適當的情況下,可以剪掉一些可信度低的路徑,在實際使用中,可以每一層的集束寬度不一致,比如在初始的一些層次中多保留一些結果,在后邊就可以放心大膽的進行剪枝。當然也可以活學活用,可以結合深度優先算法,通過回溯,可以找到最優解。

3.應用

Beam Search(集束搜索)多用在一些大型系統中,比如機器翻譯系統,語音識別系統等,因為這些系統中的數據集可能非常大,而且結果也沒有唯一正確的解,系統用最快的方式找到最接近正確的解才是系統的目標。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM