資料壓縮與資訊熵

2021-09-13 14:16:37 字數 3375 閱讀 2735

2023年,美國喬治亞州的web technology公司,宣布做出了重大的技術突破。

該公司的datafiles/16軟體,號稱可以將任意大於64kb的檔案,壓縮為原始大小的16分之一。業界議論紛紛,如果訊息屬實,無異於壓縮技術的革命。

許多專家還沒有看到軟體,就斷言這是不可能的。因為根據壓縮原理,你不可能將任意檔案壓縮到16分之一。事實上,有一些檔案是無法壓縮的,哪怕乙個二進位制位,都壓縮不掉。

後來,事實果然如此,這款軟體從來沒有正式發布。沒過幾年,就連web technology公司都消失了。

那麼,為何不是所有的檔案都可以被壓縮?是否存在乙個壓縮極限呢,也就是說,到了一定大小,就沒法再壓縮了?

首先,回答第乙個問題:為什麼web technology公司的發明不可能是真的。

反證法可以輕易地證明這一點。假定任何檔案都可以壓縮到n個二進位制位(bit)以內,那麼最多有2n種不同的壓縮結果。也就是說,如果有2n+1個檔案,必然至少有兩個檔案會產生同樣的壓縮結果。這意味著,這兩個檔案不可能無損地還原(解壓縮)。因此,得到證明,並非所有檔案都可以壓縮到n個二進位制位以下。

很自然地,下乙個問題就是,這個n到底是多少?

要回答乙個檔案最小可以壓縮到多少,必須要知道壓縮的原理。

壓縮原理其實很簡單,就是找出那些重複出現的字串,然後用更短的符號代替,從而達到縮短字串的目的。比如,有一篇文章大量使用"中華人民共和國"這個詞語,我們用"中國"代替,就縮短了5個字元,如果用"華"代替,就縮短了6個字元。事實上,只要保證對應關係,可以用任意字元代替那些重複出現的字串。

本質上,所謂"壓縮"就是找出檔案內容的概率分布,將那些出現概率高的部分代替成更短的形式。所以,內容越是重複的檔案,就可以壓縮地越小。比如,"ababababababab"可以壓縮成"7ab"。

相應地,如果內容毫無重複,就很難壓縮。極端情況就是,遇到那些均勻分布的隨機字串,往往連乙個字元都壓縮不了。比如,任意排列的10個阿拉伯數字(5271839406),就是無法壓縮的;再比如,無理數(比如π)也很難壓縮。

壓縮就是乙個消除冗餘的過程,相當於用一種更精簡的形式,表達相同的內容。可以想象,壓縮過一次以後,檔案中的重複字串將大幅減少。好的壓縮演算法,可以將冗餘降到最低,以至於再也沒有辦法進一步壓縮。所以,壓縮已經壓縮過的檔案(遞迴壓縮),通常是沒有意義的。

知道了壓縮原理之後,就可以計算壓縮的極限了。

上一節說過,壓縮可以分解成兩個步驟。第一步是得到檔案內容的概率分布,哪些部分出現的次數多,哪些部分出現的次數少;第二步是對檔案進行編碼,用較短的符號替代那些重複出現的部分。

第一步的概率分布一般是確定的,現在就來考慮第二步,怎樣找到最短的符號作為替代符。

如果檔案內容只有兩種情況(比如扔硬幣的結果),那麼只要乙個二進位制位就夠了,1表示正面,0表示表示負面。如果檔案內容包含三種情況(比如球賽的結果),那麼最少需要兩個二進位制位。如果檔案內容包含六種情況(比如扔篩子的結果),那麼最少需要三個二進位制位。

一般來說,在均勻分布的情況下,假定乙個字元(或字串)在檔案**現的概率是p,那麼在這個位置上最多可能出現1/p種情況。需要log2(1/p)個二進位制位表示替代符號。

這個結論可以推廣到一般情況。假定檔案有n個部分組成,每個部分的內容在檔案中的出現概率分別為p1、p2、...pn。那麼,替代符號佔據的二進位制最少為下面這個式子。

log2(1/p1) + log2(1/p2) + ... + log2(1/pn)

= ∑ log2(1/pn)

這可以被看作乙個檔案的壓縮極限。

