資訊熵的計算公式 一起來學資訊理論(一) 資訊熵

2021-10-12 05:50:12 字數 2286 閱讀 2684

引子

資訊是什麼?

在夏農的劃時代**發表前,我們對「資訊」這個詞的含義只有乙個模糊的概念。夏農針對「資訊」給出了乙個令人信服的定義,並且說明了如何對資訊進行定量計算,並對這個定義給出了數學證明。之後,我們對「資訊」的識別、傳輸、儲存、加工等才有了堅實的數學基礎;有了堅實的數學基礎,才發展出各種工程應用。

因此,毫不誇張,資訊理論是電腦科學的基石理論之一。

資訊熵

夏農對資訊的定義:資訊是不確定性減少的度量。換句話說,「資訊」,能減少事物的不確定性;如果乙個「資訊」對事物不確定性的減少沒有任何作用,那麼這個「資訊」的資訊量是0。

我非常喜歡這個定義。它如此簡潔美妙、直指本質,簡直已經超越數學,向哲學領域進軍。夏農真是劃時代的天才。

以上只是定性的描述。更偉大的是,夏農還給出了定量的計算公式:

資訊熵h(x)= -σp(x) logp(x)

其中p(x)是某件事情發生的概率。(這句話相對好理解但不夠嚴謹,更嚴謹的說法應為p(x)是x的概率質量函式)

同時夏農在**中給出了證明,為什麼資訊熵公式應該是對數,應該是這個表示式。

以下為夏農的證明,相對枯燥,對數學不感興趣的可以跳過這段,直接看後面結論。

現有一系列隨機事件 p1,p2,…,pn的集合,它們發生的概率已知。假設存在乙個能反映事件被選擇的結果的不確定度的度量 h(p1,p2,…,pn),那麼它應該滿足下列性質:

1.h 應該連續於pi;

2.若所有 pi 相等(都等於 1/n ),則 h應該是 n 的單調遞增函式(當可候選的事件數越多,不確定度相應地也越大)

證明:令 h(1/n,1/n,…,1/n)=a(n)

根據條件3,從事件集合 s中一次選擇 m個事件 sm等價於從 s中選擇 m次乙個事件:

a(sm)=ma(s)

同理,有

a(tn)=na(t)

令 n 足夠大,我們能找到乙個 m 滿足 sm≤tn<sm+1

取對數:m/n≤logt/logs≤(m/n+1/n)

|m/n-logt/logs|<α

其中α是任意小的數。

由 a(n)的單調性:

a(sm)≤a(tn)≤a(sm+1)

ma(s) ≤na(t) ≤(m+1)a(s)

同時除以 na(s):

m/n≤a(t)/ a(s)≤(m/n+1/n)

|m/n- a(t)/ a(s)|<α

| a(t)/ a(s)- logt/logs|<2α

注意到α是任意小的數,因此2α也是任意小的數。

故a(t)=klogt

前面是基於等概率求得的。現在假設我們依然從 n個事件裡選取事件,但這次不再是等概率了,第 i個事件被選取的概率為 pi=ni/σni。再一次使用性質3,將從總共有 σni中可能的事件集中一次選取 n個事件分解為以概率 pi,…,pn 選取 n 次,且第 i 個被選取後,從 ni中選取是等概率的,那麼有:

klogσni=h(p1,…,pn)+kσpilogni

h=k[σpilogσni-σpilogni] = -kσpilog(ni/σni)= -kσpi logpi

(非等概率的這部分證明其實沒有完全看明白,暫時先記到這裡吧。)

至此,得證。

以上的數學證明,簡化一下是這樣子的:

如果我們把資訊定義為乙個度量h。並且h滿足如下性質:

①h 應該連續於pi;②若所有 pi 相等(都等於 1/n ),則 h應該是 n 的單調遞增函式(當可候選的事件數越多,不確定度相應地也越大);③若其中乙個選擇被分解為兩個連續的子選擇,那麼原始的 h 值應該為分解後的 h 值的加權平均和。

這些性質是和我們通俗理解上的「資訊」是一致的。

那麼,夏農就從數學上證明了,這個度量h就必須是夏農給出的對數表達形式:h(x)=-σp(x) logp(x)

夏農公式

夏農資訊理論首先在通訊領域大放異彩,之後在加密解密、壓縮、自然語言識別等多個領域都體現出了巨大價值。

資訊熵是夏農資訊理論中的第乙個重要概念,之後還有另乙個有名的公式:夏農公式。

下一回,我們再說這個著名的夏農公式。

一起來學Go go的變數

變數是幾乎所有程式語言中最基本的組成元素,從根本上說,變數相當於是一塊資料儲存空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。變數的宣告 go語言引入了關鍵字ver,而型別資訊放在變數名之...

一起來學Go go的變數

變數是幾乎所有程式語言中最基本的組成元素,從根本上說,變數相當於是一塊資料儲存空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。變數的宣告 go語言引入了關鍵字ver,而型別資訊放在變數名之...

我們一起來學Shell shell的函式

我們一起來學shell 初識shell 我們一起來學shell shell的變數 我們一起來學shell shell的條件判斷 我們一起來學shell shell的迴圈控制 我們一起來學shell shell的陣列 我們一起來學shell shell的函式 我們一起來學shell shell的併發及...