ChatGPTの仕組みから学ぶG検定対策講座⑥

次のトークンはどう選ばれるのか?Logit・Softmax・Temperature

こんにちは。ゆうせいです。

前回は、Self-Attentionで集めた情報をMLPで加工し、残差接続やLayer Normalizationを使いながら複数のTransformer Blockを通過する流れを説明しました。

最後のTransformer Blockを通過すると、各トークンは文章の文脈を反映した数値ベクトルになっています。

しかし、この時点では、まだ次に出力するトークンは決まっていません。

今回は、Transformer Explainerの「Output Probabilities」を操作しながら、次の内容を確認します。

  1. 最後のトークンの表現を取り出す
  2. 50,257個のLogitを計算する
  3. Softmaxで確率へ変換する
  4. Temperatureで確率分布を調整する
  5. Top-kとTop-pで候補を絞る
  6. 確率分布から次のトークンを選ぶ

Probabilitiesを開く

Transformer Explainerを開き、画面を「 Probabilities」までスクロールしてください。

この部分には、Transformer Blockの処理結果から次のトークンを選ぶまでの流れが表示されています。

Transformer Explainerで使用されているGPT-2 smallには50,257種類のトークンがあります。最終的な出力層では、それぞれのトークンに対して、次に出現する可能性を表す数値が計算されます。

次トークン予測では最後の位置を使う

入力文が次の6個のトークンに分かれているとします。

  1. Data
  2. visualization
  3. em
  4. powers
  5. users
  6. to

各トークンは、12個のTransformer Blockを通過した後も768次元のベクトルで表現されています。

Data          :768次元
visualization :768次元
em            :768次元
powers        :768次元
users         :768次元
to            :768次元

次のトークンを生成するときに使うのは、現在の文章の最後にある「to」の表現です。

Data visualization empowers users to

この文章に続くトークンを予測するため、最後の「to」が持つ768次元のベクトルを出力層へ渡します。

文章の途中にある各位置についても学習時には予測値を計算できますが、実際に文章の続きを1トークン生成するときは、現在の末尾位置に対応する出力を使用します。

768次元を50,257次元へ変換する

最後のトークンは768次元のベクトルですが、GPT-2 smallの語彙には50,257種類のトークンがあります。

そこで、線形変換を使って768次元の表現を50,257次元へ変換します。

768次元
   ↓
線形変換
   ↓
50,257次元

50,257個の各出力は、語彙に登録されている一つのトークンに対応します。

出力の位置対応するトークンのイメージ
1番目あるトークンA
2番目あるトークンB
3番目あるトークンC
…………
50,257番目あるトークンZ

この段階で計算される数値を、Logit(ロジット)と呼びます。

【G検定対策コラム①:出力層と語彙(Vocabulary)】

Transformerの最終段では、線形変換によって768次元の表現を語彙数(GPT-2 smallでは50,257)と同じ次元へ変換します。この語彙(Vocabulary)とは、モデルが扱えるトークンの全集合のことです。G検定では、出力層の次元数が語彙サイズと一致する点、そして語彙が大きいほど表現力は増すが計算コストも増す、というトレードオフを押さえておきましょう。なお、この出力層の重みを入力側のToken Embedding行列と共有する「重み共有(Weight Tying)」という工夫もあり、パラメータ削減の手法として知られています。

Logitとは何か

Logitは、次のトークンとしてどの程度有力かを表す点数です。

例えば、次の文章に続くトークンを予測するとします。

日本の首都は

説明用に単純化すると、次のようなLogitが得られるイメージです。

候補トークンLogit
東京8.5
大阪4.2
京都3.8
日本2.1

「東京」のLogitが最も大きいため、次のトークンとして最も有力です。

ただし、Logitは確率ではありません。

Logitには、次のような特徴があります。

  • 合計が1になるとは限らない
  • 負の値になることもある
  • 上限や下限が決まっていない
  • 値の大小によって候補の強さを比較できる

Logitをそのままでは確率として扱えないため、Softmaxを使って確率分布へ変換します。

Softmaxで確率分布を作る

Softmaxは、複数のLogitを、合計が1になる確率へ変換する関数です。

例えば、三つの候補に次のLogitが付いているとします。

[3.0, 2.0, 1.0]

Softmaxを適用すると、おおよそ次の確率になります。

[0.665, 0.245, 0.090]

合計は1です。

0.665 + 0.245 + 0.090 = 1.000

元のLogitが大きい候補ほど、高い確率になります。

