香农熵

在資訊理論中，**熵**（英語：entropy）是接收的每條消息中包含的資訊的平均量，又被稱為**資訊熵**、**信源熵**、**平均資訊本體量**。這裡，「消息」代表來自分布或數據流中的事件、樣本或特徵。（熵最好理解為不確定性的量度而不是確定性的量度，因為越隨機的信源的熵越大。）來自信源的另一個特徵是樣本的機率分布。這裡的想法是，比較不可能發生的事情，當它發生了，會提供更多的資訊。由於一些其他的原因，把資訊（熵）定義為機率分布的對數的相反數是有道理的。事件的機率分布和每個事件的資訊量構成了一個隨機變量，這個隨機變量的均值（即期望）就是這個分布產生的資訊量的平均值（即熵）。熵的單位通常為位元，但也用 Sh、nat、Hart 計量，取決於定義用到對數的底。

採用機率分布的對數作為資訊的量度的原因是其可加性。例如，投擲一次硬幣提供了 1 Sh 的資訊，而擲 m 次就為 m 位。更一般地，你需要用 log2(_n_) 位來表示一個可以取 _n_ 個值的變量。

在 1948 年，克勞德・艾爾伍德・夏農將熱力學的熵，引入到資訊理論，因此它又被稱為**夏農熵**(Shannon entropy)。

## 簡介

熵的概念最早起源於物理學，用於度量一個熱力學系統的無序程度。在資訊理論裡面，熵是對不確定性的測量。但是在資訊世界，熵越高，則能傳輸越多的資訊，熵越低，則意味著傳輸的資訊越少。

英語文本數據流的熵比較低，因為英語很容易讀懂，也就是說很容易被預測。即便我們不知道下一段英語文字是什麼內容，但是我們能很容易地預測，比如，字母 e 總是比字母 z 多，或者 qu 字母組合的可能性總是超過 q 與任何其它字母的組合。如果未經壓縮，一段英文文本的每個字母需要 8 個位元來編碼，但是實際上英文文本的熵大概只有 4.7 位元。這是由於英文的編碼包含了各式符號，如逗號、引號等。因此英文輸入法使用了 8 個位元來表達一共 256 個字母及符號。

如果壓縮是無損的，即通過解壓縮可以百分之百地恢復初始的消息內容，那麼壓縮後的消息攜帶的資訊和未壓縮的原始消息是一樣的多。而壓縮後的消息可以通過較少的位元傳遞，因此壓縮消息的每個位元能攜帶更多的資訊，也就是說壓縮資訊的熵更加高。熵更高意味著比較難於預測壓縮消息攜帶的資訊，原因在於壓縮消息裡面沒有冗餘，即每個位元的消息攜帶了一個位元的資訊。夏農的信源編碼定理揭示了，任何無損壓縮技術不可能讓一位元的消息攜帶超過一位元的資訊。消息的熵乘以消息的長度決定了消息可以攜帶多少資訊。

夏農的信源編碼定理同時揭示了，任何無損壓縮技術不可能縮短任何消息。根據鴿籠原理，如果有一些消息變短，則至少有一條消息變長。在實際使用中，由於我們通常只關注於壓縮特定的某一類消息，所以這通常不是問題。例如英語文檔和隨機文字，數位照片和噪音，都是不同類型的。所以如果一個壓縮算法會將某些不太可能出現的，或者非目標類型的消息變得更大，通常是無關緊要的。但是，在我們的日常使用中，如果去壓縮已經壓縮過的數據，仍會出現問題。例如，將一個已經是 FLAC 格式的音樂文件壓縮為 ZIP 文件很難使它占用的空間變小。

### 熵的計算

如果有一枚理想的硬幣，其出現正面和反面的機會相等，則拋硬幣事件的熵等於其能夠達到的最大值。我們無法知道下一個硬幣拋擲的結果是什麼，因此每一次拋硬幣都是不可預測的。因此，使用一枚正常硬幣進行若干次拋擲，這個事件的熵是一位元，因為結果不外乎兩個 —— 正面或者反面，可以表示為 `0, 1` 編碼，而且兩個結果彼此之間相互獨立。若進行 `n` 次獨立實驗，則熵為 `n`，因為可以用長度為 `n` 的位元流表示。但是如果一枚硬幣的兩面完全相同，那個這個系列拋硬幣事件的熵等於零，因為結果能被準確預測。現實世界裡，我們收集到的數據的熵介於上面兩種情況之間。

