技術 約22分で読めます

AIの記事でよく出る確率と統計、ここだけ読めれば怖くない

いけさん目次

AI系の記事を読んでいると、数式のあとに今度は確率や統計の記号が出てくる。 P(x|y) とか log とか H(p, q) あたりが急に並ぶと、そこで閉じたくなる。

この記事はその流れで出てくる確率・統計まわりの記号を、解けるようになるためではなく読めるようになるためにまとめる。 前の数式ベクトル・行列の記事に続く3本目だが、この記事単独でも読めるようにしてある。

ベイズや最尤推定の厳密な導出は出さない。 条件付き確率・交差エントロピー・パープレキシティ・temperatureあたりが読めれば、LLMの学習ログやモデルカードはだいぶ読める。

確率は「起こりやすさを0〜1で表した数字」

まず記号から。

AI記事で一番よく出てくるのは P(x)P(x) という書き方だ。 これは「xx というイベントが起こる確率」を表している。

  • P(x)=0P(x) = 0: 絶対に起こらない
  • P(x)=1P(x) = 1: 確実に起こる
  • P(x)=0.3P(x) = 0.3: 30%の確率で起こる

読み方もそれだけで、難しい話は一切ない。 天気予報の「降水確率70%」が P()=0.7P(\text{雨}) = 0.7 になる、くらいの感覚で十分だ。

イベントの候補が複数あるとき、それぞれの確率を全部足すと必ず1になる。

P(晴れ)+P(曇り)+P()=1P(\text{晴れ}) + P(\text{曇り}) + P(\text{雨}) = 1

「どれかは必ず起こる」と言っているだけだ。 このあと出てくる確率分布や softmax も、突き詰めるとこの「全部足して1」のルールを守るための仕組みになっている。

条件付き確率 P(AB)P(A | B) は「Bが起こった上でのAの確率」

次に出てくるのが縦棒入りの P(AB)P(A | B) という書き方だ。 これは「BB が起こった条件の下で、AA が起こる確率」を表す。 縦棒の右側が「前提」、左側が「知りたいこと」になる。

  • P(曇り)P(\text{雨} | \text{曇り}): 曇っているときに雨が降る確率
  • P(陽性感染)P(\text{陽性} | \text{感染}): 感染しているときに検査で陽性が出る確率
  • P(感染陽性)P(\text{感染} | \text{陽性}): 検査で陽性が出たときに実際に感染している確率

最後の2つが逆に見えるのが肝で、縦棒の両側を入れ替えると意味がまったく変わる。 この辺の「ひっくり返す」話がベイズの定理につながるが、この記事では深追いしない。

LLMは条件付き確率で次の単語を予測している

LLMがやっている処理も、突き詰めるとこの条件付き確率の計算に落ちる。

P(次のトークンこれまでのトークン列)P(\text{次のトークン} | \text{これまでのトークン列})

たとえば「今日の天気は」という入力があったとき、LLMは語彙全体(数万〜十数万トークン)にわたって、次に来る確率を計算する。

候補確率
晴れ0.42
曇り0.18
0.15
良い0.08
…(他の数万候補)残り

全部足すと1になる確率の並びが出てきて、ここから1つ選ぶ(あるいは一番高いものを採用する)のが生成の1ステップだ。 この「並び」が次に出てくる確率分布で、「スコアからこの並びを作る装置」が softmax になる。

確率分布は「候補ごとの確率を並べたもの」

さっきの表のように、候補ごとに確率を並べたものを 確率分布 と呼ぶ。 分布と言われると身構えるが、中身はただの確率の並びだ。

  • 候補が有限個 → 離散分布(LLMのトークン予測はこっち)
  • 候補が連続値 → 連続分布(正規分布など)

AI周りの記事で一番よく出てくるのは離散分布のほうで、「語彙全体にわたる確率のベクトル」として登場する。 ベクトルの各要素が「そのトークンが選ばれる確率」で、全部足すと1になる。

つまり、LLMの出力層が返しているのは数万次元の確率分布だ、と読める。

softmaxは「スコアを確率分布に変える装置」