候補LogitSoftmax後の確率
候補A3.0約66.5%
候補B2.0約24.5%
候補C1.0約9.0%

Transformer Explainerでは、50,257個のLogitがSoftmaxによって確率分布へ変換され、その確率をもとに次のトークンが選ばれる様子を確認できます。

【G検定対策コラム②:ロジット(Logit)とソフトマックス関数(Softmax)】

Logit(ロジット)は、各トークンが次に来る有力さを表す点数で、確率ではありません。本文のとおり、合計が1にならず、負の値も取り、上限・下限もありません。このLogitをソフトマックス関数(Softmax)に通すと、合計が1になる確率分布へ変換されます。G検定では、Softmaxが多クラス分類の出力層で使われる代表的な関数であること、値の大きい要素ほど高い確率になること(指数関数を使うため差が強調される)が頻出ポイントです。2クラス分類で使うシグモイド関数との対比も定番です。

最も確率が高いトークンを必ず選ぶわけではない

最も単純な選び方は、確率が最大のトークンを常に選ぶ方法です。

この方法は、貪欲法またはGreedy Decodingと呼ばれます。

例えば、次の確率分布があるとします。

候補確率
東京70%
大阪15%
京都10%
その他5%

Greedy Decodingでは、必ず「東京」を選びます。

一方、確率に応じて候補を抽選する方法もあります。

この方法をSampling(サンプリング)と呼びます。

サンプリングでは、「東京」が選ばれる可能性が最も高いものの、場合によっては「大阪」や「京都」が選ばれることもあります。

そのため、同じ入力を与えても、生成される文章が毎回同じになるとは限りません。

【G検定対策コラム③:デコーディング戦略(Greedy・Sampling・Beam Search)】

確率分布から実際にトークンを選ぶ方法をデコーディング戦略と呼びます。本文で登場する貪欲法(Greedy Decoding)は毎回最大確率のトークンを選ぶ方法で、出力は安定しますが単調になりがちです。サンプリング(Sampling)は確率に応じて抽選するため、多様性が生まれ、同じ入力でも出力が変わります。G検定では、もう一つの重要手法としてビームサーチ(Beam Search)も押さえましょう。これは複数の候補系列を同時に保持しながら、文全体としての確率が高い系列を探す方法で、機械翻訳などで使われます。「1トークンごとの最善(Greedy)」と「系列全体の最善を探す(Beam Search)」の違いが理解のポイントです。

Temperatureとは何か

Transformer Explainerの画面上部には、Temperatureを変更する欄があります。

Temperatureは、次のトークンを選ぶ前に、確率分布の形を調整するための値です。

Temperatureは、Softmaxへ入力する前のLogitに対して使われます。

調整後のLogit
= 元のLogit ÷ Temperature

TemperatureをTとすると、計算のイメージは次のようになります。

Softmax(Logit ÷ T)

Temperatureが1の場合、Logitを1で割るため、値は変化しません。1より小さい場合は確率分布が鋭くなり、1より大きい場合は確率分布が平らになります。

Temperatureが1の場合

Temperatureが1の場合は、元のLogitをそのままSoftmaxへ渡します。

Logit ÷ 1 = Logit

したがって、Temperatureによる調整は行われません。

候補調整前のLogitTemperature 1で割った後
A3.03.0
B2.02.0
C1.01.0

Temperatureを低くすると確率が集中する

Temperatureを0.5にすると、Logitは0.5で割られます。

3.0 ÷ 0.5 = 6.0
2.0 ÷ 0.5 = 4.0
1.0 ÷ 0.5 = 2.0

Logit同士の差が大きくなるため、Softmax後の確率は上位候補へ集中します。

候補Temperature 1Temperature 0.5
A約66.5%約86.7%
B約24.5%約11.7%
C約9.0%約1.6%

最も有力な候補Aが選ばれる可能性が、さらに高くなっています。

Temperatureを低くすると、次のような傾向になります。

  • 確率の高いトークンが選ばれやすい
  • 回答が安定しやすい
  • 同じ入力に対して似た出力になりやすい
  • 意外性のある表現は選ばれにくい

Temperatureを高くすると確率が平らになる

Temperatureを2にすると、Logitは2で割られます。

3.0 ÷ 2 = 1.5
2.0 ÷ 2 = 1.0
1.0 ÷ 2 = 0.5

Logit同士の差が小さくなるため、Softmax後の確率分布は平らになります。

候補Temperature 1Temperature 2
A約66.5%約50.6%
B約24.5%約30.7%
C約9.0%約18.6%