另一個稍微複雜的例子是假設一個隨機變量 `X`，取三種可能值 ${\begin{smallmatrix}x_{1},x_{2},x_{3}\end{smallmatrix}}$ ，機率分別為 ${\begin{smallmatrix}{\frac {1}{2}},{\frac {1}{4}},{\frac {1}{4}}\end{smallmatrix}}$ ，那麼編碼平均位元長度是： ${\begin{smallmatrix}{\frac {1}{2}}\times 1+{\frac {1}{4}}\times 2+{\frac {1}{4}}\times 2={\frac {3}{2}}\end{smallmatrix}}$ 。其熵為 3/2。

因此熵實際是對隨機變量的位元量和順次發生機率相乘再總和的數學期望。

## 定義

依據 Boltzmann's H-theorem，夏農把隨機變量 _X_ 的熵值 Η（希臘字母 Eta）定義如下，其值域為 {_x_1, ..., _x_n}：

　
: $\mathrm {H} (X)=\mathrm {E} [\mathrm {I} (X)]=\mathrm {E} [-\ln(\mathrm {P} (X))]$ 。

其中，P 為 _X_ 的機率質量函數（probability mass function），E 為期望函數，而 I (_X_) 是 _X_ 的資訊量（又稱為資訊本體）。I (_X_) 本身是個隨機變數。

當取自有限的樣本時，熵的公式可以表示為：

　
: $\mathrm {H} (X)=\sum _{i}{\mathrm {P} (x_{i})\,\mathrm {I} (x_{i})}=-\sum _{i}{\mathrm {P} (x_{i})\log _{b}\mathrm {P} (x_{i})},$

在這裏 _b_ 是對數所使用的底，通常是 2, 自然常數 e，或是 10。當 _b_= 2，熵的單位是 bit；當 _b_= e，熵的單位是 nat；而當 _b_= 10, 熵的單位是 Hart。

_p_i= 0 時，對於一些 _i_ 值，對應的被加數 0 logb0 的值將會是 0，這與極限一致。

　
: $\lim _{p\to 0+}p\log p=0$ 。

還可以定義事件 _X_ 與 _Y_ 分別取 _xi_ 和 _yj_ 時的條件熵為

　
: $\mathrm {H} (X|Y)=-\sum _{i,j}p(x_{i},y_{j})\log {\frac {p(x_{i},y_{j})}{p(y_{j})}}$

其中 _p_(_xi_, _yj_) 為 _X_ = _xi_ 且 _Y_ = _yj_ 時的機率。這個量應當理解為你知道 _Y_ 的值前提下隨機變量 _X_ 的隨機性的量。

## 範例

如果有一個系統 S 內存在多個事件 S = {E1,...,En}，每個事件的機率分布 P = {p1, ..., pn}，則每個事件本身的訊息（資訊本體）為：

　
: $I_{e}=-\log _{2}{p_{i}}$ （對數以 2 為底，單位是位元（bit））

　
: $I_{e}=-\ln {p_{i}}$ （對數以 $e$ 為底，單位是納特 /nats）

如英語有 26 個字母，假如每個字母在文章中出現次數平均的話，每個字母的訊息量為：

　
: $I_{e}=-\log _{2}{1 \over 26}=4.7$

以日文五十音平假名作為相對範例，假設每個平假名日語文字在文章中出現的機率相等，每個平假名日語文字可攜帶的資訊量為：

　
: $I_{e}=-\log _{2}{1 \over 50}=5.64$

而漢字常用的有 2500 個，假如每個漢字在文章中出現次數平均的話，每個漢字的資訊量為：

　
: $I_{e}=-\log _{2}{1 \over 2500}=11.3$

實際上每個字母和每個漢字在文章中出現的次數並不平均，比方說較少見字母（如 z）和罕用漢字就具有相對高的資訊量。但上述計算提供了以下概念：使用書寫單元越多的文字，每個單元所包含的訊息量越大。