モデルの内部では、各候補に対して「スコア」と呼ばれる生の数字(プラスでもマイナスでも任意の値)が出てくる。 この段階ではまだ確率ではない。全部足しても1にならないし、マイナスの値もある。

これを確率分布に直すのが softmax だ。

softmax(xi)=exijexj\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}

記号が多いが、やっていることは2段階だけだ。

  1. 各スコアを exe^x に通してプラスの値にする(exe^x はどんな値でも必ず正になる)
  2. 全部足した値で割って、合計が1になるように揃える

結果として、全部足すと1になる確率の並びが出てくる。 softmaxの細かい話は前の数式の記事にまとめてあるので、ここでは「スコアから確率分布を作る装置」と覚えておけば十分だ。

LLMの最終出力も、画像分類の最後のクラス判定も、softmaxを通った確率分布を見ている。

期待値 E[X]E[X] は「加重平均」の言い換え

次に出てくるのが期待値 E[X]E[X] という書き方だ。 「期待」と付くと何かの予測みたいに見えるが、中身はただの加重平均になる。

E[X]=xxP(x)E[X] = \sum_x x \cdot P(x)

「値 xx × その確率 P(x)P(x)」を全部足しているだけだ。

たとえばサイコロを振ったときの出目の期待値は、

E[X]=116+216++616=3.5E[X] = 1 \cdot \tfrac{1}{6} + 2 \cdot \tfrac{1}{6} + \cdots + 6 \cdot \tfrac{1}{6} = 3.5

となる。 毎回3.5が出るわけではなく、「たくさん振るとだいたいこの値の周りに落ち着く」という意味だ。

前の記事の重み付き足し算 y=w1x1+w2x2+y = w_1 x_1 + w_2 x_2 + \cdots と並べてみると、形がそっくりだ。 重みの部分が確率に変わっただけで、やっていることは変わらない。 強化学習の「期待報酬」やAttentionの「重み付き取り出し」など、AI記事の各所で期待値という言葉が出てくるが、どれも中身はこの加重平均だと思っておけばいい。

分散と標準偏差は「散らばり具合」

分散と標準偏差は、確率統計の入り口で一番とっつきにくい記号の一つだ。 実際の式はこうなる。

  • 分散 Var(X)=E[(XE[X])2]\text{Var}(X) = E[(X - E[X])^2]
  • 標準偏差 σ=Var(X)\sigma = \sqrt{\text{Var}(X)}

記号がネストしていて読みにくいが、ここはまとめて眺めず、何を1ステップずつやっているかに分けるとぐっと読みやすくなる。

まず「散らばり具合って何?」

具体例から入る。 2クラスでテストの点数がこうだったとする。

  • クラスA: 50, 50, 50, 50, 50 (平均50)
  • クラスB: 30, 40, 50, 60, 70 (平均50)

平均はどっちも同じ50だが、クラスAは全員ぴったり平均、クラスBはけっこうバラついている。 この「同じ平均でも様子が違う」を1つの数字で表したいのが散らばり具合の指標だ。

ステップ1: 各値が平均からどれだけズレているか

最初にやるのは、それぞれの値と平均の差を取ることだ。 クラスBでやるとこうなる。

平均差(ズレ)
3050-20
4050-10
50500
6050+10
7050+20

これが XE[X]X - E[X] の部分だ。E[X]E[X] は前のセクションで出てきた期待値(平均)で、XE[X]X - E[X] が「ある値が平均からどっち方向にどれだけズレているか」を表している。 式の一番奥のパーツは、ただの引き算になっている。

ステップ2: プラスとマイナスを打ち消させないために2乗する

このズレをそのまま足すと、プラスとマイナスが打ち消し合って常に0になる。 実際 (20)+(10)+0+10+20=0(-20) + (-10) + 0 + 10 + 20 = 0 だ。 これだと「散らばってない」のか「たまたま上下がちょうど打ち消し合っているだけ」なのか区別がつかない。

対策として、ズレを2乗してから足す。 (20)2=400(-20)^2 = 400102=10010^2 = 100 のように全部プラスになるので、打ち消しが起きない。

ズレズレの2乗
30-20400
40-10100
5000
60+10100
70+20400