上一節的公式給出了檔案壓縮的極限。對於n相等的兩個檔案,概率p決定了這個式子的大小。p越大,表明檔案內容越有規律,壓縮後的體積就越小;p越小,表明檔案內容越隨機,壓縮後的體積就越大。

為了便於檔案之間的比較,將上式除以n,可以得到平均每個符號所占用的二進位制位。

∑ log2(1/pn) / n

= log2(1/p1)/n + log2(1/p2)/n + ... + log2(1/pn)/n

由於p是根據頻率統計得到的,因此上面的公式等價於下面的形式。

p1*log2(1/p1) + p2*log2(1/p2) + ... + pn*log2(1/pn)

= ∑ pn*log2(1/pn)

= e( log2(1/p) )

上面式子中最後的e,表示數學期望。可以理解成,每個符號所占用的二進位制位,等於概率倒數的對數的數學期望。

下面是乙個例子。假定有兩個檔案都包含1024個符號,在ascii碼的情況下,它們的長度是相等的,都是1kb。甲檔案的內容50%是a,30%b,20%是c,則平均每個符號要占用1.49個二進位制位。

0.5*log2(1/0.5) + 0.3*log2(1/0.3) + 0.2*log2(1/0.2)

= 1.49

既然每個符號要占用1.49個二進位制位,那麼壓縮1024個符號,理論上最少需要1526個二進位制位,約0.186kb,相當於壓縮掉了81%的體積。

乙檔案的內容10%是a,10%是b,......,10%是j,則平均每個符號要占用3.32個二進位制位。

0.1*log2(1/0.1)*10

= 3.32

既然每個符號要占用3.32個二進位制位,那麼壓縮1024個符號,理論上最少需要3400個二進位制位,約0.415kb,相當於壓縮掉了58%的體積。

對比上面兩個算式,可以看到檔案內容越是分散(隨機),所需要的二進位制位就越長。所以,這個值可以用來衡量檔案內容的隨機性(又稱不確定性)。這就叫做資訊熵(information entropy)。

它是2023年由美國數學家克勞德·夏農(claude shannon)在經典**《通訊的數學理論》中,首先提出的。

想要理解資訊熵這個概念,有幾點需要注意。

(1)資訊熵只反映內容的隨機性,與內容本身無關。不管是什麼樣內容的檔案,只要服從同樣的概率分布,就會計算得到同樣的資訊熵。

(2)資訊熵越大,表示占用的二進位制位越長,因此就可以表達更多的符號。所以,人們有時也說,資訊熵越大,表示資訊量越大。不過,由於第一點的原因,這種說法很容易產生誤導。較大的資訊熵,只表示可能出現的符號較多,並不意味著你可以從中得到更多的資訊。

(3)資訊熵與熱力學的熵,基本無關。這兩個熵不是同一件事,資訊熵表示無序的資訊,熱力學的熵表示無序的能量(參見我寫的《熵的社會學意義》)。

原文:

資料壓縮與資訊熵

1992年,美國喬治亞州的web technology公司,宣布做出了重大的技術突破。該公司的datafiles 16軟體,號稱可以將任意大於64kb的檔案,壓縮為原始大小的16分之一。業界議論紛紛,如果訊息屬實,無異於壓縮技術的革命。許多專家還沒有看到軟體,就斷言這是不可能的。因為根據壓縮原理,你...

資料壓縮與資訊熵

1992年,美國喬治亞州的web technology公司,宣布做出了重大的技術突破。該公司的datafiles 16軟體,號稱可以將任意大於64kb的檔案,壓縮為原始大小的16分之一。業界議論紛紛,如果訊息屬實,無異於壓縮技術的革命。許多專家還沒有看到軟體,就斷言這是不可能的。因為根據壓縮原理,你...

資訊熵與資訊熵增益

資料的資訊屬性是與任務相關的.對於分類任務,標籤值 y 包含的資訊量為 info y ln p y 其中,p y 為 y 出現的概率.p y 越小,y 包含的資訊量越大.這是符合直覺的.熵定義為資訊的期望值.乙個可以分為 m 類的資料集 s 它的資訊熵為隨機得到的乙個label包含的資訊量的期望值 ...