Beam Search(集束搜索)算法

1.概念

Beam Search(集束搜索):是一種啓發式圖搜索算法,在圖的解空間比較大的情況下,爲了減少搜索所佔用的空間和時間,在每一步深度擴展的時候,剪掉一些質量比較差的結點,保留下一些質量較高的結點。

 好處:減少了空間消耗,並提高了時間效率。

啓發式搜索是利用問題擁有的啓發信息來引導搜索,達到減少搜索範圍、降低問題複雜度的目的


2.過程

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

(注意:如果集束寬度無窮大,那該搜索就是寬度優先搜索)

步驟如下:

1.將初始節點插入到list中

2.將給節點出堆,如果該節點是目標節點,則算法結束;

3.否則擴展該節點,然後按照啓發代價對擴展出來的節點排序,取前m個節點入堆。然後到第二步繼續循環。

4.算法結束的條件是找到最優解或者堆爲空。


3.圖解

 

得到第一個輸出的概率分佈[0.1,0.1,0.3,0.4,0.1][0.1,0.1,0.3,0.4,0.1],選擇概率最大的前兩個,0.3和0.4,即Je和moi。 然後Je和moi分別作爲Decoder的輸入,得到兩個概率分佈,然後再選擇概率和最大的前兩個序列,0.3+0.8和0.4+0.6,即Je suis和moi suis。 以此類推,最終可以得到兩個序列,即Je suis étudiant和moi suis étudiant,很明顯前者的概率和最大,爲2.2,所以這個序列是最終得到的結果。 

集束搜索本質上也是貪心的思想,只不過它考慮了更多的候選搜索空間,因此可以得到更多的翻譯結果。

(貪心思想:在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的局部最優解)