跳轉到

1948 - Shannon 資訊理論(位元與熵的誕生)#

案件摘要#

1948 年,Claude Shannon(1916–2001) 在《貝爾系統技術期刊》 連載《通訊的數學理論》(A Mathematical Theory of Communication):

\[ \boxed{\text{資訊 = 不確定性的消除,單位是「位元」(bit)}} \]

他定義了資訊熵:

\[ \boxed{H(X) = -\sum_x p(x)\log_2 p(x) \quad\text{(不確定性的度量)}} \]

並證明了兩個驚人的定理: 1. 信道編碼定理:任何有雜訊的信道,都存在一個容量 \(C\) —— 只要傳輸率 < C,錯誤率可以任意小; 2. 信源編碼定理:資料可以被壓縮到極限熵—— Huffman 編碼(1952)與 ZIP(1989)的理論基礎。

\[ \text{通訊(工程)} \xrightarrow{\text{Shannon 1948}} \text{數學(資訊科學)}. \]

「位元(bit)」這個詞就是 Shannon 發明的—— 數位時代的基本單位,從這篇論文開始。

前因 -- 為什麼會有這個案子#

  • 貝爾實驗室的戰時任務(1941–1945): Shannon 在貝爾實驗室(Bell Labs)工作,二戰期間研究密碼學與通訊:
  • 1941 年他的保密系統的數學理論(戰時機密報告)是密碼學的數學化;
  • 他發現了一個秘密:加密與壓縮是同一件事的兩面—— 都是「消除冗餘」。
  • 通訊工程的混亂(1940s): 當時的通訊工程沒有統一的理論—— 電報、電話、廣播各自為政,工程師憑經驗調整。
\[ \text{沒有「資訊量」的度量} \Rightarrow \text{無法比較不同信道}. \]
  • Nyquist 與 Hartley 的先聲(1924/1928):
  • Nyquist(1924):電話線的傳輸率上限(取樣定理,1928);
  • Hartley(1928): \(I = \log n\) ( \(n\) 個可能訊息的資訊量)—— 但沒有考慮機率。 Shannon 的洞察(1948):機率才是關鍵——
\[ \text{資訊量} = -\log_2 p(x) \quad\text{(越不可能,資訊量越大)}. \]
  • von Neumann 的建議(1948): Shannon 為 \(H\) 找名字時,von Neumann 建議:

    「叫它『熵』吧——第一,統計力學已經用過這個名字; 第二,沒有人真的懂熵,所以辯論時你永遠佔優勢。」

\[ \text{統計力學的熵} \equiv \text{資訊的熵(Boltzmann } H = -k\sum p\ln p\text{)}. \]

線索與推理 -- 數學式、程式、理論#

第一條線索:資訊熵的定義與性質#

離散隨機變數的熵:

\[ H(X) = -\sum_x p(x)\log_2 p(x) \quad\text{(單位:位元)}. \]

性質: - 均勻分布最大: \(n\) 個等機率事件, \(H = \log_2 n\) (最大不確定性); - 確定事件為零: \(p(x)=1 \Rightarrow H = 0\) (無不確定性); - 條件熵:

\[ H(X|Y) \le H(X) \quad\text{(知道 Y 只會減少不確定性)}. \]
  • 互資訊:
\[ I(X;Y) = H(X) - H(X|Y) \quad\text{(Y 告訴你多少關於 X 的資訊)}. \]

第二條線索:信道編碼定理(Shannon 的最強結果)#

定理(Shannon, 1948):任何信道的容量:

\[ \boxed{C = \max_{p(x)}\, I(X;Y) \quad\text{(位元/秒)}} \]

二進位對稱信道(BSC,翻轉機率 \(p\) ):

\[ C = 1 - H_2(p), \qquad H_2(p) = -p\log_2 p - (1-p)\log_2(1-p). \]

驚人的推論:

\[ \text{只要 } R < C \text{,錯誤率可以任意小(不是「變小」,是任意小!)}. \]

例: \(p = 0.1\) 的信道, \(C = 1 - H_2(0.1) \approx 0.531\) 位元/次—— 即使 10% 的訊號被翻轉,仍能可靠傳輸 53% 的容量!

第三條線索:信源編碼與壓縮(Huffman 1952)#

定理(Shannon 信源編碼定理):

\[ \boxed{\text{資料可以被壓縮到熵的極限,但不能更低(無損)}} \]
  • Huffman 編碼(1952):最優前綴碼(學生論文!):
\[ \text{高機率符號} \to \text{短碼};\qquad \text{低機率符號} \to \text{長碼}. \]
  • 理論極限:Huffman 編碼的平均長度:
\[ H(X) \le \bar{L} < H(X) + 1. \]
  • 現代壓縮:ZIP(1989,LZ77+Huffman)、MP3(1993)、JPEG(1992)、 算術編碼(逼近熵的極限)——全部是 Shannon 理論的工程實現。

Python:資訊熵、信道容量與 Huffman 編碼#

import numpy as np
from collections import Counter
import heapq

# 1) 資訊熵的計算
def entropy(probs):
    """H = -Σ p log₂ p"""
    probs = np.array([p for p in probs if p > 0])
    return -np.sum(probs * np.log2(probs))

print("資訊熵:")
print(f"  均勻 2 面(公平硬幣):H = {entropy([0.5, 0.5]):.4f} 位元")
print(f"  均勻 6 面(公平骰子):H = {entropy([1/6]*6):.4f} 位元")
print(f"  均勻 256 面(1 byte):H = {entropy([1/256]*256):.4f} 位元(= log₂256 = 8)")
print(f"  偏斜(p=0.9/0.1):  H = {entropy([0.9, 0.1]):.4f} 位元")
print(f"  確定事件(p=1):    H = {entropy([1.0]):.4f} 位元\n")

# 2) 中文與英文的熵(估計)
text_en = "the quick brown fox jumps over the lazy dog the the the"
text_zh = "資訊科學是研究資訊的科學資訊是消除不確定性的度量"
def text_entropy(text):
    cnt = Counter(text)
    total = len(text)
    probs = [c/total for c in cnt.values()]
    return entropy(probs), len(cnt)

H_en, n_en = text_entropy(text_en)
H_zh, n_zh = text_entropy(text_zh)
print(f"英文樣本({n_en} 個字元):H = {H_en:.4f} 位元/字元")
print(f"中文樣本({n_zh} 個字元):H = {H_zh:.4f} 位元/字元\n")

# 3) 信道容量(二進位對稱信道)
def h2(p):
    """二進位熵函數"""
    if p == 0 or p == 1:
        return 0.0
    return -p*np.log2(p) - (1-p)*np.log2(1-p)

def bsc_capacity(p):
    """BSC 容量:C = 1 - H₂(p)"""
    return 1 - h2(p)

print("二進位對稱信道容量(C = 1 - H₂(p)):")
for p in [0.0, 0.01, 0.1, 0.25, 0.5]:
    C = bsc_capacity(p)
    print(f"  錯誤率 p = {p:.2f}: C = {C:.4f} 位元/次")
print("  → 即使 10% 錯誤,仍能可靠傳輸 53% 的容量(Shannon 極限)\n")

# 4) Huffman 編碼(最優前綴碼,1952)
def huffman_codes(text):
    """產生 Huffman 編碼"""
    cnt = Counter(text)
    heap = [[w, [sym, ""]] for sym, w in cnt.items()]
    heapq.heapify(heap)
    while len(heap) > 1:
        lo = heapq.heappop(heap)
        hi = heapq.heappop(heap)
        for pair in lo[1:]:
            pair[1] = '0' + pair[1]
        for pair in hi[1:]:
            pair[1] = '1' + pair[1]
        heapq.heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:])
    return dict(sorted(heapq.heappop(heap)[1:]))

text = "abracadabra"
codes = huffman_codes(text)
cnt = Counter(text)
total = len(text)
print(f"Huffman 編碼('{text}'):")
avg_len = 0
for sym in sorted(cnt):
    print(f"  '{sym}' (p={cnt[sym]/total:.2f}): {codes[sym]}")
    avg_len += cnt[sym]/total * len(codes[sym])
H = text_entropy(text)[0]
print(f"  平均碼長 = {avg_len:.4f} 位元")
print(f"  熵 H = {H:.4f} 位元")
print(f"  H ≤ 平均碼長 < H+1:{H:.4f} ≤ {avg_len:.4f} < {H+1:.4f} ✓")
print(f"  壓縮率(vs 固定 4 位元/字元):{(1 - avg_len/4)*100:.1f}%")
輸出:
資訊熵:
  均勻 2 面(公平硬幣):H = 1.0000 位元
  均勻 6 面(公平骰子):H = 2.5850 位元
  均勻 256 面(1 byte):H = 8.0000 位元(= log₂256 = 8)
  偏斜(p=0.9/0.1):  H = 0.4690 位元
  確定事件(p=1):    H = 0.0000 位元

英文樣本(27 個字元):H = 4.1671 位元/字元
中文樣本(16 個字元):H = 3.8554 位元/字元