これが (XE[X])2(X - E[X])^2 の部分で、ステップ1のズレに2乗が足されただけだ。

「絶対値でも良いのでは?」と思うかもしれないが、絶対値はグラフが折れ曲がって微分が綺麗にならないので、数学的な扱いやすさで2乗のほうが好まれている。

ステップ3: 2乗したズレの平均が分散

ズレの2乗を全部足して個数で割る、つまり平均を取る。

400+100+0+100+4005=200\frac{400 + 100 + 0 + 100 + 400}{5} = 200

この200が分散だ。 式の外側の E[]E[\,\cdot\,] が「平均を取る」パーツで、中の (XE[X])2(X - E[X])^2 にこれを被せると、分散の定義式まるごとになる。

Var(X)=E[(XE[X])2]\text{Var}(X) = E[(X - E[X])^2]

内側から読むと「ズレを計算する → 2乗する → 平均を取る」で、ステップ1〜3がそのまま入れ子になっている、と見える。

ちなみにクラスA(全員50点)で同じ計算をすると、ズレも、ズレの2乗も、その平均も全部0になって分散0だ。 「全くバラついてない」が「指標=0」にきれいに対応している。

ステップ4: 元の単位に戻すために平方根で標準偏差

ここまでで分散は出たが、分散には1つ使いにくい性質がある。 ズレを2乗したぶん、単位も2乗されてしまっているのだ(点数なら点²、長さならm²みたいになる)。

これを元の単位に戻すために平方根を取ったのが標準偏差になる。

σ=Var(X)=20014.1\sigma = \sqrt{\text{Var}(X)} = \sqrt{200} \approx 14.1

つまりクラスBは「平均50点のまわりに、だいたい14点くらいの幅でバラついている」と読める。 分散200のままだと「200点?」と単位で混乱するが、標準偏差14.1なら「平均から±14点くらい」と直感的に掴める。

AIで分散・標準偏差が出てくる文脈

AI記事で出てくる文脈は主に3つくらいだ。

  • データの前処理(標準化、正規化)で「平均0、分散1に揃える」
  • バッチ正規化・レイヤー正規化の中で似たことをやっている
  • モデルの出力や学習が安定しているかの指標

解けるようになる必要はなくて、「散らばり具合の指標」くらいで読んでいけばいい。

共分散: 2つの値が一緒に動くか

分散は「1つの値が平均からどれだけズレるか」だった。 これを2つの値に広げて、「2つの値が一緒に動くか、逆に動くか」を測るのが 共分散 だ。

Cov(X,Y)=E[(XE[X])(YE[Y])]\text{Cov}(X, Y) = E[(X - E[X])(Y - E[Y])]

XX が平均より上に振れたとき YY も平均より上に振れていれば、掛け算の中身がプラス×プラスで正の値がたまる。 逆に XX が上に振れたとき YY が下に振れていれば、プラス×マイナスで負の値がたまる。 無関係ならプラスとマイナスが打ち消し合って0に近くなる。

ここで X=YX = Y にすると Cov(X,X)=E[(XE[X])2]\text{Cov}(X, X) = E[(X - E[X])^2] になって、分散そのものになる。 分散は「自分自身との共分散」、共分散は「2つの値版の分散」と思えばいい。

AIじゃない側の例: FFTと相関係数

AIの外にも分散・共分散はよく出てくる。 自分が以前書いたカラオケ採点の記事では、FFTで音声を周波数成分に分解したあと、入力音声とお手本音声がどれくらい似ているかを 相関係数 で測っていた。

ρAB=Cov(A,B)s(A)s(B)\rho_{AB} = \frac{\text{Cov}(A, B)}{s(A) \cdot s(B)}

s(A)s(A), s(B)s(B) がそれぞれの標準偏差だ。 共分散だけだと元の値のスケールに引っ張られて大きさが比較しにくいので、両者の標準偏差で割って-1〜1のスケールに揃えている。 「ただ同じ値になっているか」ではなく「同じような上がり下がりをしているか」を見たいときの定番の形だ。

