GPTではなぜロジットが大切なのか?

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

前回はレイヤー正規化を扱いました。今回は、モデルの最終段階にあたるロジットの話です。

GPTは、次に来る単語を確率で出力します。ではなぜ、途中の計算はすべて確率ではない値で行われ、最後の最後にSoftmaxを通すのでしょうか。最初から確率を出すように作れば、話は簡単なはずです。

答えは、確率のままでは扱いにくいからです。この記事では、ロジットという中間の表現が、なぜ言語モデルの設計に不可欠なのかを解説します。

結論

ロジットが重要な理由は、四つあります。

一つ目は、差が対数オッズになることです。ロジットの引き算が、そのまま確率の比の対数になります。

二つ目は、勾配が極めて単純になることです。Softmaxと交差エントロピーを組み合わせると、勾配は予測と正解の差という一行の式になります。

三つ目は、数値計算が安定することです。確率のまま扱うと、桁が潰れて計算が破綻します。

四つ目は、証拠が足し算で積み上がることです。残差接続によって層ごとに情報を足していく構造と、対数の世界での加算が自然に対応します。

温度調整、top-k、top-pといった生成の制御も、すべてロジットの空間で行われます。

GPTにおけるロジットとは何か

出力層の計算

最終層の隠れ状態を h とします。GPT-2のsmallモデルであれば768次元です。

ここに、埋め込み行列の転置を掛けます。

z = h W_e^{T}

W_e は語彙数×768の行列です。GPT-2の語彙数は50257ですので、出力 z は50257次元のベクトルになります。

この z がロジットです。各要素が、対応する単語に対する得点を表します。

そしてSoftmaxを通します。

p_i = \frac{e^{z_i}}{\sum_{j} e^{z_j}}

これで確率になります。

重み共有という設計

注目すべきは、入力の埋め込み行列と同じものを、出力でも使っている点です。これを重み共有(weight tying)といいます。

この設計により、ロジットの各要素は次の形になります。

z_i = h \cdot e_i

つまり、最終的な隠れ状態と、単語 i の埋め込みベクトルとの内積です。

以前の記事で、埋め込みの意味は方向にあると書きました。ロジットは、モデルが到達した方向と、各単語の方向がどれだけ一致しているかを測っています。

h \cdot e_i = |h| |e_i| \cos\theta

角度が小さいほど得点が高くなります。50257個の単語すべてと角度を比べ、最も向きの近いものを選ぶ。これがGPTの出力の実体です。

理由1 差が対数オッズになる

シフト不変性

Softmaxには、重要な性質があります。すべての要素に同じ定数を足しても、結果が変わりません。

\text{softmax}(z + c) = \text{softmax}(z)

証明は簡単です。

\frac{e^{z_i + c}}{\sum_j e^{z_j + c}} = \frac{e^{c} e^{z_i}}{e^{c} \sum_j e^{z_j}} = \frac{e^{z_i}}{\sum_j e^{z_j}}

分子と分母の e^{c} が約分されます。

これが意味するのは、ロジットの絶対値には意味がないということです。意味を持つのは、要素どうしの差だけです。

前回のレイヤー正規化の記事で、平均を引く操作がすべての成分が1であるベクトルの方向を取り除くことに相当すると書きました。ロジットのシフト不変性は、これと同じ構造です。50257次元のうち、1次元分は冗長です。

差の意味

では、差は何を表すのでしょうか。二つの単語の確率の比を計算してみます。

\frac{p_i}{p_j} = \frac{e^{z_i}}{e^{z_j}} = e^{z_i - z_j}

両辺の対数を取ります。

\log \frac{p_i}{p_j} = z_i - z_j

ロジットの差が、確率の比の対数、すなわち対数オッズになります。

数値で確認します。三つの単語のロジットが次の通りだとします。

z = (2, 1, 4)

最大値の4を引きます。シフト不変性により、結果は変わりません。

z - 4 = (-2, -3, 0)

指数を計算します。

e^{-2} \approx 0.1353, \quad e^{-3} \approx 0.0498, \quad e^{0} = 1

合計は次の通りです。

0.1353 + 0.0498 + 1 = 1.1851

確率は次のようになります。

p \approx (0.1142, 0.0420, 0.8438)

三番目と一番目の比の対数を計算します。

\log \frac{0.8438}{0.1142} = \log 7.389 \approx 2.0

元のロジットの差は 4 - 2 = 2 です。一致しました。

つまり、ロジットの差が1増えるごとに、確率の比は e 倍になります。ロジットは、対数の目盛りで測った確からしさだといえます。

理由2 勾配が単純になる

これが、実用上おそらく最も重要な理由です。

損失関数

正解の単語を t とすると、交差エントロピー損失は次の形です。

L = -\log p_t

これを展開します。

L = -\log \frac{e^{z_t}}{\sum_j e^{z_j}} = -z_t + \log \sum_j e^{z_j}

勾配の導出

z_i で偏微分します。第一項は、i = t のときだけ -1 になります。

