天天看點

《偉大的計算原理》一資訊的測量

本節書摘來華章計算機《偉大的計算原理》一書中的第3章 ,[美]彼得 j. 丹甯(peter j. denning)

克雷格 h. 馬特爾(craig h. martell)著 羅英偉 高良才 張 偉 熊瑞勤 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

香農設計了一個用于測量資訊源中所含資訊的方法,因為他想知道資訊源中最短碼的長度。編碼的位數量并不能作為一個衡量标準,正如我們在上文中所看到的,單個資訊源可以用任意數量的不同編碼來表示。他的結論是一個好的衡量标準應該是消息集合中最短編碼的長度,若編碼再短一些則無法傳輸消息源的所有資訊。

他認為衡量資訊不應該依賴人類所觀察到的編碼的含義,而應該忽略資訊的上下文,尋求編碼、傳輸和解碼的固定工作機制。郵政服務遵循相似的準則:他們的分發和傳輸系統從不依賴于所運輸的信封中的内容。香農非凡的洞察力表現在“将資訊的接收等同于不确定性的減少”。他定義資訊為判斷資訊源正在傳送哪個消息所需要回答的是非(yes-no)問題的最小數量。我們越了解某個資訊源可能會發送什麼消息,那麼看到這條消息時所獲得的資訊量就越少。

假設你知道某人将會隻回答一個是非問題,但提前無法得知回答者的答案,那麼回答者通過回答解決了你的不确定性。香農認為回答者隻給了你一位的資訊(1或0),即從兩種可能答案中選擇其中一個。當答案有兩個以上時,需要更多的位來區分發送的消息。

假設我們想在電話簿中找到含有某個朋友名字的那一頁,那麼需要多少位來對頁數進行編碼呢?一個聰明的方法回答了這個問題:我們從中間打開電話簿,然後詢問哪一半含有朋友的名字(由于使用字母順序編寫電話簿,這個問題就很容易回答)。然後我們把含有名字的那一半電話簿再分割成兩半,詢問同樣的問題。重複這個步驟,直到隻剩一頁,這個朋友的名字就應該在那一頁上。這個重複的問題(“哪一半”或者說“是否在左邊一半”)讓我們快速定位。對于一本有512頁的電話簿,第一個問題留下了256頁來搜尋,第二個問題留下128頁,然後64,32,16,8,4,2,最後是1。需要9個“哪一半”問題來尋找包含名字的那一頁。是以,當找到包含朋友名字的那一頁時,我們擷取了9位的資訊量。

在建構編碼時,人們需要思考消息的發生機率。塞缪爾·莫斯(samuel morse)發明了莫斯密碼,并将之應用于19世紀30年代他參與發明的電報中。他配置設定最短的編碼(單個點)來表示字母e,因為e是在英文中使用最頻繁的字母(大約12%)。他将最長的編碼配置設定給字母j,因為j是最少使用的字母之一(約0.15%)。這樣的配置設定減少了傳輸的平均長度。圖3.4說明了用以識别一個消息的問題可以用來定義資訊編碼,以及關于消息發生機率的先驗知識會減少編碼量。

假設我們有一長度為li、機率為pi的碼字集合。那麼編碼的平均長度就是

《偉大的計算原理》一資訊的測量

對于圖3.4中的編碼,公式計算出第一種編碼的平均長度是2位,而第二種編碼的平均長度是1.75位。

在最優編碼中,碼字的長度即最小的l是多少呢?香農在他1948年論文的附錄中回答了這個問題。他表示最優碼字的長度是以2為底的碼字出現機率的對數的相反數,即-log2pi。是以,最優編碼的平均長度是

《偉大的計算原理》一資訊的測量

這個公式和熱力學的熵公式具有同樣的形式,也有着相似的解釋。熵是衡量系統狀态的混亂程度或是不确定性的名額。一個系統的狀态越混亂,熵就越高。最大的混亂度發生在所有的狀态都有同等發生機率的情況下,最大的有序度則發生在某一種狀态非常确定而其他的狀态都絕不會發生的情況下。

香農認為熵是資訊源中固有資訊的衡量标準。一個資訊源由一組可能的消息和消息發生的機率構成。熵隻取決于消息的機率而不是它們的編碼,熵可以确定最短可能編碼的平均長度。任何更短的編碼都将導緻混淆進而無法得到唯一的解碼結果。如下面的例子:

**a:1

b:0

c:01

d:10

**

《偉大的計算原理》一資訊的測量