AIの世界でも embedding 同士の類似度や、特徴量の前処理でこの発想がそのまま再利用されている。 分散・共分散・標準偏差は「生の値のスケールを揃えるための道具」として、AI・非AIを問わず同じ形で出てくる、と思っておけば足りる。

対数 log\log は「確率の足し算をしやすくする道具」

確率の式を読むと急に log\log が出てくることが多い。 log\log は中高で出てきて苦手になった人も多いやつで、「掛け算が足し算になる」と言われても「なぜ?」「どこで使うの?」が残りやすい。 ここはAIの話に入る前に、その2つだけ解いておく。

そもそも log\log って何だっけ

log\log は「ある数を、別のある数にするには何乗すればいいか」を返す計算だ。 log10100=2\log_{10} 100 = 2 なら、「10が100になるには2乗する」という意味になる。 式の左から順に、底(右下の数字)の10、目的の値100、必要な乗数2、と読みの順番もそのまま揃う。 底は10だったり ee だったりするが、どれも「何乗するか」という発想は共通だ。 ちなみに底が10の log\log常用対数、底が eelog\log自然対数 と呼ばれる。ee という謎の数字の正体は微積の話でちらっと出てくる予定なので、ここでは「そういう底もある」くらいに流しておく。

読み方
log1010=1\log_{10} 10 = 110が10になるには1乗(そのまま)
log10100=2\log_{10} 100 = 210が100になるには2乗
log101000=3\log_{10} 1000 = 310が1000になるには3乗
log1010000=4\log_{10} 10000 = 410が10000になるには4乗

横に並べて見ると、元の値は10倍、100倍と指数的に増えていくのに対して、log\log の値は1、2、3と等間隔で進んでいる。 「桁数に近い感覚」と思ってもいい。

なぜ掛け算が足し算に化けるのか

この「何乗するか」の見方を踏まえると、log(ab)=loga+logb\log(a \cdot b) = \log a + \log b は特に不思議な話ではない。

100×1000=100000100 \times 1000 = 100000log10\log_{10} で見る。

  • log10100=2\log_{10} 100 = 2 (10が100になるには2乗)
  • log101000=3\log_{10} 1000 = 3 (10が1000になるには3乗)
  • log10100000=5\log_{10} 100000 = 5 (10が100000になるには5乗。つまり2乗+3乗)

言葉で「100000は10の5乗」と書かれてもピンと来にくいので、式として辿ってみる。 鍵は、指数には「掛けると足される」という元からあるルールがあることだ。

102×103=102+3=10510^2 \times 10^3 = 10^{2+3} = 10^5

「10を2回掛けたもの」と「10を3回掛けたもの」を掛け合わせれば、全体として「10を5回掛けたもの」になる。ここは素直な話だ。

これを log10\log_{10} で書き直すと、こうなる。

log10(102×103)=log10102+log10103=2+3=5\log_{10}(10^2 \times 10^3) = \log_{10} 10^2 + \log_{10} 10^3 = 2 + 3 = 5

掛け算していた元の世界(左辺)が、log\log の世界では足し算(右辺)に化けている。 指数同士が足されるという元からあるルールを、log\log 側から眺め直したのが log(ab)=loga+logb\log(a \cdot b) = \log a + \log b だ、と読める。 これが「掛け算が足し算に化ける」の中身になる。

おまけ: 指数を前に出してよい、というもう1つのルール

さっきの式で log10102=2\log_{10} 10^2 = 2 をサラッと書いたが、ここは別のルールを使っている。

logan=nloga\log a^n = n \log a

log\log の中にある指数は、前の係数として外に出してよい」というルールだ。 これを使うと、log10102\log_{10} 10^2 はこの流れで2に落ちる。

log10102=2log1010=2×1=2\log_{10} 10^2 = 2 \log_{10} 10 = 2 \times 1 = 2

log(ab)=loga+logb\log(a \cdot b) = \log a + \log b と対になる兄弟みたいな性質で、個別の log\log の値を手早く出したいときに使える。

log\log なんてどこで使うのか

