確率分布図鑑 — 正規・ポアソン・指数族はどこから来るか
正規分布もポアソン分布も、暗記すべき公式ではなく「ある状況から必然的に出てくる形」です。足し算・希少な出来事・最大エントロピーという3つの物語をたどると、教科書に並ぶ分布たちが指数族という1本の川に合流し、sigmoidとsoftmaxがなぜあの形をしているのかまで見えてきます。
分布の一覧表が暗記カードに見えるとき
確率の教科書を開くと、たいてい分布のカタログが出てきます。ベルヌーイ、二項、ポアソン、幾何、指数、ガンマ、ベータ、正規、対数正規、ディリクレ。それぞれに難しい顔をした密度関数が付いていて、平均と分散の公式が添えてある。多くの人はここで「覚えるものが多すぎる」と感じて本を閉じます。
しかし実務でこれらを使い分けている人が、公式を暗記しているわけではありません。彼らが持っているのは「この分布はどういう状況から生まれるか」という物語です。物語を知っていれば、目の前のデータを見た瞬間に「これは足し算の結果だから正規だろう」と当たりが付きます。公式は後から scipy.stats のドキュメントで確認すればいい。
この記事では、分布を3つの物語に整理します。
- たくさん足すと正規分布になる(中心極限定理)
- めったに起きないことを数えるとポアソンになる(希少事象の極限)
- 知らないことを勝手に決めないと指数族になる(最大エントロピー)
そして3本目の物語が、他の2本を含めた分布の大半を1つの形にまとめてしまうこと、その形からsigmoidとsoftmaxが落ちてくることまで見ます。確率そのものの記号にまだ自信がない場合は、AIのための確率・統計を先に読むと足場が固まります。
まず土台: 分布とは「起こりやすさの配り方」
分布とは、起こりうる結果それぞれに「起こりやすさ」を配った表のことです。サイコロなら6つの目に1/6ずつ配る。これは離散なので、値ごとに確率が直接決まります(確率質量関数)。
身長のように連続な値だと事情が変わります。「ちょうど170.000…cm」の確率は0です。無限に細かい目盛りの上では、どの一点も面積を持たないからです。そこで連続の場合は高さを配ります。これが確率密度関数で、確率になるのは高さそのものではなく、区間で切り取った面積です。密度の値は1を超えても構いません。区間 の一様分布の密度は全域で2ですが、幅0.5を掛けて面積1になるので矛盾はない。「密度=確率」と思い込むのが最初の落とし穴です。
物語1: たくさん足すと、何を足しても正規分布になる
コインを1回投げる。表を1、裏を0とすると、結果は2本の棒です。10回投げて表の枚数を数えると、真ん中が高い山になります。100回、1000回と増やすと、山はどんどん左右対称の滑らかな釣鐘型に近づいていきます。
驚くべきなのは、元が何だったかがほとんど関係ないことです。コインでも、サイコロでも、0から1までの一様乱数でも、独立に何度も引いてきて足し合わせると、その平均のばらつき方は同じ形に収束します。これが中心極限定理です。
記号を1つずつほどきます。 は同じ分布から独立に引いてきた値、 はそのうち 個の平均、 は本当の平均、 はばらつきの大きさ(標準偏差)、 は平均0・標準偏差1の正規分布、矢印の は「分布の形として近づく」という意味です。式(1)が言っているのは、サンプル平均が本当の平均からどれだけずれるかを という物差しで測り直すと、元の分布が何であれ、決まった釣鐘型になるということです。つまり、「平均を取る」という行為そのものに形があり、材料が何であれ同じ釣鐘に化けるということ。テストの点数の平均でも、サーバー応答時間の平均でも、十分な数を集めればブレ方の顔つきは同じになります。
ここから2つの実用的な帰結が出ます。1つは「誤差は正規分布に従うと仮定してよいことが多い」理由です。測定誤差も、モデルの残差も、たいていは無数の小さな原因の足し算です。足し算なら正規に寄る。もう1つは です。平均の精度を10倍にしたければサンプル数は100倍要る。A/Bテストが思ったより長引くのも、評価用データセットを増やしても指標のブレがなかなか消えないのも、この平方根が理由です。
コードで確かめられます。中身は一様乱数で、釣鐘型とは似ても似つかない箱型なのに、平均を取ると理論値に張り付きます。
import numpy as np
rng = np.random.default_rng(0)
for n in [1, 2, 10, 100]:
m = rng.random((200_000, n)).mean(axis=1) # 一様乱数を n 個平均する
print(n, round(m.std(), 4), round(np.sqrt(1 / 12 / n), 4))
# 左が実測のばらつき、右が σ/√n の理論値(一様分布の分散は 1/12)
前提を1つだけ覚えてください: 分散が有限であること。 ここが崩れると定理は効きません。株価の変動幅やネットワークの遅延、ファイルサイズのように裾が重い量では、平均を取っても正規に寄らず、たまに出る巨大な値が平均そのものを引きずり回します。また、原因が足し算ではなく掛け算で積み重なる量(成長率、価格)は、対数を取ると足し算になるので、対数正規分布になります。
物語2: めったに起きないことを数えるとポアソン
サーバーに1分間で何件のリクエストが来るか。1000行のコードに何個の欠陥が残るか。これらは「試行の回数はものすごく多いが、1回あたりの確率はものすごく小さい」タイプの数え上げです。
二項分布で 、 とし、その積 を一定に保つと、極限で残るのがポアソン分布です。
は起きた回数、 は平均して何回起きるかです。式(2)は「平均 回起きる現象が、ちょうど 回起きる確率」を返します。つまり、「ふだんは1分に3件のリクエストが来るサイトで、この1分だけ7件来る確率はどれくらいか」に答える式ということです。分子の が「回数が増えるほど珍しくなる」度合いを、分母の が「同じ 件を並べ替えただけの重複を数えない」ための割り算を担っています。ポアソン分布の際立った性質は、平均と分散が両方とも であること。つまりパラメータが1個しかなく、「平均が大きければ、ばらつきも同じだけ大きい」と勝手に決めつけています。
import numpy as np
from scipy.stats import binom, poisson
n, p = 10_000, 3e-4 # np = 3
k = np.arange(0, 12)
print(np.abs(binom.pmf(k, n, p) - poisson.pmf(k, n * p)).max())
# n が大きく p が小さいとき、二項とポアソンの差はごくわずか
同じ現象を「回数」ではなく「次の1件までの待ち時間」の側から見ると、指数分布が出てきます。そして指数分布には奇妙な性質があります。
縦棒は「〜という条件のもとで」です。式(3)は、すでに だけ待ったという事実が、これから 待つ確率を1ミリも変えないと言っています。無記憶性と呼ばれます。言い換えると、この分布には「そろそろ来るはず」が存在しないということです。途中で時計を見ても、そこから先の見通しは待ち始めた瞬間とまったく同じ状態に巻き戻っています。バス停で30分待っても、次のバスまでの期待待ち時間は最初と同じ、という直感に反する世界です。連続分布でこの性質を持つのは指数分布だけで、離散側では幾何分布だけです。
件目が来るまでの待ち時間はガンマ分布、というように、この一族は互いに親戚関係で繋がっています。
物語3: 知らないことを勝手に決めない
3本目が一番強力です。物理学者のE. T. Jaynesが1957年に整理した最大エントロピー原理は、こう言います。
知っている制約を満たす分布は無数にある。その中から、エントロピーが最大のものを選べ。
エントロピーは「分布がどれだけ散らばっているか=どれだけ情報を主張していないか」の尺度です(詳しくはエントロピーと交差エントロピー)。エントロピー最大を選ぶということは、知っている制約以外には、余計な仮定を一切足さないという意味になります。最も謙虚な答えを選ぶ、と言い換えてもいい。
驚くのは、この方針だけで教科書の分布が次々に出てくることです。
| 知っていること(制約) | 出てくる分布 |
|---|---|
| 値が に入る、それだけ | 一様分布 |
| 値が0以上で、平均が分かっている | 指数分布 |
| 値は実数全体、平均と分散が分かっている | 正規分布 |
| 値は有限個のカテゴリ、各カテゴリの「スコア」の期待値が分かっている | ボルツマン分布 = softmax |
正規分布があれほど遍在する理由が、ここでもう1つ増えました。物語1は「足し算の結果として現れる」、物語3は「平均と分散しか分かっていないときの最も無責任でない選択」。前者は自然界の事情、後者はこちら側の無知の表明です。
最後の行が生成モデルに直結します。次のトークンを選ぶとき、モデルはスコア(ロジット)だけを持っていて、それ以外は何も主張したくない。その状況の最大エントロピー解が、まさにsoftmaxです。温度パラメータは制約の強さの裏返しで、下げるほど「スコアの高いものを強く信じる」=エントロピーの低い分布に、上げるほど一様に近づきます。
合流点: 指数族という1本の川
ここまでの分布はほとんど、たった1つの形に書き直せます。
記号の役割を1つずつ。 は観測した値、(イータ)は自然パラメータでモデル側のつまみ、 は十分統計量でデータから抜き出す要約、 は対数分配関数で全体の面積を1に揃えるための調整項、 は に依存しない下地です。式(4)を日本語にすると、「データの要約 とつまみ を掛けて、指数を取って、最後に全体を1に正規化しただけ」になります。つまり、中身はモデル側のつまみとデータ側の要約を1回掛け合わせているだけということ。指数と は、その積を確率らしい形(負にならず、合計が1)に整えるための包装にすぎません。この形に収まる分布たちを指数族と呼びます。
抽象的に見えますが、当てはめると具体的です。ベルヌーイ分布(表が出る確率 )を書き直すと、(ロジット)、、 になります。ここで を で微分してみてください。
つまり、面積を1に揃えるために置いた調整項 を、つまみ の方向にほんの少し動かしたときの反応が、そのまま「表が出る確率」になっているということです。sigmoidは、対数分配関数の微分です。 同じことをカテゴリ分布でやると となり、その勾配はsoftmaxそのものになります。ニューラルネットの出力にsigmoidやsoftmaxを付けるのは、誰かが便利そうな関数を選んだからではなく、「ロジットを自然パラメータとする指数族の平均を出す」という操作がその形をしているからです。ここが分かると、分類の損失に交差エントロピーを使う理由も、天下りではなく必然として読めるようになります。
指数族が機械学習で重宝される理由は3つあります。
- データを要約できる: 尤度は の和にしか依存しません。100万件のデータでも、必要なのは十分統計量の合計だけです。
- 最尤推定が凸問題になる: 対数尤度は について凹(マイナスを付ければ凸)なので、局所解に落ちる心配がありません。
- 共役事前分布がある: ベータ⇄ベルヌーイ、ガンマ⇄ポアソン、ディリクレ⇄カテゴリのように、事後分布が事前分布と同じ形で閉じます。観測を1件足したときの事後分布の更新が「カウントを1つ増やすだけ」で済むのはこれが理由です。
もちろん例外もあります。裾の重いスチューデントのt分布、混合ガウス分布、パラメータで台の端が動く一様分布などは指数族の外にいます。「外にいる」ことを知っていると、なぜそれらで話が急に難しくなるのかが説明できます。
図鑑: どこから来て、AIのどこで出るか
| 分布 | どこから来たか | AIのどこで出るか |
|---|---|---|
| ベルヌーイ | 1回のコイン投げ | 2値分類、Dropoutのマスク |
| カテゴリ | 面が 個のサイコロ | 次トークン予測、softmax出力 |
| 二項 | ベルヌーイを 回足す | クリック率の集計、A/Bテスト |
| ポアソン | 希少な出来事の回数 | リクエスト数、欠陥数、需要予測 |
| 負の二項 | ポアソンの 自体がばらつく | 過分散のカウントデータ |
| 幾何 | 最初の成功までの回数 | 離散版の待ち時間、再試行回数 |
| 指数 | 次の1件までの待ち時間 | 到着間隔、生存時間 |
| ガンマ | 指数を 回分足す | 待ち時間の合計、ポアソンの共役事前 |
| ベータ | 0〜1の割合そのものの分布 | CTRの事前分布、バンディット |
| ディリクレ | ベータの多次元版 | トピックモデル、カテゴリの事前分布 |
| 正規 | 足し算の極限/平均と分散だけ既知 | 誤差、重み初期化、VAEの潜在変数 |
| 対数正規 | 掛け算の積み重ね | レイテンシ、ファイルサイズ、収入 |
| ラプラス | 絶対値の指数 | L1正則化に対応する事前分布 |
| スチューデントt | 分散自体が不確かなガウス | 外れ値に強い回帰、小標本の検定 |
この表は暗記する必要がありません。「どこから来たか」の列を読めば、目の前のデータがどの列に当たるかで候補が2〜3個に絞れます。
現場ではこう使う
誰がいつ使うか。 MLエンジニアが損失関数を選ぶとき、データサイエンティストがA/Bテストの必要サンプル数を見積もるとき、需要予測や広告配信の担当者がカウントデータを回帰するとき、SREがレイテンシのSLOを決めるとき。いずれも「分布の形を仮定する」場面であり、仮定を外すと結果が静かに壊れます。
触るパラメータ・ツール名。 PyTorchなら torch.distributions(Normal, Poisson, Categorical, Dirichlet)と、それに対応する nn.GaussianNLLLoss / nn.PoissonNLLLoss。カウント回帰では statsmodels の GLM で family=sm.families.Poisson() や NegativeBinomial() を切り替えます。分布の当てはめと分位点は scipy.stats(.fit(), .ppf())。重みの初期化 nn.init.kaiming_normal_ は、活性化を通した後の分散が層をまたいで一定になるよう標準偏差を に取る設計で、これも正規分布の仮定の上に立っています。生成時の temperature は先ほどの最大エントロピーのつまみそのものです。
知らないと事故になる落とし穴。
- 裾の重い量に平均を使う。 レイテンシやコストは正規からほど遠く、平均は少数の巨大値に引きずられます。p50/p95/p99で語るのが実務の標準で、「平均レイテンシは正常でした」という報告は多くの場合、何も言っていません。
- カウントデータにMSEを当てる。 回数の予測に二乗誤差を使うと、負の予測値が出るうえ、大きな の領域を過剰に重く扱います。ポアソン損失(対数リンク)が既定の選択肢です。
- 過分散を見落とす。 ポアソンは平均=分散を強制します。実データの分散が平均より明らかに大きい(バースト、曜日効果、ユーザー差)のにポアソンを当てると、予測区間が狭すぎてアラートが鳴り続けます。負の二項を試すのはこの局面です。
- 無記憶性を無条件に信じる。 指数分布を仮定すると「稼働時間が長いほど壊れやすい」という現実の摩耗を表現できません。故障率が時間で変わるならワイブル分布などを検討します。
- 中心極限定理を分散無限の量に適用する。 サンプルを増やせば正規に近づくはずだ、という期待が裏切られます。まず対数を取って裾を確認する癖を付けてください。
面接や設計レビューで問われる形。 「なぜ分類の損失は交差エントロピーで、二乗誤差ではないのか」— 出力がカテゴリ分布であり、その最尤推定が交差エントロピーに一致するから。「1日のクリック数を予測するモデルの損失は何にするか」— まずポアソン、分散が平均を超えるなら負の二項。「レイテンシのSLOを平均で置かない理由は」— 分布が対数正規に近く、平均が代表値になっていないから。どれも「分布がどこから来るか」を1本たどれば答えが出ます。
まとめ
- 分布は暗記対象ではなく、生成の物語で分類できる。足し算なら正規、希少な数え上げならポアソン系、無知の表明なら最大エントロピー
- 中心極限定理の前提は「独立・同分布・分散が有限」。裾が重い量では成り立たない
- 最大エントロピーで制約を課すと、一様・指数・正規・softmaxが順に落ちてくる
- その帰結が指数族 で、sigmoidとsoftmaxは対数分配関数 の勾配にすぎない
- 現場の事故は、たいてい「分布の仮定を確認しなかったこと」から起きる
次に読むなら、ここで出てきた「2つの分布のズレ」を測る道具であるKL情報量へ進むと、分布の話が最適化の話に繋がります。
コメント
コメントにはログインが必要です