熵是整個系統的平均消息量，即：

　
: $H_{s}=\sum _{i=1}^{n}p_{i}I_{e}=-\sum _{i=1}^{n}p_{i}\log _{2}p_{i}$

因為和熱力學中描述熱力學熵的玻爾茲曼公式本質相同（僅僅單位不同，一納特的資訊量即相當於 k 焦耳每開爾文的熱力學熵），所以也稱為「熵」。

如果兩個系統具有同樣大的消息量，如一篇用不同文字寫的同一文章，由於漢字的資訊量較大，中文文章應用的漢字就比英文文章使用的字母要少。所以漢字印刷的文章要比其他應用總體數量少的字母印刷的文章要短。即使一個漢字占用兩個字母的空間，漢字印刷的文章也要比英文字母印刷的用紙少。

## 熵的特性

可以用很少的標準來描述夏農熵的特性，將在下面列出。任何滿足這些假設的熵的定義均正比以下形式

　
: $-K\sum _{i=1}^{n}p_{i}\log(p_{i})$

其中_，K_ 是與選擇的度量單位相對應的一個正比常數。

下文中，_pi_ = Pr(_X_ = _xi_) 且 $\mathrm {H} _{n}(p_{1},\ldots ,p_{n})=\mathrm {H} (X)$

### 連續性

該量度應連續，機率值小幅變化只能引起熵的微小變化。

### 對稱性

符號 _xi_ 重新排序後，該量度應不變。

　
: $\mathrm {H} _{n}\left(p_{1},p_{2},\ldots \right)=\mathrm {H} _{n}\left(p_{2},p_{1},\ldots \right)$ 等。

### 極值性

當所有符號有同等機會出現的情況下，熵達到最大值（所有可能的事件同等機率時不確定性最高）。

　
: $\mathrm {H} _{n}(p_{1},\ldots ,p_{n})\leq \mathrm {H} _{n}\left({\frac {1}{n}},\ldots ,{\frac {1}{n}}\right)=\log _{b}(n)$ 。

等機率事件的熵應隨符號的數量增加。

　
: $\mathrm {H} _{n}{\bigg (}\underbrace {{\frac {1}{n}},\ldots ,{\frac {1}{n}}} _{n}{\bigg )}=\log _{b}(n)<\log _{b}(n+1)=\mathrm {H} _{n+1}{\bigg (}\underbrace {{\frac {1}{n+1}},\ldots ,{\frac {1}{n+1}}} _{n+1}{\bigg )}.$

### 可加性

熵的量與該過程如何被劃分無關。

最後給出的這個函數關係刻畫了一個系統與其子系統的熵的關係。如果子系統之間的相互作用是已知的，則可以通過子系統的熵來計算一個系統的熵。

給定 _n_ 個均勻分布元素的集合，分為 _k_ 個箱（子系統），每個裡面有 _b_1, ..., _bk_ 個元素，合起來的熵應等於系統的熵與各個箱子的熵的和，每個箱子的權重為在該箱中的機率。

對於正整數 _bi_ 其中 _b_1 + ... + _bk_ = _n_ 來說，

　
: $\mathrm {H} _{n}\left({\frac {1}{n}},\ldots ,{\frac {1}{n}}\right)=\mathrm {H} _{k}\left({\frac {b_{1}}{n}},\ldots ,{\frac {b_{k}}{n}}\right)+\sum _{i=1}^{k}{\frac {b_{i}}{n}}\,\mathrm {H} _{b_{i}}\left({\frac {1}{b_{i}}},\ldots ,{\frac {1}{b_{i}}}\right)$ 。

選取 _k_ = _n_，_b_1 = ... = _bn_ = 1，這意味著確定符號的熵為零：Η1(1) = 0。這就是說可以用 _n_ 進位熵來定義 _n_ 個符號的信源符號集的效率。參見資訊冗餘。

## 進一步性質

夏農熵滿足以下性質，藉由將熵看成「在揭示隨機變量 _X_ 的值後，從中得到的資訊量（或消除的不確定性量）」，可來幫助理解其中一些性質。

* 增減一機率為零的事件不改變熵：

　
: : $\mathrm {H} _{n+1}(p_{1},\ldots ,p_{n},0)=\mathrm {H} _{n}(p_{1},\ldots ,p_{n})$