log\log って学校でやらされたけど、実生活で見たことない」と思っている人は多い。 ただ、実は身近な指標のかなりが対数スケールでできている。 人間の感覚は「倍々」の変化のほうが刻みとして揃って見えやすいので、対数を取って等間隔に並べたほうが扱いやすい、という事情がある。

指標何を対数で測っているか目安
地震のマグニチュード地震のエネルギーMが1上がるとエネルギーは約32倍
音のデシベル(dB)音の強さ10dB上がるとエネルギーは10倍
pH水素イオン濃度pHが1下がるとイオン濃度は10倍
星の等級星の明るさ5等級差で明るさは100倍
音楽のオクターブ周波数1オクターブ上がると周波数は2倍

どれも「倍々で変わる量」を「等間隔の数字」に置き換えて扱いやすくしている例だ。 log\log は数学的なテクニックである前に、広い幅の量を人間サイズの数字に落とすための道具、と思っておくといい。

AI側での使いみち

AIで log\log が出てくる主な理由は2つだ。

  1. 確率の掛け算をアンダーフローさせないため
  2. 学習時の微分(傾き)計算がきれいな形になるため

1つめは素朴な話で、LLMが数千〜数万トークンの確率を掛け算していくと、値はすぐに 0.000000.00000\ldots のアンダーフロー領域に落ちる。 log\log を取れば掛け算が足し算になるので、小さな負の数をひたすら足すだけで済む。

2つめは微分の話になるので詳しくは次回に譲るが、log\log を取った形にしておくと学習の更新式がスッキリする、という利点もある。

式の中で logP(x)\log P(x) と出てきたら、「確率をそのまま掛け算すると潰れるから、足し算で扱える形に変えた」と読めばいい。 底は状況によって ee だったり 22 だったりするが、AI系ではほぼ自然対数(底が ee )が使われる。

尤度(ゆうど)は「モデルから見た観測データの確率」

ここから学習の話に入る。

尤度 は普段あまり使わない言葉だが、定義はシンプルだ。 「そのモデル(パラメータ)のもとで、実際に観測したデータが出てくる確率」を尤度と呼ぶ。

「学習」とは、要するにこの尤度が大きくなるようにモデルのパラメータを調整していくことだ。 観測データを作れる確率が高いモデルほど、データを上手く説明できている、という発想になる。

尤度そのものは掛け算の塊になるので、対数を取った 対数尤度 のほうがよく式に出てくる。

logP(データモデル)=ilogP(xiモデル)\log P(\text{データ} | \text{モデル}) = \sum_i \log P(x_i | \text{モデル})

「各データ点の確率の対数を全部足す」という形になる。 この値が大きくなる方向にパラメータを動かしていく、というのが最尤推定と呼ばれる考え方だ。 名前だけ覚えておいて、中身は「観測データの確率を大きくする」と読めれば十分だ。

交差エントロピーは「学習の損失そのもの」

AI記事で一番よく見る確率まわりの式が、この 交差エントロピー (cross-entropy)だ。 分類問題やLLMの学習の損失に使われている。

そもそも損失って何

先に用語を1つだけ。 損失 (loss)は、モデルが出した予測と正解とのズレを1つの数字にしたものだ。 学習とは、この損失を下げる方向にパラメータを少しずつ動かしていく作業になる。 「どういう基準でズレを数値化するか」が設計のキモで、分類問題やLLMではその基準として交差エントロピーが定番で使われている、という立ち位置だ。

式を見てみる

H(p,q)=xp(x)logq(x)H(p, q) = -\sum_x p(x) \log q(x)

記号が多いが、役割は2つに分かれている。

  • p(x)p(x): 正解の分布(どれが正解か)
  • q(x)q(x): モデルが予測した分布(softmaxの出力)

LLMや分類問題では、正解は「1つのクラスだけが1、他は全部0」という形(one-hot)になることが多い。 この場合、式はごっそり簡単になる。

H(p,q)=logq(正解のクラス)H(p, q) = -\log q(\text{正解のクラス})

つまり、「モデルが正解のクラスにつけた確率」の対数にマイナスを付けただけになる。

  • 正解に高い確率をつけた(q1q \approx 1) → logq0\log q \approx 0 → 損失も0に近い
  • 正解に低い確率をつけた(q0q \approx 0) → logq\log q は大きなマイナス → 損失はとても大きい

