AI・機械学習
上級

LLMサンプリング戦略(エルエルエムサンプリングセンリャク)

LLMがテキストを生成する際に次のトークンを選択するアルゴリズムの総称。Greedy Decoding・Beam Search・Temperature Sampling・Top-k・Top-p・Min-p・Mirostat など多数の手法があり、タスクの性質に応じて使い分けることで出力品質を最適化する。

0 回閲覧
0 いいね

LLMサンプリング戦略とは

LLM サンプリング戦略は、言語モデルが次のトークンを選択する際のアルゴリズムを包括的に指す概念である。モデルが算出する確率分布から「どのトークンを選ぶか」の方法論であり、同一のモデルでもサンプリング戦略の違いで出力品質が劇的に変わる。

主要なサンプリング手法一覧

手法概要長所短所
Greedy Decoding最高確率のトークンを常に選択高速・決定的繰り返しが多く単調
Beam Search複数の候補パスを並列探索翻訳等で高品質計算コスト大、多様性低
Temperature Samplingソフトマックスのシャープさを調整シンプルで直感的単独では低確率トークン排除不可
Top-k上位k個のトークンに限定実装が簡単確率分布に非適応
Top-p (Nucleus)累積確率pまでのトークンに限定分布に適応的Top-kよりやや複雑
Min-p最大確率の一定割合未満を除外分布形状に自然に適応比較的新しく普及途上
Mirostat出力のパープレキシティを目標値に維持一貫した品質実装がやや複雑
Typical Sampling情報量が「典型的」なトークンを優先人間らしい出力パラメータ調整が難しい

Greedy Decoding と Beam Search

Greedy Decoding は最もシンプルな手法で、各ステップで最高確率のトークンを選択する。Temperature=0 や Top-k=1 と実質同等である。高速だが、最適な文全体を生成するとは限らない(局所最適に陥る)。

Beam Search は beam width(ビーム幅)で指定した数の候補パスを並列に維持し、最終的に最も高いスコアの系列を選択する。機械翻訳や要約では高品質だが、オープンエンドな対話では繰り返しの多い退屈な出力になりやすい。

Min-p サンプリング

2023年に提案された比較的新しい手法で、最大確率トークンの確率に対して一定の割合(min_p)未満の確率を持つトークンを除外する。

例えば最大確率トークンが 0.8 で min_p=0.1 の場合、0.8×0.1=0.08 未満のトークンが除外される。確率分布が集中している場合は少数に絞り込み、分散している場合は多くを残す点で Top-p に似た適応性を持つ。

llama.cpp や Ollama などのローカル LLM ランタイムで採用が進んでおり、Top-p の代替として注目されている。

Mirostat

Mirostat(2020年提案)は出力テキストのパープレキシティ(困惑度)を一定の目標値に維持するよう、サンプリングパラメータを動的に調整する手法である。

  • Mirostat v1: 学習率を用いてパープレキシティを目標値に収束させる
  • Mirostat v2: より安定した収束を実現する改良版

Ollama では mirostat 2 がデフォルトで利用可能で、長文生成での品質安定に効果がある。

サンプリングパイプラインの実行順序

多くの推論エンジンでは複数のサンプリング手法が順番に適用される。llama.cpp の標準的な順序は以下の通りである。

  1. Temperature(ロジット調整)
  2. Top-k(上位k個にフィルタ)
  3. Top-p(累積確率でフィルタ)
  4. Min-p(最大確率比でフィルタ)
  5. サンプリング(最終的なトークン選択)

この順序はフレームワークによって異なり、カスタマイズ可能な場合もある。

FAQ

Q1: 初心者はどのサンプリング戦略から始めるべきですか?

A1: まず Temperature のみを調整することを推奨する。Temperature 0.7 + Top-p 0.9 の組み合わせが多くのタスクで良い出力を得られる汎用的な設定である。

Q2: Beam Search は現在のチャット型 LLM でも使われていますか?

A2: チャット型 LLM ではほとんど使われていない。Beam Search は翻訳・要約など正解がある程度決まったタスクに向いており、オープンエンドな対話には不向きとされる。

Q3: Min-p は Top-p より優れていますか?

A3: 理論的には Min-p の方が確率分布の形状に自然に適応するが、実用上の差は小さい。llama.cpp コミュニティでは min_p=0.05〜0.1 が推奨されており、Top-p からの移行が進んでいる。