Mímisbrunnr知恵の泉

← 情報理論 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:無歪み符号化とKraft不等式漸近等分割性とAEP | 次:ハフマン符号

要点(BLUF)

1. 下界(逆定理):LHL\ge H

一意復号可能な符号の符号長は Kraft 不等式 i2li1\sum_i 2^{-l_i}\le1 を満たします(無歪み符号化とKraft不等式)。qi=2li/Zq_i=2^{-l_i}/ZZ=2li1Z=\sum 2^{-l_i}\le1)とおくと、平均符号長は

L=ipili=ipi(log2qilog2Z)=H(p)+D(pq)log2Z    H(p)L = \sum_i p_i l_i = \sum_i p_i\big(-\log_2 q_i - \log_2 Z\big) = H(p) + D(p\,\|\,q) - \log_2 Z \;\ge\; H(p)

D(pq)0D(p\|q)\ge0log2Z0\log_2 Z\le0 の両方が LL を押し上げるので、どんな符号でも平均長はエントロピー以上。等号は q=pq=p かつ Z=1Z=1、すなわち li=log2pil_i=-\log_2 p_i が整数のとき(確率が2の冪のとき)だけ。

2. 達成可能性:シャノン符号とブロック化

シャノン符号長 li=log2pil_i=\lceil-\log_2 p_i\rceil は Kraft を満たし(無歪み符号化とKraft不等式)、log2pili<log2pi+1-\log_2 p_i\le l_i< -\log_2 p_i+1 から

HL<H+1H \le L < H + 1

「+1」は1記号ごとに最大1 bit 無駄になりうるという意味。そこで kk 記号をまとめて1ブロックとして符号化すると、無駄はブロック全体で1 bit、すなわち1記号あたり 1/k1/k に薄まります:

HLkk<H+1k    k    HH \le \frac{L_k}{k} < H + \frac{1}{k} \;\xrightarrow{\;k\to\infty\;}\; H

ブロックを長くするほど1記号あたりの符号長はエントロピーに収束します。これが「達成可能」の意味です。

3. コード:ブロック化で L/kHL/k\to H(底2, bit)

情報源 p(a)=0.8,p(b)=0.2p(a)=0.8,p(b)=0.2H=0.7219H=0.7219 bit)で、ブロック長 kk の最適符号(ハフマン)平均長を1記号あたりに直すと、HH に収束します。

import numpy as np, heapq
from itertools import product

def huffman_avg_len(probs):
    # probs: list of probabilities -> 最適接頭符号の平均長
    heap=[[pp,i,[i]] for i,pp in enumerate(probs)]; heapq.heapify(heap)
    lengths=[0]*len(probs); cnt=len(probs)
    if len(probs)==1: return 1.0
    while len(heap)>1:
        lo=heapq.heappop(heap); hi=heapq.heappop(heap)
        for i in lo[2]: lengths[i]+=1
        for i in hi[2]: lengths[i]+=1
        heapq.heappush(heap,[lo[0]+hi[0],cnt,lo[2]+hi[2]]); cnt+=1
    return sum(p*l for p,l in zip(probs,lengths))

pv=np.array([0.8,0.2])
H = -np.sum(pv*np.log2(pv))
print(f"エントロピー H = {H:.4f} bit/記号(情報源 p(a)=0.8, p(b)=0.2)")
print(f"{'ブロック長 k':>12}{'L_k/k(bit/記号)':>18}{'上界 H+1/k':>14}")
for k in [1,2,4,8,12]:
    probs=[np.prod(pv[list(b)]) for b in product([0,1],repeat=k)]
    Lk=huffman_avg_len(probs)
    print(f"{k:>12}{Lk/k:>18.4f}{H+1/k:>14.4f}")
print(f"\n下界 H={H:.4f} <= L_k/k < H+1/k。ブロックを伸ばすと H に収束(符号化定理)")

出力:

エントロピー H = 0.7219 bit/記号(情報源 p(a)=0.8, p(b)=0.2)
     ブロック長 k     L_k/k(bit/記号)      上界 H+1/k
           1            1.0000        1.7219
           2            0.7800        1.2219
           4            0.7408        0.9719
           8            0.7322        0.8469
          12            0.7250        0.8053

下界 H=0.7219 <= L_k/k < H+1/k。ブロックを伸ばすと H に収束(符号化定理)

出力の意味:1記号ずつ符号化すると L=1.0L=1.0 bit と無駄が大きい(2値は最低1 bit 必要なので H=0.72H=0.72 には届かない)。しかしブロック長を k=2,4,8,12k=2,4,8,12 と伸ばすと、1記号あたりの符号長が 0.780.740.730.7250.78\to0.74\to0.73\to0.725 と単調に H=0.7219H=0.7219 へ収束していきます。理論上界 H+1/kH+1/k1.720.811.72\to0.81 と縮み、達成可能性を裏づけます。整数長の制約による無駄はブロック化で償却できる——これが「エントロピーは到達可能な限界」という定理の中身です。

4. AEP による証明の骨格

直接的な証明は AEP(漸近等分割性とAEP)から来ます。長さ nn の系列のうち典型集合 Aε(n)A_\varepsilon^{(n)} は約 2nH2^{nH} 個で、確率のほぼ全部を占めます。

「典型系列の個数の対数=nHnH」が、そのまま必要ビット数になります。

5. 数式の直観的意味

符号化定理は「圧縮率には越えられない壁があり、その壁の高さがエントロピー」と言っています。テキストファイルが gzip で半分になるのは、元の表現(1文字8 bit)が実際のエントロピー(英語で約1.5 bit/文字)よりずっと冗長だから。逆に、すでにエントロピー近くまで圧縮されたデータ(暗号文・乱数)はそれ以上縮みません。この限界は記憶のある情報源ではエントロピーレート(結合・条件付きエントロピーと連鎖則)に置き換わり、実際の汎用圧縮器(算術符号とユニバーサル符号)がこの限界に肉薄します。

⚠️ よくある誤解

対応シミュレーション

関連ノート