Skip to main content

Sampling Strategies

Sampling Strategies は、LLM が次 token を生成するときに、logits から実際の token を選ぶための手順です。Model が出す確率分布はそのまま使うと単調になったり、逆に低確率 token を拾って破綻したりするため、deployment では temperature や top-p などを組み合わせて分布を整えます。

Sampling strategies map

自作概念図。Logits に temperature をかけ、tail を truncation し、その後に sampling するという基本的な流れを示しています。

Decoding の位置づけ

LLM の autoregressive generation では、prefix x<tx_{<t} が与えられたときに、次 token の分布を計算します。

pθ(xtx<t)=softmax(zt)p_\theta(x_t \mid x_{<t}) = \mathrm{softmax}(z_t)

ここで ztz_t は logits です。Greedy decoding は最大確率の token を常に選びますが、文章生成、chat、creative writing では多様性が不足しやすくなります。一方で、完全な multinomial sampling は低確率 token を拾いやすく、話題逸脱や hallucination を増やします。Sampling strategy は、この二つの間で 品質、安定性、多様性 の trade-off を調整します。

Temperature

Temperature は、softmax の前に logits を割ることで分布の鋭さを調整します。

pi=exp(zi/T)jexp(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}
  • T<1T < 1 では分布が鋭くなり、高確率 token が選ばれやすくなります。
  • T=1T = 1 では model の元の分布をそのまま使います。
  • T>1T > 1 では分布が平坦になり、低確率 token も選ばれやすくなります。

実務では、正確性が必要な QA や code では低め、brainstorming や creative writing では高めに設定します。ただし、temperature を上げるだけでは tail の低品質 token も増えるため、top-p や min-p と組み合わせることが多いです。

Top-k Sampling

Top-k sampling は、確率上位 kk 個の token だけを残し、それ以外を確率 00 にしてから sampling します。

Top-k は直感的で実装しやすい一方で、固定値 kk が文脈に合わないことがあります。確信度が高い文脈では候補が多すぎ、曖昧な文脈では候補が少なすぎる場合があります。

Top-p / Nucleus Sampling

Top-p sampling は、確率を高い順に足していき、累積確率が pp を超える最小集合だけを残します。

Vp=min{VV:iVpip}V_p = \min\left\{V' \subseteq V : \sum_{i \in V'} p_i \ge p\right\}

Top-k が候補数を固定するのに対して、top-p は候補集合の大きさを分布に応じて変えます。Model が確信しているときは少数の token だけが残り、曖昧なときは多くの token が残ります。この適応性により、chat LLM の default decoding では top-p が広く使われています。

Min-p Sampling

Min-p sampling は、最大確率 token を基準にして、相対的に十分高い確率を持つ token だけを残します。最大確率を pmaxp_{\max}、threshold を mm とすると、概念的には次の条件を満たす token を残します。

pimpmaxp_i \ge m \cdot p_{\max}

Min-p は top-p よりも「最有力 token との相対差」を重視します。Reasoning や chat で、確信度が高い局面では強く絞り、曖昧な局面では候補を広げるように働きます。ただし、library や serving engine によって細部の実装が異なるため、使用時には実装仕様を確認する必要があります。

Typical Sampling

Typical sampling は、単に確率が高い token ではなく、分布全体の entropy から見て典型的な surprisal を持つ token を残す方法です。Token ii の surprisal は logpi-\log p_i であり、文脈の entropy H(p)H(p) に近い token が典型的と見なされます。

logpiH(p)\left| -\log p_i - H(p) \right|

この値が小さい token を優先することで、過度に安全な token と、過度に意外な token の両方を避けようとします。

代表的な設定の考え方

用途TemperatureTruncation意図
Factual QA0.0〜0.4top-p 低め再現性と正確性を優先する
Coding0.0〜0.6top-p 低〜中syntax 破綻を避ける
Chat0.6〜0.9top-p 0.8〜0.95自然さと安定性を両立する
Creative writing0.8〜1.2top-p 高め / min-p多様性を増やす
Brainstorming0.9 以上top-p 高め予想外の候補を出す

数値は absolute rule ではありません。Model、prompt、task、safety filter、system instruction によって最適値は変わります。

Seed と再現性

Sampling は stochastic なので、同じ prompt でも毎回同じ出力になるとは限りません。Experiment や評価では、temperature、top-p、top-k、seed、model version、prompt template を一緒に記録することが重要です。特に agent evaluation では、sampling の揺れが tool call や行動計画の差に増幅されます。

よくある落とし穴

  • Temperature を上げすぎると、低確率 token が増えて coherence が落ちます。
  • Top-p を下げすぎると、model が同じ表現を繰り返しやすくなります。
  • Greedy decoding は deterministic ですが、最良の reasoning を保証しません。
  • Long context では、後半の decoding が context pollution の影響を受けやすくなります。
  • Safety-critical task では、sampling diversity より検証器、retrieval、structured decoding を優先すべきです。

数式で見る truncation 後の再正規化

Top-k や top-p は、候補 token の集合 SS を選んだ後、それ以外の token の確率を 0 にして再正規化します。元の分布を pip_i とすると、truncation 後の分布は次のように書けます。

p~i={pijSpj,iS 0,iS\tilde{p}_i= \begin{cases} \dfrac{p_i}{\sum_{j\in S}p_j}, & i\in S \ 0, & i\notin S \end{cases}

この式の気持ちは、「信用できる候補集合だけを残し、その中で確率の比率を保ったまま sampling する」というものです。Top-k では SS が上位 kk 個の token であり、top-p では累積確率が threshold を超える最小集合です。

Temperature は、logits の差を拡大または縮小します。二つの token i,ji,j の odds ratio は次のように変わります。

pi(T)pj(T)=exp(zizjT)\frac{p_i(T)}{p_j(T)} =\exp\left(\frac{z_i-z_j}{T}\right)

T<1T<1 では logit 差が強調されるため、高確率 token がさらに選ばれやすくなります。T>1T>1 では logit 差が弱まり、分布が平坦になります。したがって、temperature は「候補の集合」を直接変えるのではなく、「候補間の相対的な鋭さ」を変える knob です。

関連ページ

主なソース