ビームサーチは、コンピュータサイエンスの分野で用いられる
ヒューリスティックな
探索アルゴリズムの一つです。特に、木構造やグラフ構造における
探索問題を解決する際に、その効率性から広く利用されています。ビームサーチの基本的なアイデアは、
幅優先探索をベースにしつつ、
探索空間を広げすぎないように、ある程度の範囲で枝刈りを行う点にあります。
ビームサーチの仕組み
ビームサーチは、木構造の各レベルで、そのレベルのノードから次に遷移可能なノードをすべて評価し、その中から評価値の高いものから一定数(ビーム幅と呼ばれる)のみを残して、次のレベルの
探索に進みます。このプロセスを繰り返すことで、
探索空間を絞り込みながら効率的に解を
探索します。ビーム幅が大きければ
幅優先探索に近づき、小さければ貪欲法に近づくという特徴があります。
ビームサーチの名前は、1977年に
カーネギーメロン大学の
ラジ・レディ氏によって名付けられました。これは、
探索の様子がビームのように見えることに由来します。
ビームサーチの利点と欠点
利点
省メモリ性: 幅優先探索のようにすべてのノードを保持する必要がないため、メモリ消費を抑えることができます。
計算コストの削減: 枝刈りにより、
探索空間を絞り込むことで、計算量を削減できます。
欠点
最適性の保証がない: 枝刈りによって、最適な解が見つからずに
探索が終わる可能性があります。そのため、ビームサーチは必ずしも完全な
探索アルゴリズムではありません。
ビームサーチの応用
ビームサーチは、以下のような分野で広く活用されています。
機械翻訳: かつて、多くの
機械翻訳システムで、翻訳候補を絞り込みながら最適な翻訳を探すために用いられていました。(近年では
ニューラル機械翻訳が主流です。)
音声認識: 音声認識システムで、発音の候補を絞り込むために利用されています。ハーピー音声認識システムが、その初期の例として挙げられます。
ビームサーチの欠点である、最適性の保証がないという点を克服するために、様々な派生
アルゴリズムが開発されています。
ビームスタックサーチ、深さ優先ビームサーチ: 深さ優先
探索と組み合わせることで、完全性を目指した
アルゴリズムです。
不一致バックトラック付きビームサーチ(BULB): 不一致制限
探索と組み合わせることで、より効率的な
探索を目指した
アルゴリズムです。
これらの
アルゴリズムは、
Anytimeアルゴリズムとしても知られており、時間とともに解の精度を向上させることができます。
また、以下のような派生も存在します。
反復広化: 狭いビーム幅で
探索した後、徐々にビーム幅を広げながら
探索を繰り返す
アルゴリズムです。
chokudaiサーチ: 探索木のレベルごとの優先度付きキューを保持することで、ビーム幅を広げながらも効率的な
探索を可能にする
アルゴリズムです。
ローカルビームサーチ: ランダムに生成された複数の状態から
探索を開始し、局所
探索を繰り返す
アルゴリズムです。局所解に陥りやすいという欠点があるため、確率的な要素を加えることで改善が図られています。
確率的ビームサーチ: ローカルビームサーチに確率的な要素を加えて、より多様な
探索を行う
アルゴリズムです。
フレキシブルビームサーチ、リカバリービームサーチ: その他、様々な状況に対応するための派生
アルゴリズムも研究されています。
まとめ
ビームサーチは、
探索空間が非常に大きい問題に対して有効な
アルゴリズムです。その効率性と応用範囲の広さから、様々な分野で利用され続けています。また、完全性を目指した派生
アルゴリズムも研究されており、今後もその発展が期待されます。