圖3.4 香農将一個消息中的資訊量定義為将該消息從消息源中篩選出來需要回答的是非問題數,這些問題是用來減少“哪個是被發送消息”的不确定性的。試想,如果我們要從四個人中發現被某任務選中的人,則可以使用一個簡單的決策樹(上圖),我們問:“是alice或者bob嗎?”如果答案為是,則決策選擇左邊的子樹。再問一個問題“是alice嗎?”,答案就揭曉了。每個個體的編碼就是指向他/她的是非問題答案的路徑。如果知道某個個體被選中的機率(下圖括号裡的數字),那麼我們可以構造一個等級決策樹,進而使得編碼長度不等。例如,如果alice是最有可能被選中的,我們就把編碼1配置設定給他。bob是下一個最有可能的,則配置設定編碼為01,然後是charlie和diana,他們有相同的選中機率,則都被編碼為3位

如果以上這些消息出現的機率分别是0.5、0.25、0.125和0.125,平均編碼長度就是1.25位。然而,接收方對于1001代表abba,abc,dba還是dc卻無法分辨。這條消息的熵(根據上面的公式計算得出)是h = 1.75,界定了編碼是否能夠解析的門檻值。這條編碼的平均長度是1.25位,低于此門檻值,是以編碼無法解析。

哈夫曼(huffman)編碼是一種快速在熵門檻值内進行位編碼的方法(圖3.5)。

《偉大的計算原理》一資訊的測量

圖3.5 1951年麻省理工學院的大衛·哈夫曼(david huffman)設計了一套編碼算法,在已知消息機率的情況下,此編碼算法能夠使得平均編碼長度最小。該算法首先将每個消息都視為一棵單獨的樹。然後不斷地将兩棵具有最小機率的樹進行合并,合并後樹的機率為兩棵子樹的機率和。對于一個具有n條消息的編碼,需要n次合并,形成最後的樹。在本例中,charlie和diana首先合并,然後他們合并後的樹和bob合并,最後和alice合并。樹中的每條路徑定義了每一條消息的二進制位編碼。哈夫曼的方法所生成的編碼能夠将平均編碼長度控制在熵門檻值範圍内。若所有的消息具有相等的機率,則生成圖3.3前面所示的編碼,若機率不相等,則生成後面這種編碼

從另外一個角度來看,熵的門檻值定義了信道是否可信。如果消息源每隔t秒傳送一則新消息,最短編碼的平均長度是h,那麼這個消息源就産生了每秒傳送h / t位的需求。如果信道的帶寬是h / t位每秒或者更高,那麼發送方所傳送的所有位都能夠到達接收端。若信道的帶寬小于h /t位每秒,某些位就可能丢失,接收端就無法恢複原始消息。

檔案壓縮是資訊論的一個重要應用,因為其可以減少存儲空間和縮短傳輸時間。在大部分計算機程式中都使用标準碼來表示文本,包括傳統的固定長度編碼ascii和現代的變長編碼unicode。這兩種情況下每個字母都使用了相同長度的編碼,因而,通過尋找重複模式并基于檔案上下文用更短的編碼代替這些模式,文本檔案可被大幅壓縮。例如,一個包含很多字母“e”的檔案,可以用新的更短小的編碼替換它的編碼來壓縮檔案。新的編碼取決于“e”在檔案中的出現頻率——在“e”頻繁出現的檔案中,這個編碼可能是3位,而在“e”不那麼頻繁出現的檔案中,這個編碼可能是5位。檔案壓縮算法會生成一個新編碼到原始編碼的轉換表。“.zip”和“.rar”格式就采用了這種政策。這種壓縮政策的設計也不會将資訊“壓縮”至低于熵的門檻值。因為若是低于門檻值,則無法保證完全恢複原始資訊,這種政策被稱為無損壓縮。

另一種政策是有損壓縮。有損壓縮方法具有更大的壓縮率,但無法完全恢複原始檔案。例如,mp3音頻壓縮通過丢棄絕大部分人聽不到的頻率來壓縮音頻,其壓縮率大約為10,但是沒法恢複丢棄的頻率。jpeg圖像壓縮舍棄了部分人眼基本會忽略的顔色資訊位,當然也沒法恢複這些原始的圖像位。這些壓縮方案使得dvd、線上電影和唱片等能夠以更低廉的價格賣給消費者。這些方法在感覺品質上的小小損失,對于減少檔案大小而言通常被認為是一種很好的折中。

繼續閱讀