LLMの学習は、各トークンでこの交差エントロピーを計算して、その平均を減らす方向にパラメータを更新している。 pre-trainingの損失カーブが右肩下がりで落ちていくグラフは、基本的にこの交差エントロピーの平均を見ている。

なんでマイナスが付いているのか

式の先頭のマイナスは地味に気になるやつだ。「別に正の数でもズレ具合は表せるのでは?」と思うかもしれない。 理由はシンプルで、qq が確率(0〜1の範囲)なので、logq\log q は必ず0以下の値になる、という事情から来ている。

  • q=1q = 1(完全正解) → logq=0\log q = 0
  • q=0.5q = 0.5logq0.69\log q \approx -0.69
  • q0q \to 0(完全外し) → logq\log q \to -\infty

log\log の値がマイナスに落ちる感覚がピンと来ない場合は、q=1/2q = 1/2 を指数の形に書き換えてみると見えやすい。

log(1/2)=log(21)=log2\log(1/2) = \log(2^{-1}) = -\log 2

さっきの「おまけ」で出した「指数は log\log の前に出してよい」ルールを使うと、肩に乗っていた 1-1 がそのまま前に降りてきて、負の符号が残る。 1より小さい数はだいたい ana^{-n} の形に書き換えられるので、log\log を取ると自然にマイナスの値になる、という理屈だ。

このままだと損失が全部マイナスの値になり、「0に近づけたい」のか「深いマイナスに行きたい」のかがパッと見で混乱する。 先頭にマイナスを付けて反転させると、値が必ず0以上に揃って、「0が理想、大きいほどダメ」という素直な指標になる。 次に出てくるエントロピーの式の頭にもマイナスが付いているが、中身の logp\log p が負であることに対して同じ理由でプラスに戻しているだけだ。

なぜ「交差」エントロピーなのか

名前の由来が気になる人向けに軽く触れておく。 エントロピー H(p)=p(x)logp(x)H(p) = -\sum p(x) \log p(x) という「分布の不確かさ」を表す量があって、そこに別の分布 qq が混ざっているから 交差 と呼ばれている。

ちなみに物理のエントロピーとの関係

「エントロピー」と聞いて、まどマギでキュゥべえが連呼していたやつや、理科で習った「放っておくと散らかっていくアレ」を思い浮かべる人もいるはずだ。 あれは熱力学のエントロピーで、系の乱雑さ(ミクロな状態の取りうるパターンの多さ)を表す量だ。

こちら情報理論側の H(p)=p(x)logp(x)H(p) = -\sum p(x) \log p(x) は式の形も発想もそっくりで、あえて同じ名前を借りている。 意味は「分布の予測のしにくさ」で、どの候補が出るか分からないほど高く、1つの候補にほぼ決まっているほど低くなる。 「散らかっている = 次が読めない」と思えば、熱力学側のエントロピーと情報理論側のエントロピーはだいたい同じことを別の舞台で言っているだけ、と読める。

この記事では情報理論側のエントロピーそのものに深く踏み込まないが、「交差エントロピーは2つの分布がどれだけ近いかを測っている」くらいの読み方で十分だ。 近ければ小さく、遠ければ大きくなる。

KLダイバージェンスは「2つの分布のズレ」

もう1つ、学習や分布の比較で出てくるのが KLダイバージェンス だ。 DKL(pq)D_{KL}(p \| q) のように縦棒2本が入った書き方をする。

日本語の教材や試験(G検定など)では KL情報量カルバック・ライブラー情報量 という呼び方もよく出てくる。 どれも同じものを指しているので、別の記事で情報量の方を見かけたら読み替えれば足りる。 ちなみに「KL」や「カルバック・ライブラー」は何かの略号や符号ではなく、この概念を1951年に提案した数学者 Solomon Kullback と Richard Leibler の2人の名前から来ている。

DKL(pq)=xp(x)logp(x)q(x)D_{KL}(p \| q) = \sum_x p(x) \log \frac{p(x)}{q(x)}

