Beam Search(ビームサーチ)(ビームサーチ)
テキスト生成において複数の候補系列(ビーム)を並行して探索し、全体として最も高い確率を持つ系列を選択するデコーディング手法。機械翻訳や音声認識で広く使用され、Greedy Decodingより高品質な出力を実現するが計算コストが増大する。
Beam Search(ビームサーチ)とは
Beam Search は、LLMのテキスト生成において複数の候補系列を同時に探索する半決定論的なデコーディング手法です。各ステップでビーム幅 k 個の最有力候補を維持し、最終的にシーケンス全体の対数確率和が最も高い系列を選択します。Google の機械翻訳システムや OpenAI Whisper の音声認識で標準的に使用されています。
動作原理
- 初期状態: 開始トークンから k 本のビーム(候補系列)を展開
- 各ステップで各ビームに対して語彙全体の確率を計算(k × V 個の候補)
- k × V 個の候補から上位 k 個を選択して次のステップへ
- EOS トークンに到達したビームは完了プールに移動
- 全ビームが完了するか max_tokens に達したら、完了プールから最高スコアの系列を返却
計算量は O(T × k × V) で、Greedy Decoding の k 倍です。
パラメータと設定
| パラメータ | 標準値 | 説明 |
|---|---|---|
| beam_width (k) | 4〜8 | 並行探索するビーム数。大きいほど高品質だが遅い |
| length_penalty (α) | 0.6〜1.0 | 長い系列へのペナルティ/ボーナス。α>1で長文を促進 |
| no_repeat_ngram_size | 3 | 指定 n-gram の繰り返しを禁止 |
| early_stopping | True | 上位 k 系列がすべて EOS に達した時点で探索終了 |
| num_return_sequences | 1 | 返却する候補系列数(≤ k) |
主要フレームワークでの使用例
Hugging Face Transformers
outputs = model.generate(
**inputs,
num_beams=5,
num_return_sequences=3,
length_penalty=0.8,
no_repeat_ngram_size=3,
early_stopping=True,
max_new_tokens=200
)
Fairseq(Meta)
generator = SequenceGenerator(
models, tgt_dict,
beam_size=5,
len_penalty=0.6,
max_len_b=200
)
Beam Search が適するタスク
- 機械翻訳: Google Translate、DeepL は beam_width=4〜5 を標準使用。BLEU スコアが Greedy 比で 1〜3 ポイント向上
- 音声認識: OpenAI Whisper は beam_size=5 がデフォルト。WER(Word Error Rate)を平均 10〜15% 削減
- 要約: CNN/DailyMail ベンチマークで length_penalty=0.8 + beam=4 が ROUGE-L 最良値を達成
- 画像キャプション: BLIP-2、LLaVA 等のマルチモーダルモデルで beam=5 が標準
Beam Search の限界と改良手法
多様性の欠如
k 本のビームが類似した系列に収束しやすい問題があります。
- Diverse Beam Search(DBS): グループ間の多様性ペナルティを導入。各グループのビームが異なる語彙領域を探索
- Stochastic Beam Search: 確率的にビームを選択し、多様性を確保
計算コスト
- Speculative Beam Search: ドラフトモデルでビーム候補を先行生成し、検証モデルで一括確認
- Pruning(枝刈り): スコアが閾値以下のビームを早期に除外
2026年の動向
対話型LLM(ChatGPT、Claude)ではビームサーチはほぼ使用されず、Top-p サンプリングが主流です。ビームサーチは翻訳・音声・要約など「正解に近い出力」が求められる seq2seq タスクに限定される傾向が強まっています。vLLM 0.8 以降はビームサーチのサポートを維持しつつも、Speculative Decoding との併用を推奨しています。
よくある質問(FAQ)
Q1: ビーム幅を大きくすれば品質は必ず向上しますか? A: 必ずしもそうではありません。ビーム幅を16以上にするとスコアは向上しますが、出力が短く一般的な表現に偏る「ビームサーチの呪い(curse of beam search)」が発生することが報告されています。実用的には beam_width=4〜8 が最適範囲です。
Q2: Beam Search と Top-p サンプリングを併用できますか? A: 一般的には併用しません。Beam Search は決定論的な探索であり、Top-p のような確率的サンプリングとは設計思想が異なります。ただし、Diverse Beam Search はサンプリング的な要素を取り入れた折衷手法です。
Q3: GPT-4o や Claude はなぜ Beam Search を使わないのですか? A: 対話型LLMでは「唯一の正解」が存在しないため、多様で自然な応答を生成する確率的サンプリングが適しています。また、Beam Search はメモリ使用量がビーム幅に比例するため、数十億パラメータのモデルでは実用的なコストが高いことも理由です。
まとめ
- Beam Search は複数候補を並行探索することで Greedy より高品質な系列を発見する手法
- 機械翻訳・音声認識・要約など seq2seq タスクで標準的に使用
- 対話型LLMでは Top-p サンプリングに置き換えられる傾向
- ビーム幅 4〜8 が実用的な最適範囲