⚠️ このページは機械翻訳されています

この日本語訳は機械翻訳によるもので、誤りや不自然な表現が含まれている場合があります。正確な内容については英語版をご参照ください。

This page was machine-translated and may contain errors. Please refer to the English version for accuracy.

誤りを見つけられた場合は、joseph.austerweil@gmail.com までご連絡いただくか、GitHub リポジトリにプルリクエストをお送りください

情報理論:驚き、不確実性、そして合流点

驚きを測る

これはベイズネットの背骨となる最終章です。ここでは、すべてをひとつのアイデア——情報——で結びつけます。これまで、ある変数が別の変数について何かを教えてくれるかどうか——依存性、独立性、d分離——について議論してきました。情報理論は、どれだけ教えてくれるかを正確な加法的単位、ビットで表現することを可能にします。

Chibanyは毎日どのお弁当を食べたか日記をつけています。トンカツと予測して当たった日もあれば、不意をつかれた日もあります。今日はトンカツに違いないと確信していたのに——ハンバーグが出てきました。

Chibany:「あー、すごく確信してたのに。どれくらい驚いてよかったのかな?」

Jamal:「それはちょうどいい質問——その驚きには正確な数字があるんだよ。」

その数字こそが、情報理論の出発点です。


驚き $= -\log P(x)$

結果 $x$ の驚き(または情報量用語集)は次のように定義されます:

$$\text{surprise}(x) = -\log_2 P(x),$$

対数の底が2のとき、単位はビットです。考え方はこうです:ある結果の確率が低いほど、それが起きたときにより驚くべきです。具体例で確認してみましょう:

  • トンカツに $P = 0.99$ を割り当てていて、トンカツが来た:驚き $= -\log_2(0.99) \approx 0.014$ ビット。ほとんどなし——基本的にわかっていたから。
  • ハンバーグに $P = 0.01$ を割り当てていて、ハンバーグが来た:驚き $= -\log_2(0.01) \approx 6.64$ ビット。とても大きい——世界が確信を裏切った。

なぜよりによって対数なのでしょうか?驚きは独立事象に対して加法的であるべきだからです:独立した2つのことを知ることで、それぞれの驚きの和だけ驚くはずです。独立した確率は積になる($P(x, y) = P(x)P(y)$)ので、積を和に変える関数が対数です:$-\log P(x,y) = -\log P(x) - \log P(y)$。底は単位を決めるだけで、底2ではフェアなコイン投げ1回分の情報量がビットになります。(結果を伝送するための最適符号長との深い関係がありますが、ここでは必要ありません。)


エントロピー = 期待される驚き

ひとつの結果には驚きがあります。分布全体には、各結果がどれくらい起きるかで重み付けされた平均の驚きがあります。その平均がエントロピー用語集)です:

$$H(X) = \sum_x P(x) \bigl(-\log_2 P(x)\bigr) = -\sum_x P(x) \log_2 P(x) = \mathbb{E}\bigl[-\log_2 P(X)\bigr].$$

エントロピーは、$X$ を見る前にどれほど不確実か——平均的にどれだけ驚くことを期待するか——を測ります。3つのケースで直感を確認しましょう:

分布エントロピー読み方
フェアコイン($P = 0.5$)$1.0$ ビット2値の結果における最大の不確実性
偏ったコイン($P = 0.7$)$0.881$ ビット不確実性が低い——「表」と予測して大抵当たる
確実な結果($P = 1$)$0$ ビット不確実性なし、驚きなし、情報なし

フェアコインは2値変数として最も不確実な状態——1ビット全部。偏らせると、エントロピーは下がります:変数が予測可能になるほど、その結果が運ぶ情報量は少なくなります。決定論的な結果はまったく情報を持ちません。

記法の注意

$\mathbb{E}[\cdot]$ は第1章期待値(平均)です——ここでは、驚き $-\log_2 P(X)$ を全結果にわたって確率で重み付けした平均です。つまりエントロピーは文字通り「期待される驚き」です。


同時エントロピーと条件付きエントロピー

エントロピーは1つの変数の不確実性を測ります。2つの変数があると、さらに2つの量が生まれ——それらを結ぶ美しい法則があります。

同時エントロピー用語集)は、対 $(X, Y)$ を1つの結合した結果として扱ったエントロピーに過ぎません:

$$H(X, Y) = -\sum_{x, y} P(x, y) \log_2 P(x, y) = \mathbb{E}\bigl[-\log_2 P(X, Y)\bigr].$$

両方の変数の全体的な不確実性——ペア全体で平均的にどれだけ驚くか——です。

条件付きエントロピー用語集)は、$X$ を知った後に $Y$ に残る不確実性です。特定の値 $X = x$ について、残りの不確実性は条件付き分布 $P(Y \mid x)$ のエントロピーです。条件付きエントロピーはそれをすべての $X$ の値で平均します:

$$H(Y \mid X) = \sum_x P(x) \underbrace{\Bigl[-\sum_y P(y \mid x) \log_2 P(y \mid x)\Bigr]}_{H(Y \mid X = x)} = -\sum_{x, y} P(x, y) \log_2 P(y \mid x).$$

$H(Y \mid X)$ を次のように読みます:「$X$ を見た後、$Y$ の値に平均的にどれだけ驚くか?」 $X$ が $Y$ を完全に決めるなら $H(Y \mid X) = 0$——驚きは残らない。$X$ が $Y$ について何も言わないなら $P(y \mid x) = P(y)$ となり $H(Y \mid X) = H(Y)$——$X$ を知っても何も役に立たなかった。

エントロピーの連鎖律

この3つの量は美しくシンプルな法則に従います——ペアの全体的な不確実性は、最初の変数の不確実性と2番目の変数の残りの不確実性の和に等しい

$$\boxed{ H(X, Y) = H(X) + H(Y \mid X) }$$

これは確率の連鎖律 $P(x, y) = P(x) P(y \mid x)$ の情報理論版です。1行の導出がここにあります——対数を通した連鎖律そのものです:

$$ \begin{aligned} H(X, Y) &= -\sum_{x, y} P(x, y) \log_2 P(x, y) \\ &= -\sum_{x, y} P(x, y) \log_2 \bigl[P(x) P(y \mid x)\bigr] && \text{(確率の連鎖律)}\\ &= -\sum_{x, y} P(x, y) \log_2 P(x) - \sum_{x, y} P(x, y) \log_2 P(y \mid x) && \text{(}\log\text{の積 = 対数の和)}\\ &= -\sum_{x} P(x) \log_2 P(x) + H(Y \mid X) && \text{(最初の項の } y \text{ を周辺化:} \textstyle\sum_y P(x,y)=P(x)\text{)}\\ &= H(X) + H(Y \mid X). \end{aligned} $$

全体のトリックは確率の連鎖律の対数が、同時の驚きを「$X$ についての驚き」と「$X$ を与えた後の $Y$ についての残りの驚き」に分割することです。驚きは確率が積になるように加算されます——だからこそ最初に対数を使ったのです。

これを整理すると、条件付きエントロピーのきれいな式が得られます:$H(Y \mid X) = H(X, Y) - H(X)$。「$X$ の後に $Y$ について学ぶべきことが残っているか」= 「全体」から「$X$ がすでにカバーしたもの」を引いたもの。


相互情報量

ここで最重要の量が登場します。相互情報量用語集)は、一方の変数を学ぶことでもう一方の変数についての不確実性がどれだけ減少するかを測ります:

$$I(X; Y) = H(X) - H(X \mid Y).$$

言葉にすると:$X$ についての不確実性から始め(それが $H(X)$)、$Y$ を知った後に残る不確実性(それが条件付きエントロピー $H(X \mid Y)$)を引きます。残ったもの——減少分——が $Y$ が $X$ について教えてくれた量です。$Y$ が何も言わなければ不確実性は下がらず $I(X; Y) = 0$;$Y$ が $X$ を完全に決めれば残りの不確実性はゼロで $I(X; Y) = H(X)$。

連鎖律からの相互情報量——なぜ対称なのか

連鎖律 $H(X \mid Y) = H(X, Y) - H(Y)$ を定義に代入すると、対称な式が自然に現れます:

$$ \begin{aligned} I(X; Y) &= H(X) - H(X \mid Y) \\ &= H(X) - \bigl[H(X, Y) - H(Y)\bigr] && \text{(連鎖律、} H(X\mid Y)=H(X,Y)-H(Y)\text{ の形)}\\ &= H(X) + H(Y) - H(X, Y). \end{aligned} $$