候補Bや候補Cが選ばれる可能性が高くなっています。

Temperatureを高くすると、次のような傾向になります。

  • 幅広い候補が選ばれやすい
  • 出力の多様性が高まる
  • 同じ入力でも異なる文章になりやすい
  • 文脈に合わない候補も選ばれやすくなる

Temperatureが高い状態は「創造性が高い」と表現されることがあります。

ただし、モデルが人間のような創造力を獲得するわけではありません。

正確には、確率の低い候補も選ばれやすくなり、出力の多様性が増えるという意味です。

Temperatureによる違いを山の形で考える

確率分布を山に例えると、Temperatureの働きを理解しやすくなります。

Temperatureが低い場合

確率
 │          ▲
 │         ▲▲▲
 │        ▲▲▲▲▲
 │_______▲▲▲▲▲▲▲_______
          候補

高い山が一つでき、上位候補へ確率が集中します。

Temperatureが高い場合

確率
 │      ▲▲▲▲▲▲▲
 │    ▲▲▲▲▲▲▲▲▲▲
 │  ▲▲▲▲▲▲▲▲▲▲▲▲▲
 │____________________
          候補

山が低く広がり、多くの候補が選ばれる可能性を持ちます。

Transformer ExplainerでTemperatureを試す

Transformer Explainerの上部で、Temperatureを変更してGenerateボタンを押してください。

Temperatureを0.2にする

Temperatureを0.2程度に設定すると、確率の高い少数のトークンへ分布が集中します。

Generateを複数回押しても、上位のトークンが繰り返し選ばれやすくなります。

Temperatureを1にする

Temperatureを1にすると、モデルが計算した元のLogitをそのままSoftmaxへ渡します。

Temperatureを2程度にする

Temperatureを高くすると、確率分布が平らになります。

Generateを複数回押すと、上位以外のトークンも選ばれやすくなります。

Transformer Explainerでは、Temperatureを変更したときに、各候補の確率がその場で更新されます。

Temperatureを高くしすぎるとどうなるのか

Temperatureを高くしすぎると、本来は確率が低かったトークンまで選ばれやすくなります。

その結果、次のような問題が起こる可能性があります。

  • 話題が突然変わる
  • 文法的に不自然な文章になる
  • 事実性が低下する
  • 質問と関係のない内容が出力される
  • 文章全体の一貫性が失われる

Temperatureは、高ければ高いほどよいという値ではありません。

目的に応じて調整する必要があります。

用途Temperatureの考え方
事実に基づく説明比較的低め
プログラムコードの生成比較的低め
定型的なビジネス文書低めから中程度
アイデア出し中程度からやや高め
物語やキャッチコピー目的に応じて高め

実際の適切な設定値は、使用するモデルやサービス、求める出力によって異なります。

【G検定対策コラム④:温度パラメータ(Temperature)】

Temperature(温度)は、Softmax適用前のLogitを割ることで確率分布の鋭さを調整するパラメータで、生成AIの制御に関わる頻出用語です。本文の計算(Logit ÷ T)のとおり、T<1では分布が鋭くなり上位候補へ集中(出力が安定)、T>1では分布が平らになり多様な候補が選ばれます(出力が多様)。T=1で調整なし。「高いほど創造的」と表現されますが、正確には「確率の低い候補も選ばれやすくなり多様性が増す」という意味であり、高すぎると一貫性や事実性が損なわれる点も本文どおり押さえましょう。用途に応じて調整する実践的パラメータです。

Top-kとは何か

Temperatureを調整しても、語彙に含まれるすべてのトークンには、非常に小さくても一定の確率が残る場合があります。

そこで、候補を確率上位の一定数だけに絞る方法が使われます。

これが、Top-k Samplingです。

例えば、次の候補があるとします。

順位候補確率
1A40%
2B25%
3C15%
4D10%
5E5%
6以下その他合計5%

Top-kを3に設定すると、上位3候補だけを残します。

残す候補:A、B、C
除外する候補:D、E、その他

除外された候補の確率は0になります。

残った候補の確率は、合計が1になるように再調整されます。

候補絞り込み前Top-k適用後のイメージ
A40%50%
B25%31.25%
C15%18.75%
D以下20%0%

Transformer Explainerでは、Top-kを設定すると、確率が高い上位k個のトークンだけがサンプリング候補になります。

Top-kの特徴

Top-kでは、候補数が常に一定です。