「2つの分布 ppqq がどれくらい違うか」を測る値で、同じなら0、離れるほど大きくなる。 ただし距離とは呼ばない。ppqq を入れ替えると値が変わるため、数学的な距離の条件を満たさないからだ。

交差エントロピーとの関係はこうなっている。

H(p,q)=H(p)+DKL(pq)H(p, q) = H(p) + D_{KL}(p \| q)

正解の分布 pp が決まっているとき、H(p)H(p) は定数なので、交差エントロピーを小さくすることはKLダイバージェンスを小さくすることと同じになる。 だから「交差エントロピーを減らす = 予測分布を正解分布に近づける」と読んでいい。

AI記事では、RLHFやDPOといった強化学習系の手法、分布を揃えるタイプの蒸留、VAEの損失などでKLダイバージェンスがよく出てくる。

パープレキシティは「交差エントロピーを指数にしたもの」

LLMの評価でよく見るのが パープレキシティ (perplexity、略してPPL)だ。 日本語では 困惑度 と訳されることもあるが、AI系の文献ではカタカナかPPLが主流だ。 モデルカードや論文で「PPL 3.5」のような形で並んでいる。

ちなみに検索AIとして有名な Perplexity AI とは別物で、こちらは指標の名前だ。名前が被っているだけで繋がりはない。

PPL=eH(p,q)\text{PPL} = e^{H(p, q)}

交差エントロピーを ee の指数に乗せただけだ。 交差エントロピーが対数の世界の値なので、それを元のスケールに戻している、とも読める。

意味としては、「モデルが次のトークンを選ぶときに、実質的にいくつの候補の間で迷っているか」を表している。

  • PPL = 1: 毎回1択で正解できる(完璧)
  • PPL = 10: 平均して10択くらいで迷っている
  • PPL = 数百〜数千: 迷いまくっている

小さいほど強いモデルだ、と読む。 交差エントロピーと本質的には同じ指標なので、片方が下がればもう片方も下がる。 論文やリリースノートで「損失は下がった」「パープレキシティが改善した」と両方言っているのは、同じ話を別の角度で言っているだけになる。

Temperatureは「確率分布の鋭さを調整するつまみ」

生成の設定でよく見る temperature (温度)は、softmaxに1つパラメータを足したものだ。

softmax(xi/T)\text{softmax}(x_i / T)

スコアを温度 TT で割ってからsoftmaxに通す、という形になる。

  • T=1T = 1: 通常のsoftmax
  • T<1T < 1: 分布が鋭くなる(確率の高いトークンがさらに強調される)
  • T>1T > 1: 分布が平たくなる(確率の低いトークンも選ばれやすくなる)
  • T0T \to 0: 一番確率の高いトークンだけを返す(argmaxと同じ)
flowchart LR
    A[スコア列] --> B[温度Tで割る]
    B --> C[softmaxで確率分布に]
    C --> D[サンプリング]

「ちょっとランダム性を上げたい」なら温度を上げ、「安定した出力がほしい」なら下げる、という使い分けになる。 OpenAIやAnthropic、ローカルLLMの推論設定に出てくる temperature はどれも同じ仕組みだ。

なんで「温度」と呼ぶのか

名前は物理のボルツマン分布から来ている。 統計力学では、ある粒子が状態 ii を取る確率を次のように書く。

P(i)eEi/kTP(i) \propto e^{-E_i / kT}

EiE_i はその状態のエネルギー、TT は温度、kk はボルツマン定数だ。 式の形だけ見ると、さっきの温度付きsoftmax exi/Te^{x_i / T} とそっくり重なる。スコア xix_i を負のエネルギー Ei-E_i と見立てれば、分母に温度 TT が入っているところまで同じ構造になっている。

現実世界の温度の挙動と、分布の変化もちゃんと揃っている。

  • 温度が高い → 粒子が激しく動き回ってどの状態も取りやすくなる → 分布は平らになる
  • 温度が低い → 一番エネルギーの低い状態に張り付く → 分布は鋭くなる

AIサンプリングで言う「温度を上げると出力がランダムに」「下げると安定」は、この物理のイメージをそのまま拝借しているだけだ、というのが名前の由来になっている。

