詳細解釋
束搜索(Beam Search)是序列生成中的解碼策略,在每一步保留k個最可能的候選序列,平衡生成質量和計算效率,優於貪婪搜索但計算成本更高。
算法原理:
- 貪婪搜索:每一步選概率最高的token
- 束搜索:
- Beam Width:k(通常3-10)
- 每步保留k個最佳部分序列
- 最終選整體概率最高的
示例(k=2):
- 第1步:選「A」(0.4)、「B」(0.3)
- 第2步:
- 從「A」擴展:「AA」(0.16)、「AB」(0.12)
- 從「B」擴展:「BA」(0.09)、「BB」(0.06)
- 保留前2:「AA」、「AB」
- 繼續直到結束
與其他解碼策略的對比:
- Greedy Search:
- 最快
- 可能次優(局部最優)
- Beam Search:
- 質量較好
- 計算成本中等
- 適合機器翻譯、摘要
- Sampling(採樣):
- Temperature、Top-k、Top-p
- 多樣性高
- 適合創意生成
變體:
- Diverse Beam Search:
- 鼓勵多樣性
- 懲罰相似序列
- Length Normalization:
- 長序列懲罰
- 防止偏短輸出
- Coverage Penalty:
- 防止重複
- 摘要任務重要
應用場景:
- 機器翻譯:傳統標準
- 文本摘要:準確性重要
- 語音識別:準確性重要
- 代碼生成:某些場景
局限性:
- 計算成本:beam width線性增加
- 重複:可能產生重複內容
- 多樣性:不如採樣多樣
- LLM時代:採樣更流行
在LLM中的使用:
- 推理任務:仍有用
- 創意生成:採樣為主
- 混合:多樣束搜索
Beam Search是準確性優先的解碼選擇。