Top-kを5に設定すれば、確率分布の形にかかわらず、原則として上位5候補を残します。

そのため、次のような状況が起こります。

上位候補に確率が集中している場合

候補確率
A90%
B5%
C2%
D1%
E0.5%

Top-kを5にすると、確率が非常に低いDやEも候補に残ります。

確率が分散している場合

候補確率
A15%
B14%
C13%
D12%
E11%
F10%

Top-kを5にすると、10%の確率を持つFであっても除外されます。

Top-kは分かりやすい方法ですが、確率分布に応じて候補数を変えることはできません。

Top-pとは何か

確率分布に応じて候補数を動的に変える方法が、Top-p Samplingです。

Nucleus Samplingとも呼ばれます。

Top-pでは、確率が高い順に候補を並べ、累積確率が指定したp以上になるまで候補を残します。

例えば、Top-pを0.8に設定したとします。

順位候補確率累積確率
1A40%40%
2B25%65%
3C15%80%
4D10%90%
5E10%100%

A、B、Cまでで累積確率が80%に達するため、候補は次の三つになります。

A、B、C

DとEは除外されます。

Transformer Explainerでは、Top-pを指定すると、累積確率がしきい値pを超える最小の候補集合から次のトークンを選びます。

Top-pでは候補数が変化する

Top-pの特徴は、確率分布の状態によって候補数が変わることです。

一つの候補が非常に強い場合

候補確率累積確率
A85%85%
B5%90%
C4%94%

Top-pが0.8なら、候補Aだけでしきい値に達します。

確率が分散している場合

候補確率累積確率
A25%25%
B20%45%
C15%60%
D12%72%
E10%82%

Top-pが0.8なら、AからEまでの5候補が残ります。

このように、Top-pではモデルの確信度に応じて候補数が変化します。

Top-kとTop-pの違い

項目Top-kTop-p
候補の選び方上位k個を残す累積確率がpに達するまで残す
候補数基本的に固定確率分布によって変化
設定例Top-k=5Top-p=0.9
長所仕組みが分かりやすい確信度に応じて候補数を調整できる

どちらも、確率が極端に低い不自然なトークンを候補から外しつつ、一定の多様性を残すために使われます。

Temperature・Top-k・Top-pの役割

三つの設定は似ていますが、それぞれ役割が異なります。

設定変更するもの主な効果
Temperature確率分布の鋭さ上位候補への集中度を変える
Top-k候補の個数上位k個だけを残す
Top-p候補の累積確率確率の合計がpに達する候補だけを残す

処理のイメージは次のとおりです。

50,257個のLogit
        ↓
Temperatureで分布を調整
        ↓
Softmaxで確率へ変換
        ↓
Top-kまたはTop-pで候補を絞る
        ↓
残った候補の確率を再調整
        ↓
サンプリング
        ↓
次のトークンを一つ選ぶ

実際のライブラリやサービスでは、処理順や利用できる設定が異なる場合があります。

【G検定対策コラム⑤:Top-k・Top-p(Nucleus Sampling)】

Top-kサンプリングは確率上位k個の候補だけを残す方法、Top-pサンプリング(別名Nucleus Sampling/核サンプリング)は累積確率がpに達するまでの候補を残す方法です。両者ともG検定で問われる用語です。違いの核心は候補数で、Top-kは常に固定個数(分布によっては不自然な候補も残る、逆に有力な候補を切ることもある)、Top-pは確率分布に応じて候補数が動的に変わる(モデルの確信度が高いときは少数、迷っているときは多数)点です。Temperatureが「分布の形」を、Top-k/Top-pが「候補の範囲」を調整するという役割分担で整理すると混同しにくくなります。

次のトークンを文章へ追加する

候補の中から一つのトークンが選ばれると、そのトークンを現在の文章の末尾へ追加します。

例えば、次の文章が入力されているとします。

Data visualization empowers users to

次のトークンとして「understand」が選ばれた場合、文章は次のようになります。

Data visualization empowers users to understand

モデルは、更新された文章全体をもう一度入力として使います。

そして、さらに次のトークンを予測します。

Data visualization empowers users to
        ↓
understandを予測
        ↓
Data visualization empowers users to understand
        ↓
次のトークンを予測
        ↓
文章が少しずつ伸びる

この処理を、終了を表すトークンが選ばれるか、設定された最大長へ達するまで繰り返します。

【G検定対策コラム⑥:自己回帰的生成(Autoregressive Generation)】