二進位對稱信道容量(C = 1 - H₂(p)):
  錯誤率 p = 0.00: C = 1.0000 位元/次
  錯誤率 p = 0.01: C = 0.9192 位元/次
  錯誤率 p = 0.10: C = 0.5310 位元/次
  錯誤率 p = 0.25: C = 0.1887 位元/次
  錯誤率 p = 0.50: C = 0.0000 位元/次
  → 即使 10% 錯誤,仍能可靠傳輸 53% 的容量(Shannon 極限)

Huffman 編碼('abracadabra'):
  'a' (p=0.45): 0
  'b' (p=0.18): 110
  'c' (p=0.09): 1110
  'd' (p=0.09): 1111
  'r' (p=0.18): 10
  平均碼長 = 2.0909 位元
  熵 H = 2.0404 位元
  H ≤ 平均碼長 < H+1:2.0404 ≤ 2.0909 < 3.0404 ✓
  壓縮率(vs 固定 4 位元/字元):47.7%

結案 -- 後果與影響#

  • 數位時代的基本單位(1948):
\[ \boxed{\text{位元(bit)= Shannon 發明的詞}} \]

從此,資訊可以被量化—— 電腦的記憶體(KB/MB/GB)、網路的頻寬(Mbps)、資料庫的容量—— 全部用 Shannon 的單位。 - 數位通訊的革命(1948–): - 信道編碼定理 → 錯誤更正碼: - Hamming 碼(1950):Hamming(Richard Hamming,1968 圖靈獎) 在貝爾實驗室發明錯誤更正碼; - Reed–Solomon 碼(1960):CD、DVD、QR 碼的錯誤更正; - Turbo 碼(1993)與 LDPC(1963/1996):逼近 Shannon 極限—— 4G/5G 行動通訊、深空通訊的基礎。

\[ \text{Shannon 極限(1948)} \xrightarrow{\text{Turbo/LDPC(1993)}} \text{5G 的頻寬效率}. \]
  • 資料壓縮的世紀(1952–):
\[ \text{Huffman(1952)} \to \text{LZ77/78(1977/78)} \to \text{ZIP(1989)} \to \text{MP3/JPEG(1992/93)} \to \text{WebP/AV1(2010s)}. \]

沒有壓縮,就沒有網路影音—— 一部 2 小時的電影(未壓縮)需要 200 GB,壓縮後 2 GB。 - AI 與機器學習的理論基礎(1950s–): - 決策樹(ID3, 1979):用資訊增益(互資訊)選擇分裂特徵; - 最大熵模型(1990s):自然語言處理的核心; - 變分推斷與 VAE(2013):KL 散度(相對熵)是深度學習的損失函數; - 語言模型(GPT, 2018–):cross-entropy loss—— GPT 的訓練目標就是「最小化熵」!

\[ \text{Shannon 熵(1948)} \xrightarrow{\text{cross-entropy(2018)}} \text{GPT 的訓練}. \]
  • 密碼學的基礎(1949): Shannon 的《保密系統的數學理論》(1949)定義了完美保密:
\[ \boxed{I(\text{明文};\text{密文}) = 0 \quad\text{(密文不洩漏任何明文資訊)}} \]

一次一密(one-time pad)是唯一被證明完美保密的系統—— 這是密碼學的理論起點(見「2002-RSA公開金鑰.md」)。 - 生物與物理的交匯(1950s–): - DNA(1953):Watson–Crick 的雙螺旋——DNA 是數位資訊(4 個鹼基 = 2 位元); - 資訊與熱力學:Maxwell 惡魔(1867)的除魅—— Landauer(1961)證明抹除一位元需要 \(kT\ln 2\) 的能量—— 資訊是物理的! - 歷史定位:Shannon 是資訊時代的牛頓—— 他把「資訊」從直覺概念變成可量化的數學物件:

\[ \text{通訊(工程)} \xrightarrow{\text{Shannon 1948}} \text{資訊科學} \xrightarrow{} \text{電腦、網路、AI、DNA}. \]

一句話:這個世界的一切都可以用位元來衡量。

關鍵人物與文獻#

  • C. E. Shannon:A Mathematical Theory of Communication(1948);Communication Theory of Secrecy Systems(1949);位元。
  • H. Nyquist:取樣定理(1928)——Shannon 的先聲。
  • R. V. L. Hartley:Transmission of Information(1928)—— \(I = \log n\) 。
  • D. A. Huffman:A Method for the Construction of Minimum-Redundancy Codes(1952)。
  • R. Landauer:Irreversibility and heat generation in the computing process(1961)——資訊是物理的。
  • 相關案件:1936-圖靈機.md、2002-RSA公開金鑰.md、2018-深度學習三巨頭.md、通訊技術/1948-資訊理論.md。