* 可用琴生不等式證明

　
: : $\mathrm {H} (X)=\operatorname {E} \left[\log _{b}\left({\frac {1}{p(X)}}\right)\right]\leq \log _{b}\left(\operatorname {E} \left[{\frac {1}{p(X)}}\right]\right)=\log _{b}(n)$

　
: 具有均勻機率分布的信源符號集可以有效地達到最大熵 logb(_n_)：所有可能的事件是等機率的時候，不確定性最大。

* 計算 (_X_,_Y_) 得到的熵或資訊量（即同時計算 _X_ 和 _Y_）等於通過進行兩個連續實驗得到的資訊：先計算 _Y_ 的值，然後在你知道 _Y_ 的值條件下得出 _X_ 的值。寫作

　
: : $\mathrm {H} (X,Y)=\mathrm {H} (X|Y)+\mathrm {H} (Y)=\mathrm {H} (Y|X)+\mathrm {H} (X)$ 。

* 如果 _Y=f(X)_，其中 _f_ 是確定性的，那麼 Η(_f_(_X_)|_X_) = 0。應用前一公式 Η(_X_, _f_(_X_)) 就會產生

　
: : $\mathrm {H} (X)+\mathrm {H} (f(X)|X)=\mathrm {H} (f(X))+\mathrm {H} (X|f(X)),$

　
: 所以 Η(_f_(_X_)) ≤ Η(_X_)，因此當後者是通過確定性函數傳遞時，變量的熵只能降低。

* 如果 _X_ 和 _Y_ 是兩個獨立實驗，那麼知道 _Y_ 的值不影響我們對 _X_ 值的認知（因為兩者獨立，所以互不影響）：

　
: : $\mathrm {H} (X|Y)=\mathrm {H} (X)$ 。

* 兩個事件同時發生的熵不大於每個事件單獨發生的熵的總和，且僅當兩個事件是獨立的情況下相等。更具體地說，如果 _X_ 和 _Y_ 是同一機率空間的兩個隨機變量，而 _(X,Y)_ 表示它們的笛卡爾積，則

　
: : $\mathrm {H} (X,Y)\leq \mathrm {H} (X)+\mathrm {H} (Y)$ 。

　
: 在前兩條熵的性質基礎上，很容易用數學證明這一點。

## 和熱力學熵的聯繫

物理學家和化學家對一個系統自發地從初始狀態向前演進過程中，遵循熱力學第二定律而發生的熵的變化更感興趣。在傳統熱力學中，熵被定義為對系統的宏觀測定，並沒有涉及機率分布，而機率分布是資訊熵的核心定義。

根據 Jaynes（1957）的觀點，熱力學熵可以被視為夏農資訊理論的一個應用：
熱力學熵被解釋成與定義系統的微態細節所需的進一步夏農資訊量成正比，波茲曼常數為比例系數，其中系統與外界無交流，只靠古典熱力學的巨觀變數所描述。加熱系統會提高其熱力學熵，是因為此行為增加了符合可測巨觀變數
的系統微態的數目，也使得所有系統的的完整敘述變得更長。（假想的）麥克斯韋妖可利用每個分子的狀態資訊，來降低熱力學熵，但是羅夫・蘭道爾（於 1961 年）和及其同事則證明了，讓小妖精行使職責本身 —— 即便只是了解和儲存每個分子最初的夏農資訊 —— 就會給系統帶來熱力學熵的增加，因此總的來說，系統的熵的總量沒有減少。這就解決了 Maxwell 思想實驗引發的悖論。蘭道爾原理也為現代計算機處理大量資訊時所產生的熱量給出了下限，雖然現在計算機的廢熱遠遠比這個限制高。

## 逸聞

貝爾實驗室曾流傳一則可信度不高的傳聞：馮諾依曼建議夏農為這個概念取名為「熵」，理由是這個熱力學名詞別人不懂，容易被唬住。

## 參見

* 熵 (生態學)
* 熵 (熱力學)
* 熵編碼
* 麥克斯韋妖

## 參考

## 外部連結

* Hazewinkel, Michiel (編), Entropy, 数学百科全书，Springer, 2001, ISBN 978-1-55608-010-4