最後の行 $ I(X; Y) = H(X) + H(Y) - H(X, Y)$ は $X$ と $Y$ について完全に対称です——入れ替えても何も変わりません。つまり相互情報量は対称です:$Y$ は $X$ について $X$ が $Y$ について教えてくれるのと全く同じ量を教えてくれます。

$$I(X; Y) = H(X) - H(X \mid Y) = H(Y) - H(Y \mid X) = I(Y; X).$$

情報は双方向——だから「相互」情報量と呼ぶのです。(ここには鮮やかなイメージがあります:$H(X)$ と $H(Y)$ を重なり合う2つの円と考えてください。$H(X,Y)$ はその和集合の面積で、$I(X;Y)$ は重なり——2つの変数が共有するビット数です。式 $I = H(X) + H(Y) - H(X,Y)$ はまさにそれらの面積の包除原理です。)


情報単位で表した独立性

これにより、第9章の中心概念を定量的にきれいに言い換えられます。2つの変数が独立であることと、相互情報量がゼロであることは同値です:

$$X \perp Y \iff I(X; Y) = 0.$$

そして条件付きの版はd分離を反映します:

$$X \perp Y \mid Z \iff I(X; Y \mid Z) = 0,$$

ここで $I(X; Y \mid Z)$ は $Z$ を条件付けした後に計算した相互情報量です。「独立」と「ゼロビットを運ぶ」は同じ言明です。相互情報量は数値のついた依存性に過ぎません。


情報理論の衣をまとった合流点

さあ、最大の成果です——そしてこれがすべての背骨をつなぎます。第9章の合流点を思い出してください:1つの共有された効果の2つの独立した原因。ここでの2つの原因は雨($R$)とこぼれたお茶($T$)で、共有された効果はカフェテリアの濡れた床のサイン($S$)が出ること——以前の説明除去構造と全く同じ決定論的ORです。2つの原因の間の相互情報量を観察してみましょう:

  • サインを観測する前: $R$ と $T$ は独立なので $I(R; T) = 0$ ビット。雨が降ったことを知っても、お茶のこぼれについては何もわからない。
  • サインが出ていることを観測した後: 合流点を条件付けすることでパスが開かれ
$$I(R; T \mid S = 1) \approx 0.462 \text{ ビット} > 0.$$

合流点を条件付けすることで、ゼロから相互情報量が生まれた。 ゼロビットを共有していた2つの変数が今や約半ビットを共有するようになりました——純粋に共通の効果を観測したからです。これはまさに第9章の説明除去効果ですが、今は数字がついています:$0.462$ ビットは合流点が作り出す依存性の正確な量です。説明除去は漠然とした「変数が関連するようになる」ではありません——観測によって呼び出される情報の測定可能な量です。

背骨をひとことで

ベイズネットはどの変数が情報を共有するかを示し(第8章);d分離は条件付けがその共有をいつオン・オフにするかを示し(第9章);doオペレータは共有がいつ行動できる因果関係を反映するかを示し(第10章);相互情報量は何ビット共有されているかを示します。合流点——独立した原因が、効果を条件付けすると依存するようになる——が、この4つすべてを貫く糸です。


交差エントロピーとKLダイバージェンス

これまでの量はすべて真の分布のもとでの不確実性を測っていました。最後の2つは間違った分布を使ったときに何が起きるかを測ります——そしてこれらが本章から現代的な機械学習への橋渡しとなります。

世界は実際に $P$ に従っているが、あなたは $Q$ に従うと信じている——あなたのモデルは $Q$ で、現実は $P$ です。信念が正しいときの驚きは $-\log_2 P(x)$ でしたが、今はあなたが各結果に確率 $Q(x)$ を割り当てているので、結果 $x$ に対するあなたの驚きは $-\log_2 Q(x)$ です。本物の結果にわたってあなたの驚きを平均すると交差エントロピー用語集)が得られます:

$$H(P, Q) = -\sum_x P(x) \log_2 Q(x) = \mathbb{E}_{X \sim P}\bigl[-\log_2 Q(X)\bigr].$$

現実が $P$ でありながら $Q$ で予測したとき、実際に感じる平均的な驚きです。$H(P, P) = H(P)$ であることに注意してください:モデルが完全に正しければ、交差エントロピーは普通のエントロピーに戻ります。

カルバック–ライブラー情報量用語集)は余分な分——間違ったモデルによって避けられない $H(P)$ を超えて追加でかかる驚きの余分なビット数——です:

$$D_{\text{KL}}(P \parallel Q) = \sum_x P(x) \log_2 \frac{P(x)}{Q(x)}.$$

交差エントロピー = エントロピー + KL

この2つは、まさにそれを言う1行の等式で結ばれます——あなたの全体的な驚きは避けられない部分と間違いに対するペナルティの和

$$\boxed{ H(P, Q) = H(P) + D_{\text{KL}}(P \parallel Q) }$$

導出は再び対数を分割するだけで、今度は $\log \frac{P}{Q} = \log P - \log Q$ を逆方向に使います:

$$ \begin{aligned} H(P) + D_{\text{KL}}(P \parallel Q) &= \Bigl[-\sum_x P(x)\log_2 P(x)\Bigr] + \sum_x P(x)\log_2 \frac{P(x)}{Q(x)} \\ &= -\sum_x P(x)\log_2 P(x) + \sum_x P(x)\bigl[\log_2 P(x) - \log_2 Q(x)\bigr] \\ &= -\sum_x P(x)\log_2 Q(x) && \text{(}\log_2 P(x) \text{ の項が消える)}\\ &= H(P, Q). \end{aligned} $$

$H(P)$ はモデル $Q$ に依存しないため、交差エントロピーを最小化することとKLダイバージェンスを最小化することは同じ最適化です——定数 $H(P)$ だけ異なります。このたった1つの事実が、分類器や言語モデルの学習に「交差エントロピー損失」がデフォルトの目的関数として使われる理由です:現実のエントロピー $H(P)$ は変えられないので、交差エントロピーを下げることはすなわちモデル $Q$ を真実 $P$ に近づけること——ビット単位で。

便利な事実:KLは決して負にならない

$D_{\text{KL}}(P \parallel Q) \ge 0$ は常に成り立ち、$Q = P$ のときだけ等号が成立します(これはギブスの不等式です)。つまり $H(P, Q) \ge H(P)$:間違った分布で予測すると平均的な驚きは増えるだけで、決して減りません。真実は最も驚きが少ないモデルです——これが学習が機能する全体的な理由です。(ただしKLは対称ではありません:一般に $D_{\text{KL}}(P \parallel Q) \ne D_{\text{KL}}(Q \parallel P)$ なので、真の距離ではなく「ダイバージェンス」と呼ばれます。)

これらの量は、本コースがニューラルネットワークや大規模言語モデルに達したときに本格的に再登場します——分類器の学習損失交差エントロピーであり、確率的機械学習の多くは $Q$ を $P$ に似せるための長い取り組みです。


GenJAX 実装

エントロピーと合流点の相互情報量をモンテカルロ法で推定してみましょう——数式ではなく、ただサンプルだけで。雨/お茶/サインのネットワークから多くのトレースをサンプリングし、数えます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import jax
import jax.numpy as jnp
import jax.random as jr
from genjax import gen, flip

@gen
def rain_tea_sign():
    rain = flip(0.3) @ "rain"
    tea = flip(0.1) @ "tea"
    # Deterministic OR: the wet-floor sign is out iff either cause fired.
    either = jnp.maximum(rain.astype(int), tea.astype(int))
    sign = flip(either.astype(float)) @ "sign"
    return rain, tea, sign

# Sample a big batch of full traces.
N = 200000
keys = jr.split(jr.key(0), N)
rain, tea, sign = jax.vmap(lambda k: rain_tea_sign.simulate(k, ()).get_retval())(keys)
rain, tea, sign = rain.astype(int), tea.astype(int), sign.astype(int)

def entropy_bits(samples):
    """Empirical entropy (bits) of a 0/1 sample array."""
    p1 = jnp.mean(samples)
    p1 = jnp.clip(p1, 1e-12, 1 - 1e-12)
    return float(-(p1 * jnp.log2(p1) + (1 - p1) * jnp.log2(1 - p1)))

def mi_bits(a, b, mask=None):
    """Empirical mutual information I(A;B) in bits, optionally within a subset."""
    if mask is not None:
        a, b = a[mask], b[mask]
    mi = 0.0
    n = a.shape[0]
    for av in (0, 1):
        for bv in (0, 1):
            p_ab = jnp.mean((a == av) & (b == bv))
            p_a = jnp.mean(a == av)
            p_b = jnp.mean(b == bv)
            if p_ab > 0 and p_a > 0 and p_b > 0:
                mi += float(p_ab * jnp.log2(p_ab / (p_a * p_b)))
    return mi