第二項を微分します。

\frac{\partial}{\partial z_i} \log \sum_j e^{z_j} = \frac{e^{z_i}}{\sum_j e^{z_j}} = p_i

合わせると、次のようになります。

\frac{\partial L}{\partial z_i} = p_i - y_i

ここで y_i は正解であれば1、それ以外は0を取る値です。

結果を見てください。予測した確率から正解を引くだけです。50257次元の複雑な計算の後に、これほど単純な式が出てきます。

なぜこれが重要か

Softmax単体では、勾配が飽和します。確率が1や0に近づくと、微分の値がほぼゼロになり、学習が止まります。

しかし交差エントロピーと組み合わせると、この飽和が打ち消されます。上の式を見れば分かる通り、予測が正解から離れているほど、勾配は大きくなります。p_t が0.01であれば、勾配の大きさは0.99です。学習が最も必要なときに、最も強い信号が流れます。

もしモデルが直接確率を出力し、そこに損失を掛けていたら、この性質は得られません。ロジットという中間表現があるからこそ、この組み合わせが成立します。

理由3 数値計算が安定する

桁あふれの問題

指数関数は急速に大きくなります。単精度浮動小数点数の最大値はおよそ 3.4 \times 10^{38} です。

e^{89} \approx 4.5 \times 10^{38}

ロジットが89を超えるだけで、計算が破綻します。学習中にロジットが100を超えることは、珍しくありません。

log-sum-expによる回避

対策は、シフト不変性の利用です。最大値を m とすると、次のように変形できます。

\log \sum_j e^{z_j} = m + \log \sum_j e^{z_j - m}

指数の中身がすべて0以下になるため、指数の値は必ず1以下です。あふれる心配がありません。

先ほどの計算で最大値の4を引いたのは、この手法です。実装上、Softmaxは必ずこの形で計算されます。

確率のまま扱った場合

もし確率を直接扱うと、別の問題が起きます。

\frac{1}{50257} \approx 1.99 \times 10^{-5}

低確率の単語では、値が極端に小さくなります。これを何度も掛け合わせると、桁が下方向にあふれます。文の確率を求める際、100トークンの積を取ると次のようになります。

(10^{-5})^{100} = 10^{-500}

単精度では表現できません。対数を取れば、これは足し算になります。

\log \prod_i p_i = \sum_i \log p_i = -500 \log 10 \approx -1151

扱える範囲に収まります。

理由4 証拠が足し算になる

ベイズとの対応

対数オッズには、美しい性質があります。ベイズの定理を対数オッズで書くと、次の形になります。

\log \frac{P(H|E)}{P(\neg H|E)} = \log \frac{P(H)}{P(\neg H)} + \log \frac{P(E|H)}{P(E|\neg H)}

事後の対数オッズは、事前の対数オッズに、証拠の対数尤度比を足したものになります。掛け算が足し算になっています。

残差ストリームとの対応

前回の記事で、残差接続の式を確認しました。

x_{l+1} = x_l + F(x_l)

各層が、共通の情報経路に自分の計算結果を足し込みます。この経路を残差ストリームと呼びます。

そして最後に、この経路の値と単語埋め込みの内積がロジットになります。内積は線形ですから、次のように分解できます。

z_i = \left( x_0 + \sum_{l} F_l \right) \cdot e_i = x_0 \cdot e_i + \sum_{l} F_l \cdot e_i

各層の寄与が、ロジットへの寄与として足し算で分解されます。

つまり、Transformerの構造そのものが、対数オッズの空間で証拠を積み上げる形になっています。ある層が特定の単語の可能性を押し上げ、別の層が押し下げる。その総和が最終的な判断になります。

確率の空間では、この加法的な分解は成立しません。ロジットの空間だからこそ、層ごとの寄与を分離して考えられます。

生成の制御はすべてロジット空間で行われる

実務で生成を調整する場面でも、操作の対象はロジットです。

温度

温度パラメータ T を導入します。

p_i = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}}

ロジットを T で割ってからSoftmaxを通します。

先ほどの z = (2, 1, 4) で計算してみます。

T = 0.5 の場合、ロジットは (4, 2, 8) になります。最大値の8を引きます。

(-4, -6, 0)

e^{-4} \approx 0.0183, \quad e^{-6} \approx 0.0025, \quad e^{0} = 1

合計は約1.0208です。

p \approx (0.0179, 0.0024, 0.9796)

T = 2 の場合、ロジットは (1, 0.5, 2) です。最大値の2を引きます。

(-1, -1.5, 0)

e^{-1} \approx 0.3679, \quad e^{-1.5} \approx 0.2231, \quad e^{0} = 1

合計は約1.5910です。

p \approx (0.2312, 0.1402, 0.6285)

比較すると次のようになります。

温度最有力候補の確率挙動
0.50.980決定的。同じ出力になりやすい
1.00.844標準
2.00.629多様。予想外の語が出やすい

