デコーディング戦略:貪欲法・ビームサーチ・サンプリング
LLM の出力が硬すぎる・壊れる・繰り返すのは、モデルではなくデコーディング設定が原因のことが多い。貪欲法からtop-pまで仕組みで選び分けられます。
- 1.言語モデルが出すのは各語彙の確率分布。そこから1トークンを選ぶ規則がデコーディング戦略で、貪欲法・ビームサーチ・サンプリング(top-k/top-p)に大別される。生成品質はモデル性能と同じくらいここで決まる。
- 2.temperature は softmax のロジットを T で割って分布の鋭さを調整するパラメータ。T が小さいほど決定的・反復的、大きいほど多様で乱れやすい。top-k/top-p は候補を上位だけに絞り、低確率の暴発を抑える。
- 3.貪欲法・ビームは品質と一貫性に強いが反復・退化を起こしやすい。サンプリング系は多様性に強いが破綻リスクがある。反復抑制は presence/frequency penalty や n-gram ブロックで行う。
デコーディングとは「確率分布から1語を選ぶ規則」
LLM と Transformer で見たとおり、言語モデルは自己回帰的に、これまでのトークン列を条件として「次のトークンの確率分布」を出力します。語彙サイズを V とすると、各ステップの出力はロジットベクトル z(長さ V)で、これを softmax にかけて確率 p に変換します。
p(token_i) = exp(z_i) / Σ_j exp(z_j) (j = 1 .. V)
ここで重要なのは、モデルが返すのは分布であって「答え」そのものではない点です。この分布から実際に1トークンを選ぶ手続きがデコーディング戦略です。同じモデル・同じプロンプトでも、選び方次第で出力は「無難で硬い」「多様だが暴走する」と大きく変わります。生成品質はモデルの良し悪しと同じくらい、ここで決まります。
扱うのは学習済みモデルから文章を生成する推論時の選択規則です。確率分布そのものの作り方(softmax と最尤推定の関係)は 損失関数と最尤推定 を、推論コストの土台は KV キャッシュと推論最適化 を参照してください。
貪欲法(Greedy):常に最大確率を選ぶ
最も単純な戦略が貪欲法です。各ステップで確率が最大のトークンを1つ選び、それを確定させて次へ進みます。
各ステップ t:
next = argmax_i p(token_i | これまでの列)
完全に決定的で、同じ入力からは常に同じ出力が出ます。短く事実的な応答や、抽出・分類のように「正解が1つ」のタスクでは有効です。一方で、各ステップでの局所最適が文全体での最適とは限らないという根本的な弱点があります。いまの1語で確率最大を取っても、その先に高確率の続きが続くとは限らないからです。結果として、無難で平板な文や、同じ語句を延々と繰り返す**退化(degeneration)**を起こしやすくなります。
ビームサーチ(Beam Search):複数候補を並走させる
貪欲法の局所最適を緩めるのがビームサーチです。1本だけ選ぶのではなく、確率の高い候補列をビーム幅 B 本だけ常に保持し、各列を1トークン伸ばしては全展開の中から上位 B 本を残す、を繰り返します。評価には系列全体の対数確率(log p の和)を使います。
ビーム幅 B = 3 の例:
各ステップで 3本の候補列それぞれを語彙全体に展開
→ 生成された全候補(3 × V 本)を系列対数確率で順位付け
→ 上位 3本だけ残して次のステップへ
B = 1 は貪欲法に一致します。B を増やすほど探索が広がり、系列全体としての高確率な出力を見つけやすくなります。機械翻訳や要約のように忠実さ・一貫性が最優先で、ある程度の出力長が決まっているタスクで定番です。
ビームサーチは「系列全体の確率が高い列」を探しますが、人間の自然な発話は必ずしも最高確率ではありません。確率最大化に寄せすぎると、短い無難な文に偏る長さバイアスや、同じ高確率フレーズの反復が起きやすくなります。オープンエンドな文章生成(物語・対話)でビームが使われにくいのはこのためで、これは「高確率=良い文」ではないという本質的な指摘につながります。
temperature:分布の鋭さを連続的に変える
サンプリング系に入る前に、すべての土台となる temperature(温度 T) を押さえます。temperature は softmax に通す前のロジットを T で割るパラメータです。
p(token_i) = exp(z_i / T) / Σ_j exp(z_j / T)
Tを 1 未満にすると、ロジットの差が拡大され分布が鋭くなる。高確率トークンがさらに支配的になり、出力は決定的・反復的に寄る。T → 0の極限は貪欲法に一致する。Tを 1 より大きくすると、ロジットの差が圧縮され分布が平らになる。低確率トークンも選ばれやすくなり、多様だが乱れやすい。
つまり temperature は「貪欲(硬い)」と「ランダム(乱れる)」の間を連続的に動かすつまみです。注意すべきは、temperature 単体では低確率トークンをゼロにはしないこと。T を上げると、文脈的にあり得ない語まで一定確率で混ざり、破綻の原因になります。これを抑えるのが次の top-k / top-p です。
top-k:候補を上位 K 個に絞る
top-k サンプリングは、確率の高い順に上位 K 個のトークンだけを候補として残し、残りを切り捨ててから(再正規化して)サンプリングします。
1. 確率上位 K 個のトークンだけ残す(残りは確率0扱い)
2. 残った K 個の確率を合計1に再正規化
3. その分布からランダムに1つサンプリング
低確率の暴発を確実に止められるのが利点です。一方で K が固定なのが弱点です。次トークンがほぼ自明な場面(分布が鋭い)では K 個の中に不適切な候補まで含めてしまい、逆に選択肢が広いべき場面(分布が平ら)では K で切りすぎて多様性を削ります。文脈ごとに「適切な候補数」は変わるのに、K はそれに追従できません。
top-p(核サンプリング):累積確率で動的に絞る
この固定数の問題を解くのが top-p サンプリング(nucleus / 核サンプリング) です。候補数を固定せず、累積確率がしきい値 p に達するまで上位から候補を集めます。この最小の候補集合を「核(nucleus)」と呼びます。
1. トークンを確率の高い順に並べる
2. 上から累積確率を足していき、合計が p(例 0.9)を超えた時点で打ち切り
3. 集めた候補(=核)を再正規化してサンプリング
分布が鋭い場面では核が少数(極端には1個)に縮み、分布が平らな場面では核が自動的に広がります。文脈の確信度に応じて候補数が動的に変わるのが top-k との決定的な違いです。低確率の裾(あり得ない語の集まり)を切り落としつつ、必要な多様性は確保できるため、オープンエンドな文章生成では top-p が事実上の標準になっています。実務では top-p = 0.9 前後と temperature を併用し、まず top-p で裾を切り、残った核内で temperature が鋭さを調整する、という組み合わせが一般的です。
| 戦略 | 選び方 | 決定性 | 強み | 弱み |
|---|---|---|---|---|
| 貪欲法 | 毎回 argmax で1個 | 完全に決定的 | 高速・無難・再現可能 | 局所最適、反復・退化 |
| ビームサーチ | 上位 B 本の系列を並走 | 決定的 | 系列全体で高確率、忠実 | 無難に偏る、反復、計算 B 倍 |
| top-k | 上位 K 個から抽出 | 確率的 | 暴発を抑える、実装単純 | K 固定で文脈に追従できない |
| top-p(核) | 累積確率 p までから抽出 | 確率的 | 候補数が文脈で動的、多様性と品質を両立 | p の調整が必要 |
多様性と品質のトレードオフ
ここまでの戦略は、結局「品質・一貫性」と「多様性・自然さ」のどこでバランスを取るかという1軸の上に並びます。
- 確率最大化に寄せる(貪欲・ビーム・低 temperature)ほど、無難で一貫した出力になるが、平板・反復・退化のリスクが上がる。
- ランダム性に寄せる(高 temperature・大きな k や p)ほど、多様で人間らしい出力になるが、文脈無視・事実誤り・破綻のリスクが上がる。
正解が1つに近いタスク(コード生成・抽出・分類・短い事実応答)は 低 temperature や貪欲で決定性と正確さを優先します。一方、創作・対話・ブレストのように多様性が価値を生むタスクは top-p + 中〜やや高めの temperature が向きます。「出力が硬すぎる/同じ言い回しばかり」なら多様性側へ、「話が逸れる/事実が崩れる」なら品質側へ振るのが調整の基本です。
繰り返し抑制の仕組み
貪欲法やビーム、さらには低 temperature のサンプリングでも、同じ語・同じフレーズの反復は起きます。これは「いま出した語が次も高確率になりやすい」という自己強化ループが原因で、分布の選び方だけでは根治しません。そこで、すでに出たトークンのロジットに直接ペナルティを与える仕組みを併用します。
| 手法 | やること | 効き方 |
|---|---|---|
| frequency penalty | 出現「回数」に比例してロジットを減算 | 多く出た語ほど強く抑制。回数に比例 |
| presence penalty | 一度でも出たトークンに一定額のロジット減算 | 出たか出ないかで判定。新語を促す |
| repetition penalty | 既出トークンのロジットを定数で割って縮小 | 乗算的に再選択確率を下げる |
| no-repeat n-gram | 既出の n-gram の再生成を禁止(確率0) | 同一 n 連続の繰り返しを機械的に遮断 |
frequency penalty は「使うほど出にくくする」回数ベース、presence penalty は「一度でも使えば出にくくする」存在ベースで、目的が微妙に異なります。前者は同じ単語の連呼を、後者は話題の使い回しを抑えるのに向きます。no-repeat n-gram ブロックは、指定した長さ(例 3-gram)の連続が一度出たら二度と生成させない強い制約で、ビームサーチの反復対策として併用されることが多い手法です。
反復ペナルティを強くしすぎると、文法上どうしても必要な助詞・冠詞・専門用語まで「既出だから」と避けられ、不自然で読みにくい文や、わざと言い換えを乱発する文になります。n-gram ブロックも、定型句や固有名詞を含む文では正当な再出現まで潰します。反復が消えても文が壊れては本末転倒なので、ペナルティは弱めから少しずつ上げるのが安全です。
まとめ:どこから設定を詰めるか
デコーディング戦略は、モデルが出した確率分布を「どう選ぶか」という後段の設計であり、出力品質を左右する独立した制御点です。
| 論点 | 実態 | そこから言えること |
|---|---|---|
| 何を選ぶ規則か | 語彙上の確率分布から1トークンを選ぶ手続き | モデルを替えずに出力傾向を制御できる |
| 品質か多様性か | 確率最大化⇄ランダム化の1軸トレードオフ | タスクに応じて temperature と top-p で振る |
| top-k と top-p | k は固定数、p は累積確率で動的に絞る | 文脈の確信度に追従する top-p が現在の標準 |
| 反復対策 | 既出トークンのロジットに penalty / n-gram ブロック | 掛けすぎは文を壊す。弱めから調整 |
実務では、まずタスクが「正解1つ寄り」か「多様性が価値」かを見極め、前者は低 temperature か貪欲、後者は top-p = 0.9 前後と中程度の temperature を起点にします。そこから反復が出れば frequency / presence penalty を弱く足し、話が逸れれば temperature と p を下げる——この手順で大半は調整できます。プロンプト側の工夫と合わせた制御は プロンプトエンジニアリング も参照すると、生成の手綱を入力と出力の両側から握れるようになります。
AI/機械学習 Article
デコーディング戦略:貪欲法・ビームサーチ・サンプリングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
LLM
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
temperature は softmax のロジットを T で割って分布の鋭さを調整するパラメータ。T が小さいほど決定的・反復的、大きいほど多様で乱れやすい。top-k/top-p は候補を上位だけに絞り、低確率の暴発を抑える。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「LLM / デコーディング」に近いか確認する。
- 強みである「言語モデルが出すのは各語彙の確率分布。そこから1トークンを選ぶ規則がデコーディング戦略で、貪欲法・ビームサーチ・サンプリング(top-k/top-p)に大別される。生成品質はモデル性能と同じくらいここで決まる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。