print(f"H(rain)             = {entropy_bits(rain):.3f} bits")
print(f"H(sign)             = {entropy_bits(sign):.3f} bits")
print(f"I(rain; tea)              = {mi_bits(rain, tea):.3f} bits   (independent)")
print(f"I(rain; tea | sign = 1)   = {mi_bits(rain, tea, sign == 1):.3f} bits   (collider opened)")

出力:

H(rain)             = 0.881 bits
H(sign)             = 0.950 bits
I(rain; tea)              = 0.000 bits   (independent)
I(rain; tea | sign = 1)   = 0.462 bits   (collider opened)

実験的な数値は理論を正確に裏付けています。H(rain) = 0.881 ビット——$0.3$ のコイン、表の確率が $0.7$ のコインのエントロピーと同じです(エントロピーは $p$ と $1-p$ について対称)。サインは確率 $1 - 0.7 \times 0.9 = 0.37$ で濡れているので、H(sign) = 0.950 ビット——$0.37$ が最大不確実性の $0.5$ に近いため、1ビットに近い。そして2つの相互情報量の行がまさに背骨の縮図です:独立した原因の間では $0.000$ ビット、共通の効果を条件付けした瞬間に $0.462$ ビットへ跳ね上がります。ビットで測った説明除去です。

今できること——そして背骨完成

驚きとエントロピーを定量化できる;同時エントロピー条件付きエントロピー、そして連鎖律 $H(X,Y) = H(X) + H(Y \mid X)$ によって対の不確実性を分解できる;相互情報量を3つの同値な方法で表し、なぜ対称なのかを理解できる;独立性とd分離を情報単位で言い換えられる;合流点の説明除去効果を具体的なビット数で測れる;そして交差エントロピーKLダイバージェンスを $H(P,Q) = H(P) + D_{\text{KL}}(P \parallel Q)$ を通じて機械学習の損失関数に結びつけられる。これで、ベイズネットの背骨は完成です——グラフとしてモデルを描き、その独立性を読み取り、見ることと行うことを区別し、それをすべてビットで計量できます。ここからの道は階層ベイズ(事前分布を重ねたベイズネット)へと向かい、後にコースでは現代的な機械学習の情報理論的中核へと進みます。


練習問題

自分で試してみよう
  1. 手でエントロピーを計算する。 重み付きサイコロは確率 $0.5$ で6が出て、1から5の各目は確率 $0.1$ で出ます。そのエントロピーはフェアなサイコロのエントロピー($\log_2 6 \approx 2.585$ ビット)より高いか低いか?計算してみましょう。
  2. 驚きの予算。 Chibanyの友人は $P = 0.95$ の精度でお弁当を予測できると主張しています。その通りだとすると、30日間の期待される合計の驚き(ビット単位)はいくらでしょうか?(ヒント:$30 \times H(0.95)$)
  3. 相互情報量と連鎖。 連鎖 $A \to B \to C$ で、$I(A; C)$ と $I(A; C \mid B)$ をモンテカルロで推定してください(小さな flip ベースのモデルを構築)。中間ノード $B$ を条件付けすると相互情報量がゼロに向かうことを確認してください——ブロックされたパスの情報理論的な特徴です。
  4. 連鎖律を確認する。 雨/お茶のペアについて(独立、$P(R)=0.3$、$P(T)=0.1$)、$H(R)$、$H(T)$、$H(R, T)$ を手で計算してください。$H(R, T) = H(R) + H(T \mid R)$ を確認し、ここでは $H(T \mid R) = H(T)$ であること($R$ と $T$ が独立なので $R$ を知っても $T$ についての情報は得られない)を確認してください。
  5. 交差エントロピーのコスト。 コインはフェアだと信じている($Q = \text{Bernoulli}(0.5)$)が、実際は偏っている($P = \text{Bernoulli}(0.3)$)とします。交差エントロピー $H(P, Q)$ とエントロピー $H(P)$ を計算してください。間違った信念によって1回の投げあたり余分に何ビットの驚きがかかるでしょうか?(その余分な量が $D_{\text{KL}}(P \parallel Q)$ です。)

コンパニオンノートブックでこれらをインタラクティブに演習できます:

📓 Colab で開く: 11_information_theory.ipynb


Special thanks to JPPCA for their generous support of this tutorial series.

2026/07/02