温度を下げると差が拡大され、上げると平坦になります。ロジットの差が対数オッズであることを思い出せば、温度は「証拠の重みを何倍に見積もるか」を決めていることになります。

top-kとtop-p

top-kは、ロジットの高い順にk個だけ残し、他を -\infty にします。e^{-\infty} = 0 ですから、確率がゼロになります。

top-pは、確率の高い順に累積し、指定した割合に達するまでの候補だけを残します。こちらは確率を計算してから選びますが、除外の操作自体はロジットに対して行われます。

いずれも、Softmaxを通す前の段階で介入しています。

統計のロジット変換との関係

ここで、統計学でいうロジット変換との対応を確認します。

統計では、確率 p に対して次の変換をロジットと呼びます。

\text{logit}(p) = \log \frac{p}{1-p}

これは、二値分類の場合の対数オッズです。

GPTのロジットとの関係を見ます。二つの選択肢しかない場合を考えます。

p_1 = \frac{e^{z_1}}{e^{z_0} + e^{z_1}}, \quad p_0 = \frac{e^{z_0}}{e^{z_0} + e^{z_1}}

対数オッズを計算します。

\log \frac{p_1}{p_0} = z_1 - z_0

統計のロジット変換は、GPTのロジットの差の二値版です。同じものを指しています。

Softmaxは、ロジット変換の逆関数を多クラスに拡張したものだと理解できます。ロジスティック回帰と言語モデルの出力層が、同じ数学の上に立っていることが分かります。

ロジットレンズという解析手法

ロジットの性質を利用した解釈可能性の手法があります。ロジットレンズと呼ばれます。

やり方は単純です。最終層だけでなく、途中の層の残差ストリームに対しても、最終のレイヤー正規化と埋め込み行列の転置を適用します。

z^{(l)} = \text{LN}(x_l) W_e^{T}

こうすると、各層の時点でモデルが何を予測しているかが読み取れます。

観察される典型的な傾向は、次の通りです。浅い層では、直前の単語の繰り返しや、頻出語が上位に来ます。層が進むにつれて、文脈に適した単語が浮上します。最終層に近づくと、予測が確定します。

この手法が成立するのは、残差ストリームと出力層が線形の内積で結ばれているからです。前回扱った前置正規化の構造が、この解析を可能にしています。

ただし、途中の層の表現は、最終層の埋め込み空間と完全に整合しているわけではありません。読み取れる情報には限界があり、改良手法も提案されています。

研修での教え方

このテーマを扱う場合、次の順序を推奨します。

  1. 出力が50257次元であることを確認する
  2. シフト不変性を証明させる。約分するだけなので、その場でできる
  3. ロジットの差が対数オッズになることを、数値で確かめさせる
  4. 交差エントロピーの勾配を導出させる。p - y になる驚きを共有する
  5. 温度を変えて確率がどう動くかを計算させる
  6. 数値のあふれの問題に触れ、log-sum-expを紹介する

所要時間は60分程度です。4番の導出が、この回の山場になります。

受講者からよく出る質問と回答例を挙げます。

質問。なぜ最初から確率を出力するように作らないのですか。 回答。確率には、非負であることと合計が1であることという制約があります。ニューラルネットワークの出力に、この制約を直接課すのは面倒です。制約のない実数を出力し、最後にSoftmaxで変換するほうが、設計も学習も単純になります。

質問。ロジットに上限や下限はありますか。 回答。数学的にはありません。実際には、隠れ状態と埋め込みベクトルの大きさに依存します。学習が進むと、モデルは自信のある予測に対して大きな差を出すようになります。

理解度を確認する問い

  • Softmaxのシフト不変性を証明してください
  • ロジットの差は、確率の何を表しますか
  • 交差エントロピー損失をロジットで微分すると、どのような式になりますか
  • 温度を下げると、確率分布はどう変化しますか
  • log-sum-expの変形は、何を防ぐために行われますか

まとめと次の学習ステップ

ロジットは、確率になる一歩手前の値です。しかし、この一歩手前であることに意味があります。

差が対数オッズになるため、証拠の強さを加法的に扱えます。交差エントロピーと組み合わせると、勾配が予測と正解の差という単純な形になります。指数の桁あふれを避けられます。そして、残差ストリームの各層の寄与を、ロジットへの足し込みとして分解できます。

温度もtop-kも、すべてこの空間での操作です。生成の挙動を制御したいなら、ロジットの分布を理解することが出発点になります。

次に学ぶなら、サンプリング手法に進むとよいでしょう。貪欲法、ビームサーチ、top-p、そして繰り返しに対する罰則。いずれもロジットまたはそこから得た確率をどう扱うかという問題です。

あわせて、モデルの確信度の較正という話題も押さえておくと、実務に直結します。モデルが出した確率が、実際の正解率と一致しているかという問題です。ロジットに定数を掛けて調整する温度スケーリングという手法があり、この記事で扱った温度と同じ仕組みが、別の目的で使われています。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

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

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