top-k、top-p(nucleus)サンプリングとの関係

温度と一緒に出てくるのがtop-kとtop-pだ。

  • top-k: 確率の高い上位 kk 個だけを残して、残りを0にする
  • top-p: 上から確率を足していって合計が pp を超えたところで打ち切る

温度が「確率分布の形を変える」のに対して、top-k / top-pは「選ぶ候補の集合を絞る」動きになる。 両方を組み合わせて、低確率のトークンが暴発しないようにしつつ、多少のランダム性は残す、というのがデフォルトの使い方だ。

ここまで読めるとLLMの学習ログやサンプリング設定が読める

ここまでの道具で、LLM関連の記事で出てくる式や数字がかなり追えるようになる。

よく出る形読み方
P(x)P(x)xx が起こる確率
P(A|B)BB が起こった条件下での AA の確率
P(次のトークン|過去)LLMの次トークン予測そのもの
softmaxスコアを確率分布に変える装置
E[X]E[X]値と確率を掛けて全部足した加重平均
logP(x)\log P(x)確率を足し算で扱える形に変えたもの
H(p,q)H(p, q)交差エントロピー。学習の損失
D_KL(p || q)2つの分布のズレ
PPL交差エントロピーを指数にしたもの。小さいほど強い
TT(temperature)サンプリングの鋭さを調整するつまみ

式そのものを解ける必要はなくて、「何をまとめてやっているか」が読めれば論文やモデルカードの数字がただの数字ではなくなる。

飛ばして問題ない話

入門の段階では以下は無視してOKだ。

用語中身なぜ飛ばしていいか
集合の記号(\cup, \cap, \emptyset, \in)イベントを集合として扱う数学的な記法確率の厳密な定義で出てくるが、AI記事では P(x)P(x)P(x|y) のような関数形がほとんど
ベイズの定理条件付き確率をひっくり返す公式名前を知っておけば十分。必要になった時点で読めばいい
最尤推定(MLE)尤度を最大にするパラメータを探す「交差エントロピーを下げる = 対数尤度を上げる」と同じ話
正規分布連続値でよく出る山なりの分布LLM記事では離散分布が主役で、出てきても「釣鐘型の分布」で流せる
共分散行列多変量の分散をまとめた行列LLMよりは生成モデルや古典的な統計寄り。都度でいい
ジャカード係数・相関係数類似度や相関の指標出てきたら定義を見に行けばOK
ベータ分布・ディリクレ分布分布を作るための分布名前は多いが、必要になる場面は限定的

AI記事を読む範囲では、確率・統計のうち本当に頻出するのは条件付き確率と交差エントロピーまわりなので、ここから押さえるのがコスパがいい。


次に読むと繋がりやすい記事

気になった人向けの用語メモ

この節は読み飛ばしてOK。

用語意味
確率 P(x)P(x)イベント xx が起こる可能性を0〜1で表した数字
条件付き確率 P(A|B)BB が起こった条件下での AA の確率
確率分布候補ごとの確率を並べたもの。全部足すと1
離散分布候補が有限個の分布。LLMのトークン予測はこれ
softmaxスコアを確率分布に変える関数
期待値 E[X]E[X]値×確率を全部足した加重平均
分散・標準偏差値の散らばり具合の指標
共分散2つの値が一緒に動くか逆に動くかの指標。自分自身との共分散が分散
相関係数共分散を標準偏差で割って-1〜1に揃えたもの
尤度そのモデルのもとで観測データが出てくる確率
対数尤度尤度の対数。足し算で扱えるので学習で使いやすい
交差エントロピー正解分布と予測分布のズレを測る量。学習の損失
エントロピー分布自体の不確かさ
KLダイバージェンス2つの分布のズレ。同じなら0、離れるほど大きい。KL情報量・カルバック・ライブラー情報量とも
パープレキシティ交差エントロピーを指数にしたもの。LLM評価の定番。困惑度・PPLとも
temperatureサンプリング時に分布の鋭さを調整するパラメータ

次は微分・積分の話に進む予定で、勾配降下と逆伝播のあたりを「解かずに読める」形でまとめたい。