🎓 レベル:基礎 | 重要度:A(必須)
📎 前提:確率分布・期待値の初歩 | 次:結合・条件付きエントロピーと連鎖則
要点(BLUF)
- 自己情報量 は「その事象が起きたときの驚き」。稀な事象ほど情報が大きい。底2なら単位は bit、底 なら nat。
- エントロピー は自己情報量の期待値、すなわち 平均の驚き=不確かさ。
- 公正コインは 、確定した事象は 。 通り一様なら 。これが「何ビット必要か」の下限を与えます。
1. 情報とは「驚き」である
情報の量を測りたい。望ましい性質を3つ挙げます。(1) 稀な事象ほど情報が大きい(「明日太陽が東から昇る」はほぼ情報ゼロ、「明日雪が降る」は情報が大きい)。(2) 確率1の確定事象は情報ゼロ。(3) 独立な2つの事象を同時に知ったら、情報は足し算になる()。
確率 の単調減少関数で、かつ積を和に変える関数——それは 対数 しかありません。そこで 自己情報量 を
と定義します。 が小さいほど は大きく、 なら 、独立事象では で加法性も満たします。
2. log の底=情報の単位(必ず明示する)
対数の底は単位を決めるだけで、本質は変わりません。底を明示する習慣をつけてください。
| 底 | 単位 | 意味 |
|---|---|---|
| 2 | bit(ビット) | 2択(はい/いいえ)何回分か |
| nat(ナット) | 自然対数。理論計算で便利 | |
| 10 | dit / hartley | 10進1桁あたり |
換算は なので、。本シリーズでは 符号化・通信は bit(底2)、統計・MLとの接続では nat(底 ) を主に使い、各ノートで底を明記します。
3. エントロピー=自己情報量の期待値
確率変数 が値 を確率 で取るとき、驚きの平均が エントロピー:
底2なら単位は bit。 と約束します( で )。これは「 の値を1回知るのに平均何 bit の情報が得られるか」=「 を符号化するのに必要な平均ビット数の下限」です(シャノンの情報源符号化定理)。
2値エントロピー関数
が確率 で 1、 で 0 を取るとき、
これを 2値エントロピー関数 と呼びます。 で最大値 1 bit、 または で 0。下のコードで確かめます。
4. コード:エントロピーと「平均の驚き」(底2, bit)
公正コインで 1 bit、4記号の情報源 で bit。さらに、実際にサンプリングした観測の 驚きの平均 が理論エントロピーに一致することを大数の法則で確かめます。
import numpy as np
# --- 1. 2値エントロピー H(p) を底2(bit)で計算 ---
def H2(p):
p = np.asarray(p, dtype=float)
out = np.zeros_like(p)
m = (p > 0) & (p < 1)
out[m] = -p[m]*np.log2(p[m]) - (1-p[m])*np.log2(1-p[m])
return out
for p in [0.0, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0]:
print(f"p={p:>4}: H(p)={H2(p):.4f} bit")
print("-"*40)
# --- 2. 自己情報量(驚き) I(x) = -log2 p(x) ---
for p in [0.5, 0.25, 0.125, 0.01]:
print(f"p(x)={p:>6}: 自己情報量 I={-np.log2(p):.3f} bit")
print("-"*40)
# --- 3. モンテカルロ:平均の驚き = エントロピー ---
rng = np.random.default_rng(0)
probs = np.array([0.5, 0.25, 0.125, 0.125]) # 4記号の情報源
H_theory = -np.sum(probs*np.log2(probs))
N = 1_000_000
samples = rng.choice(len(probs), size=N, p=probs)
surprise = -np.log2(probs[samples]) # 各観測の驚き
print(f"理論エントロピー H = {H_theory:.4f} bit")
print(f"標本平均の驚き(N=1e6) = {surprise.mean():.4f} bit")
print("-"*40)
# --- 4. 底の違い:bit と nat ---
H_bit = -np.sum(probs*np.log2(probs))
H_nat = -np.sum(probs*np.log(probs))
print(f"H = {H_bit:.4f} bit, {H_nat:.4f} nat")
print(f"bit / nat の比 = {H_bit/H_nat:.4f} (= log2(e) = {np.log2(np.e):.4f})")
出力:
p= 0.0: H(p)=0.0000 bit
p= 0.1: H(p)=0.4690 bit
p=0.25: H(p)=0.8113 bit
p= 0.5: H(p)=1.0000 bit
p=0.75: H(p)=0.8113 bit
p= 0.9: H(p)=0.4690 bit
p= 1.0: H(p)=0.0000 bit
----------------------------------------
p(x)= 0.5: 自己情報量 I=1.000 bit
p(x)= 0.25: 自己情報量 I=2.000 bit
p(x)= 0.125: 自己情報量 I=3.000 bit
p(x)= 0.01: 自己情報量 I=6.644 bit
----------------------------------------
理論エントロピー H = 1.7500 bit
標本平均の驚き(N=1e6) = 1.7501 bit
----------------------------------------
H = 1.7500 bit, 1.2130 nat
bit / nat の比 = 1.4427 (= log2(e) = 1.4427)
出力の意味:(1) 2値エントロピーは で最大 1 bit、 で 0——もっとも予測しにくいのが五分五分。(2) 確率 の事象の驚きは 3 bit()。(3) 100万回サンプリングした観測の驚きの平均 は理論値 にぴたり——**エントロピーは「平均の驚き」**という定義が文字通り成り立っています。(4) 同じ分布でも bit と nat は 倍違う=底を言わなければ数値は意味を持ちません。
5. 数式の直観的意味
の値は「 を当てるのに平均何回の2択質問が要るか」とも読めます。4記号 なら、確率の高い記号を短い質問で当てる賢い戦略をとると平均 1.75 回で当たる——これは エントロピーの性質と最大エントロピー の最大エントロピー、ハフマン符号 の最適符号長と直結します。エントロピーは「不確かさ」「平均符号長の下限」「平均質問回数」という3つの顔を持つ同一量です。
⚠️ よくある誤解
- 「情報量は底に依らず決まる」ではない:値は底(単位)に依存します。bit か nat かを必ず明示。比較するときは同じ底で。
- 「エントロピーが大きい=情報が多くて良い」ではない:エントロピーは不確かさ。大きいほど予測が難しいだけで、良し悪しではありません。
- 「自己情報量とエントロピーは同じ」ではない:自己情報量 は特定の値の驚き(確率変数の関数)、エントロピー はその期待値(1つの数)。
- 「負の情報量がある」ではない: なので 。離散の自己情報量・エントロピーは常に非負(連続の微分エントロピーは別物、微分エントロピー)。
対応シミュレーション
- 本文のコードで「平均の驚き=エントロピー」を で実証済み(
information-theory-study/simulations/に整理予定)。
関連ノート
- 結合・条件付きエントロピーと連鎖則(次のトピック・複数変数へ拡張)
- エントロピーの性質と最大エントロピー(一様分布で最大になる証明)
- シャノンの情報源符号化定理(エントロピー=平均符号長の限界)
- 第1章 情報量とエントロピー 目次
- 情報理論 全体目次