6.信息論(一):信息量、熵和最優編碼

前言

信息論是由克勞德·香農發展,用來找出信號處理與通信操作的基本限制,如數據壓縮、可靠的存儲和數據傳輸等。自創立以來,已被應用多個領域,例如自然語言處理(NLP)、機器學習等領域。

定長編碼(Block Codes)

讓我們從一個例子開始。小明酷愛動物,日常談吐中經常提及各種動物,包括:狗、貓、魚和鳥。一天,小明見到小紅(原諒我這麼俗的名字),兩個人決定用二進制的方式來交流。爲了交流方便,小明和小紅決定製定一套編碼規則

編碼映射

此時,若小明要發出“狗 貓 狗 鳥”的信息,需要完成以下過程:

編碼過程

通過以上三個過程,便可以將“狗 貓 狗 鳥”轉化爲二進制了。

變長編碼(Variable Codes)

實際中,通訊往往需要付費,假設通訊按位(bit)收費。爲了省錢,小明和小紅需要尋找合適的編碼策略。在設計編碼策略中,小紅統計了小明的說話

詞分佈

此時,若按照上面的定長編碼,每個字的平均編碼長度

L(x)=2×12+2×14+2×18+2×18=2

若想進一步壓縮平均編碼長度,變長編碼是一種有效的手段。變長編碼的基本思想:出現頻率高的字符使用短編碼,出現頻率低的字符使用長編碼。(你可能會問,爲什麼不讓所有的編碼都使用短編碼?嘿嘿,都使用短編碼,還能實現一一對應嗎?)基於上述思想,小明和小紅重新指定了一套新的編碼策略:

詞分佈

此時,每個字的平均編碼長度爲

L(x)=1×12+2×14+3×18+3×18=1.75

顯然,新的策略能夠幫小明和小紅省很多錢。那麼,小明和小紅是如何設計的呢?

無損編碼(lossless compression)

爲了便於接下來的描述,以下圖爲例介紹幾個名稱

詞分佈

其中狗、貓、魚等稱爲源符號,001110 等稱爲碼字,整個映射使用C(x) 表示。

無損編碼

小明和小紅的交流中,首先要保證信息的無損性,即保證編碼後的信息能夠無損的復原。若使用定長編碼,復原信息輕而易舉便可實現,而變長編碼則不同。假如使用上圖,此時小明給出的代號爲

詞分佈

根據約定好的碼錶,小紅既可以理解成“狗 狗 鳥 狗”,也可以理解成“狗 貓 魚”。顯然,這是小明和小紅不願意看到的。通過查閱資料,小明和小紅髮現他們遇到的問題是“無損編碼”問題:

無損編碼是一類數據壓縮算法,其壓縮的數據能夠無損的復原爲原始數據。

C(x) 是無損編碼,它需要是:

  • 非奇異編碼(Non-singular code):x1x2C(x1)C(x2)

在實際中,我們往往需要一次編碼一系列字符,而不是一次編碼一個字符,因此它需要滿足:

  • 可擴展編碼(Extension of a code):C(x1,...,xn)=C(x1)...C(xn)
  • 唯一可譯解碼(Unique decodability):xnixmjC(xni)C(xmj)

儘管唯一可譯解碼已經足夠強了,但它並不能支撐“收到所有字符以後才進行解碼”的情況。例如,C(x)

x 1 2 3 4
C(x) 10 00 11 110

當收到的代號是110000 ,解碼爲322 ,而收到的代號是1100000 ,解碼爲422。顯然,當收到所有信息再解碼時,11 就表示了不同的字符。對於此種問題,前綴編碼是一種有效的解決方案,定義如下:

  • x1x2C(x1)Prefix(C(x2))

即任意符號的編碼都不是其他編碼的前綴。基於前綴編碼,C(x)

x 1 2 3 4
C(x) 0 10 110 111

在上面的介紹中,分別介紹了“非奇異編碼”、“唯一編碼”、“前綴編碼”。這些編碼方式的相互關係可以通過下圖來描述:

詞分佈

通過上面的知識,前綴編碼是解決編碼復原最好的方式,下面就需要考慮如何優化編碼長度。

最優編碼

需要注意的是,本文討論的是源符號有限且已知的編碼。更多關於最優編碼的知識,可以參考Information Processing and Learning

碼樹

在介紹最優編碼之前,首先介紹一下碼樹和Karft不等式。對於給定碼字的全體集合,可以使用碼樹來表示。對於r 進制的碼樹,如下所示,其中左圖爲二元碼樹,右邊爲三元碼樹。在碼樹中R 點是樹根,從樹根伸出樹枝,構成r 元碼樹。

詞分佈

Karft不等式

對於r 元字母表上的前綴編碼,碼字長度爲l1,l2,...,lm 必須滿足不等式

irli1

反之,若給定滿足以上不等式的一組碼字長度,則存在一個相應的前綴碼,其碼字長度就是給定長度。其中r 可以理解成一個節點最多的孩子節點的個數。

正向證明
假設l1l2...lnA 表示r 進制、深度爲ln 的碼樹。對於使用r 進製表示的lln 的任意字符,均能在碼樹A 找到對應位置,進而第i 個前綴編碼在樹A 中對應節點是vi 。假設Ai 表示以節點vi 爲根的子樹,此樹的深度爲lnli 。根據樹的性質可知,Ai 葉節點的數量爲

|Ai|=rlnli

考慮到前綴編碼的特性,子樹之間不存在葉節點交叉,即:

AiAj=,ij

因此

|i=1nAi|=|i=1nAi|=i=1nrlnlirln

其中rln 是所有也節點的數量。

反向證明
假設l1l2...ln 。從整個樹的第l1 隨機選擇一個節點,使其對應第一個字符的編碼。因爲需要構建前綴編碼,因此以該節點爲根的子樹所有節點都不再使用。這裏假設整個這棵樹的深度爲ln 。因此不再考慮的節點個數爲rlnl1 。依次類推,不再考慮的節點個數爲

i=1nrlnli

這時問題就轉化爲:不再考慮的節點個數是否比總的節點個數(rln )多。由於滿足Kraft不等式,因此可以構建前綴編碼。

至此正向、反向證明均已完成。

最優編碼

隨機變量X 的任一r 元前綴碼的期望長度

LHr(X)

當且僅當rli=pi ,等式成立。

proof:
上面的問題可以轉化爲

minliipili  subject to:irli1

上面的問題可以轉化爲不等式約束下的拉格朗日數乘法,即

L(li,λ,u)=ipili+λ(irli1u2)

根據極值滿足的條件得:

piλrlilnr=0irli1u2=02λu=0

顯然λ0 ,則u=0 。從公式一可知:

rli=piλlnr

從公式二可知:

irli=1=ipiλlnr=1λlnr

λ=1lnr 。進而li=logr1pi 。此時最優編碼的長度便是熵!

經過上面的證明可知,小明只需要用前綴編碼,且碼長滿足logr1pi 便可獲得最優的編碼長度。

總結

通過上面的討論,我們找到了小明和小紅信息交流的理論依據。在後面的博客中,我會帶來更多知識!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章