3 ポイント 投稿者 GN⁺ 2025-05-06 | 1件のコメント | WhatsAppで共有
  • 大規模言語モデル(LLM)のサンプリング方式を、初心者でも理解できるように解説した総合ガイド
  • トークンとは何か、なぜ単語の代わりに使うのか、そしてモデルがテキストを生成する過程を詳しく整理
  • サンプリングは出力の多様性と自然さを調整するプロセスであり、Temperature、Top-K、Top-P、DRY などのさまざまなサンプリングアルゴリズムを紹介
  • 各サンプリング手法は概念的な説明とともに数学的・アルゴリズム的な動作原理を含めて説明され、反復防止創造性向上一貫性調整などの効果を比較
  • サンプラー間の組み合わせ順序、相互作用、衝突事例まで整理されており、生成品質を精密に制御したい開発者に非常に有用な資料

Intro Knowledge

Short Glossary

  • Logits は各トークンのスコアを表す未正規化の値
  • Softmax は logits を正規化された確率分布に変換する関数
  • Entropy は予測の不確実性を意味し、高いほど次のトークンに対する不確実性が大きい
  • Perplexity は低いほどモデルの確信が高いことを意味する指標
  • n-gram は連続した n 個のトークン列を意味する
  • Context window はモデルが一度に処理できる最大トークン数

Why tokens?

Why not letters?

  • 文字単位のトークン化では系列が長くなりすぎて、計算コストの増加や情報のつながりの把握の難しさが生じる

Why not whole words?

  • 単語ベースでは語彙サイズの爆発的増加新語や希少語の表現の難しさなどの問題がある
  • Sub-word ベースは接頭辞、語根、接尾辞を分けて扱えるため、形態素理解や多言語転移学習に効果的

How are the sub-words chosen?

  • 学習データの代表サンプルを通じて、最も頻出する**部分単語(sub-word)**を見つける方式で語彙を構築する

How does the model generate text?

  • 学習中は大量のテキストを通じて、次のトークンの確率分布を学習する
  • 推論時には、あらゆる候補トークンについて確率を計算し、サンプリング手法に応じて次のトークンを選択する

From Tokens to Text

  • 予測段階: すべての候補トークンに対する確率分布を計算
  • 選択段階: 特定のサンプリング戦略に従ってトークンを選択
  • 単純に最も確率の高いトークンを選ぶだけでは退屈だったり反復的だったりするテキストが生成されるため、サンプリング手法が重要

Sampling

Temperature

  • 低い値は保守的で反復的、高い値は創造的な結果を促す一方で誤りの可能性が増す
  • logits を温度値で割ることで、確率分布の**鋭さ(集中度)**を調整する

Presence Penalty

  • 一度でも登場したトークンは再登場の可能性を下げる
  • 使われたかどうかだけを判定し、登場回数は考慮しない

Frequency Penalty

  • 登場回数に比例してスコアを減点する
  • よく出てくる単語ほど不利になり、多様性を高めるのに寄与する

Repetition Penalty

  • 以前に登場したトークンに対して正負の logit に非対称なペナルティを適用する
  • ループ的な反復の防止に効果的だが、文脈の一貫性を損なう可能性がある