本文末尾のとおり、選んだトークンを文末に追加し、更新した文章全体を再び入力して次のトークンを予測する——この繰り返しで文章を生成する方式を自己回帰的生成(Autoregressive Generation)と呼びます。GPTはこの自己回帰型の代表で、G検定では第4回の因果マスク(Causal Mask)とセットで問われます。生成は、終了トークン(EOSトークン)が選ばれるか最大長に達するまで続く点も押さえましょう。1トークンずつ順に生成するため、双方向に一括処理するBERT系(穴埋め型/Masked Language Model)とは生成の仕組みが根本的に異なる、という対比が重要です。

Transformer Explainerで確認するポイント

Transformer ExplainerのOutput Probabilitiesを操作し、次の点を確認してください。

  1. 最後のトークンの768次元ベクトルが出力層へ渡される
  2. 768次元が50,257次元へ変換される
  3. 各語彙トークンにLogitが計算される
  4. SoftmaxによってLogitが確率へ変換される
  5. Temperatureを下げると上位候補へ確率が集中する
  6. Temperatureを上げると確率分布が平らになる
  7. Top-kでは上位k個の候補だけが残る
  8. Top-pでは累積確率に応じて候補数が変わる
  9. Generateを押すたびに、選択されたトークンが文章へ追加される
  10. 追加後の文章を使って、再び次トークン予測が行われる

Transformer全体の流れ

ここまでの全6回で説明したTransformerの流れをまとめます。

入力文章
  ↓
Tokenization
文章をトークンへ分割
  ↓
Token Embedding
トークンを数値ベクトルへ変換
  ↓
Positional Encoding
トークンの位置情報を追加
  ↓
Multi-Head Self-Attention
トークン同士の関係を計算
  ↓
Causal Mask
未来のトークンを参照できないようにする
  ↓
MLP
各トークンの特徴を個別に加工
  ↓
残差接続・Layer Normalization
情報と学習を安定させる
  ↓
複数のTransformer Block
文脈を反映した表現へ段階的に更新
  ↓
Linear Layer
語彙数と同じ数のLogitを計算
  ↓
Softmax
次トークンの確率分布を作る
  ↓
Temperature・Top-k・Top-p
確率分布と候補を調整
  ↓
Sampling
次のトークンを一つ選ぶ
  ↓
選んだトークンを文章へ追加
  ↓
同じ処理を繰り返す

【G検定対策コラム⑦(総まとめ):Transformerの全体像とG検定頻出ポイント】

全6回で扱った処理は、G検定のTransformer関連問題を解く上での核心です。試験前に次の流れで頭を整理しておきましょう。①トークン化 → ②埋め込み(分散表現)+位置エンコーディング → ③Multi-Head Self-Attention(Q・K・V、Scaled Dot-Product、因果マスク)→ ④MLP(GELU・残差接続・Layer Normalization)→ ⑤出力層でLogit → ⑥Softmax+サンプリング(Temperature・Top-k・Top-p)。加えて、Transformerが2017年「Attention Is All You Need」由来であること、RNN比の優位(長距離依存・並列計算)、派生モデルのBERT(双方向・エンコーダ型)とGPT(自己回帰・デコーダ型)の違いを押さえれば、この分野は得点源になります。

今回のまとめ

  • 最後のTransformer Blockを通過した後、次トークン予測を行う
  • 文章生成時には、現在の末尾位置に対応する表現を使用する
  • GPT-2 smallでは、768次元を50,257次元へ変換する
  • 語彙中の各トークンにLogitと呼ばれる点数が付く
  • Logitは確率ではなく、候補の有力さを表す数値である
  • Softmaxによって、Logitを合計1の確率分布へ変換する
  • Temperatureを低くすると、確率が上位候補へ集中する
  • Temperatureを高くすると、幅広い候補が選ばれやすくなる
  • Top-kは、確率上位のk個だけを候補として残す
  • Top-pは、累積確率がpへ達するまでの候補を残す
  • 選ばれたトークンを文章へ追加し、次のトークンを再び予測する
  • この処理の繰り返しによって、長い文章が生成される

Transformerの基本動作は、次のトークンを予測することです。

しかし、その一回の予測には、トークン化、埋め込み、位置情報、Self-Attention、MLP、Softmax、サンプリングといった多くの処理が組み合わされています。

Transformer Explainerで各部分を実際に操作すると、ChatGPTなどの文章生成AIが、どのように入力を数値へ変換し、文脈を取り込み、次のトークンを選んでいるのかを視覚的に理解できます。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。