DRY (Don't Repeat Yourself)

  • n-gram パターンの反復を検知し、反復を予測するトークンの確率を減点する
  • 長く、かつ直近で反復されたフレーズほど強く抑制する
  • 創作テキストで自然さを保ちながら反復を減らすのに卓越している

Top-K

  • 上位 K 個の候補だけを残し、それ以外のトークンは除外する
  • 極端なサンプルを取り除きつつ、一定水準のランダム性を確保する

Top-P (Nucleus Sampling)

  • 累積確率が P 以上になるまでのトークンだけを残し、それ以外は除外する
  • モデルの確信度に応じて候補群のサイズが変わるため適応的

Min-P

  • 最も高確率なトークンを基準に、最低限の比率以上を持つトークンだけを残す
  • モデルの自信に応じてフィルタリングが動的に調整される

Top-A

  • 最も確率の高いトークンの確率の二乗に比例した閾値で候補をフィルタリングする
  • 確信が高いほどより厳しいフィルタリングが適用される

XTC

  • 一定の確率で最も確率の高い候補群を意図的に除外し、あまり確実ではない選択を行うよう誘導する
  • 非定型的または創造的な応答のための手法

Top-N-Sigma

  • 確率分布の標準偏差を基準に有効トークンを選別する
  • 統計的特徴に基づくフィルタリングで、さまざまな状況に柔軟に対応する

Tail-Free Sampling (TFS)

  • 確率勾配の**二次変化量(曲率)**を通じて、有意な候補とロングテール候補を区別する
  • 自然なカットオフ地点を見つけてフィルタリングする方式

Eta Cutoff

  • 分布のエントロピー(不確実性)に応じて、フィルタ基準を動的に調整する
  • 確信が高いほど多くのトークンが除外され、確信が低いほど柔軟になる

Epsilon Cutoff

  • 固定された確率閾値を使って低確率トークンを除外する
  • 単純だが予測しやすく、不要なロングテールの除去に有用

Locally Typical Sampling

  • **予想 surprisal(予測値との差)**が平均に近いトークンを好む
  • 最も可能性の高いトークンや最も奇妙なトークンではなく、「典型的な」選択を促す

1件のコメント

 
GN⁺ 2025-05-06
Hacker Newsの意見
  • サンプラーはモデルの内部状態にアクセスできないことに触れていない

    • 出力分布に数学を適用しているだけで、モデルと同じくらい賢くなければ解読できない
    • repetition penalty や DRY のようなサンプラーは、モデルが自ら繰り返さないようにするが、これはより良い訓練が必要であることを意味する
    • 自己回帰プロセスをハックすることで、Min-P のような単純な改善が可能になる
    • 悪いモデルを良いモデルに変えようとする試みは、誤ったアプローチである
  • Ollama/llama.cpp 向けのサンプリングガイドを書いてみた

    • フィードバックや修正提案を歓迎する
  • LLM に「アイデア」を出力させようとする場合、logit ベクトルの選択は元のアイデアを壊してしまうはずだ

    • アイデアが完全なら、logit に対するサンプリングは不要である
  • すべてが簡潔に説明されていて、新しい試みをする機会が開かれる

    • 例えば、単語全体をトークンとして使うのはどうだろうか?
    • 限定された「ロボット方言」を持つ「ロボット」を作ることができる
    • 新語や希少語を扱う余地はないが、訓練データと入力データを修正して既存の語彙へ翻訳することはできる
    • ユーザーに、ロボットがうまく答えられる応答への期待値を与えられる
  • LLM モデルは暗黙的にトークン化を行えるのだろうか?

    • 別個のトークナイザーを構築する代わりに、文字列を使い、それをトークンへ変換することをニューラルネットワークに任せる
    • そのネットワークの重みは、残りの LLM と一緒に訓練される
  • 関連して、私たちの min_p 論文が ICLR で 12000 件の投稿中 18 位に入った

    • ポスターは人気があった
    • 口頭発表では Yoshua Bengio との議論があった
    • Top N sigma が現在もっとも一般的なサンプラーであることを確認できる
    • 温度は現在よりもはるかに高く調整できる
    • top_k = 2 と超高温という特殊なケースは非常に興味深い
  • サンプリングがモデルの限界を本当に解決するのか、それともより深い問題を覆い隠しているだけなのか気になる

  • 「サンプリング」が予想よりはるかに多くのことを扱っている

  • とても有用な文書で、説明が明確で多くの内容を扱っている

    • 誰が書いたのか知っている人がいるのか気になる
    • DRY - 「repetition penalty」セクションが興味深かった
    • LLM に入力の正確なコピーを出力してほしいことがよくある
    • 長い会話を要約するとき、もっとも説明的で正確な引用文を求める
    • DRY penalty はこの目標と衝突する可能性がある
  • 初期の softmax 温度選択の後に、多くの操作が行われていることに気づいていなかった