數據的壓縮編碼

\(\newcommand{\E}{\mathbb{E}}\)\(\newcommand{\X}{\mathcal{X}}\)現在我們要開始討論熵的意義,爲此我們依然要回到數據的壓縮編碼這一核心概念上。

首先我們要嚴格地定義編碼。在這裏,我們默認是用二進制進行編碼。事實上,我們將要證明的所有結論對於一般的\(\mathcal{D}\)進制而言都是成立的。在信息論中對數的底數並不重要,我們的結論並不是依賴於底數的。我們定義對隨機變量\(X\)的編碼就是\(\X\to \{0,1\}^*\)的映射\(C\)\(X\)的每個取值對應着一個有限01串。進一步,如果\(C\)是一個單射,也即如果任意不同的取值對應不同的01串,我們就稱\(C\)是一個nonsingular(非奇異的)的編碼方式。對於nonsingular的編碼方式,只需要在相鄰字符間加上逗號或其它分隔符,就能夠通過編碼後的串唯一解碼出原始的字符串。但在實際應用中,使用分隔符並不是一種高效的做法。如果我們能夠保證所有編碼後的字符不存在其中一個串是另一個串的前綴的情況,那麼我們無需分隔符就可以唯一的解碼。我們稱這樣的編碼方式爲前綴碼(Prefix Code)或即時碼(Instantaneous Code),這樣的編碼方式是自帶標點(Self-punctuating)的。

Kraft Inequality

當我們要求編碼方式必須是前綴碼時,我們就不能總是採用最短的可用字符串了。例如如果同時採用\(0\)\(1\)作爲編碼,那就不可能使用任何其它串了。也就是說,對於\(|\X|=n\),如果把需要編碼的字符編碼後的長度排成一列\(\ell_1,\ell_2,\cdots,\ell_n\),這些長度肯定要滿足某些約束。例如當\(|\X|=3\)時,\(\{1,1,2\}\)肯定不是一個可行的前綴碼編碼方式,而\(\{1,2,2\}\)的確是可行的。

思考編碼問題的一個最常見方法就是把編碼放到前綴樹上去思考。在這裏,前綴樹是一棵二叉樹。記\(\ell_{\max}\)是編碼最長的字符,那麼這一定是一棵深度不超過\(\ell_\max\)的樹。對於前綴樹而言,只有葉節點能夠作爲編碼的終點。前綴樹可以看作去除了某些子樹後的滿二叉樹。一棵深度爲\(\ell_\max\)的滿二叉樹,那麼第\(k\)層恰好有\(2^k\)個節點,在第\(\ell_\max\)層有\(2^{\ell_\max}\)個節點。對於長度爲\(\ell_i\)的編碼,由於它一定沒有後代,所以相較於滿二叉樹在第\(\ell_\max\)層會損失共\(2^{\ell_{\max}-\ell_i}\)個節點。而每個\(\ell_i\)的後代都是互不重疊的,因此在最後一層上總的損失節點數就是\(\sum\limits_{i=1}^{n}2^{\ell_\max-\ell_i}\),它一定不超過\(2^{\ell_\max}\)。這樣我們就得到了不等式\(\sum\limits_{i=1}^{n}2^{-\ell_i}\leq 1\)。這稱爲Kraft Inequality。

而一旦我們得到了一個滿足Kraft Inequality的序列\(\ell_1,\cdots,\ell_n\),那麼我們可以直接在01前綴樹上構造出一個合法的前綴編碼。把\(\ell_1,\cdots,\ell_n\)從小到大排序,從滿二叉樹出發,依次找到字典序最小的深度爲\(\ell_i\)的節點,移除它的後代,不斷重複如上操作即可。

另一種理解Kraft Inequality的方法是二進制小數。假設第\(i\)個二進制編碼記爲\(y_1y_2\cdots y_{\ell_i}\),我們可以把它與二進制小數\(0.y_1y_2\cdots y_{\ell_i}\)對應。由於不存在與它有相同前綴的編碼,我們可以視爲這個小數獨佔了區間\([0.y_1y_2\cdots y_{\ell_i},0.y_1y_2\cdots y_{\ell_i}+2^{-\ell_i})\)。這恰好是一個長度爲\(2^{-\ell_i}\)的區間。由於所有編碼對應的區間互不重疊,一定有\(\sum\limits_{i=1}^{n}2^{\ell_i}\leq 1\)。這樣我們就再一次得到了Kraft Inequality。而在這種證明中,即便編碼數量是無窮(但是可數)的,這個不等式依然成立。因此,我們得到了更廣義的在可數意義下的Kraft Inequality。

最優編碼問題

在編碼時,我們不僅要保證解碼不能有歧義,還要使得編碼的長度儘可能短。這裏的長度指的是在統計詞頻後期望意義下的最短。例如在英文中e出現的概率最高,我們就希望e被編碼得儘量短;q出現的概率低,我們就可以讓q有相對較長的編碼。設字母表的概率分佈函數爲\(p\),第\(i\)個字符的出現概率爲\(p_i\),被編碼長度爲\(\ell_i\)。則我們要選取合適的\(\ell_i\)的分佈,最小化\(L=\sum\limits_{i=1}^{n}p_i\ell_i\)

由於\(\ell_i\)的分佈必須滿足Kraft Inequality,而一旦滿足了Kraft Inequality就是一個可行的編碼。因此這其實就是一個不等式約束下的凸優化問題:在約束\(\sum\limits_{i=1}^{n}2^{-\ell_i}\leq 1\)下最小化\(L=\sum\limits_{i=1}^{n}p_i\ell_i\)。對於這個問題,可以根據KKT條件直接求解。但方便起見我們先用Lagrange條件在等式取緊\(\sum\limits_{i=1}^{n}2^{-\ell_i}=1\)時求出\(L\)的最小值,再證明任何編碼都不可能比這個最小值更小。

根據Lagrange乘數法,\(L(\ell,\lambda)=\sum\limits_{i=1}^{n}p_i\ell_i+\lambda\left(\sum\limits_{i=1}^{n}2^{-\ell_i}-1\right)\)。於是\(\dfrac{\part L}{\part \ell_i}=p_i-\lambda\cdot 2^{-\ell_i}\ln 2=0\)。因此\(2^{-\ell_i}=\dfrac{p_i}{\lambda\ln 2}\)是個定值。代入\(\sum\limits_{i=1}^{n}2^{-\ell_i}=1\),得到\(\dfrac{\sum p_i}{\lambda \ln 2}=1\),也即\(\lambda = \dfrac{1}{\ln 2}\)。由此解得\(2^{-\ell_i}=p_i\),也就是說第\(i\)個字符應當被編碼成長度爲\(\ell_i=\log_2 \dfrac{1}{p_i}\)的串。這恰好是熵的定義中出現的項。如果我們重新寫出期望的編碼長度的式子,恰好得到\(L=\sum\limits_{i=1}^{n}p_i\log_2\dfrac{1}{p_i}\)。這就是\(H(X)\)的定義!我們還要進一步驗證任何編碼方式得到的\(L\)都不可能比\(H(X)\)更小。\(L-H(X)=\sum\limits_{i=1}^{n}p_i\ell_i+\sum\limits_{i=1}^{n}p_i\log p_i\)\(=\sum\limits_{i=1}^{n}p_i\log( p_i 2^{\ell_i})\)。記\(c=\sum\limits_{j=1}^{n}2^{-\ell_i}\)\(r_i=\dfrac{2^{-\ell_i}}{c}\),則\(r_i\)構成了某個概率分佈\(q\)\(L-H(X)=\sum\limits_{i=1}^{n}p_i\log \left(\dfrac{p_i}{2^{-\ell_i}}\cdot \dfrac{c}{c}\right)=\sum\limits_{i=1}^{n}p_i\log \left(\dfrac{p_i}{2^{-\ell_i}/c}\cdot \dfrac{1}{c}\right)\)\(=\sum\limits_{i=1}^{n}p_i\log\dfrac{p_i}{r_i}-\log c\)\(=D(p||r)-\log c\)。根據Kraft Inequality,\(c\leq 1\),因此\(-\log c\geq 0\)。而根據信息不等式,相對熵\(D(p||r)\geq 0\)也成立。綜上,\(L\geq H(X)\)始終成立。

所以我們看到,熵的含義就是最優編碼的期望編碼長度。當然,\(\ell_i=-\log p_i\)不一定是整數。這個等號只有在\(X\)的所有分佈密度都是\(2\)的冪次時才能取到。一個自然的問題時,既然對於一般的分佈等號總是無法取到,我們能否給出一個\(L\)的上界?(在AEP一節中我們已經給出\(H(X)+\epsilon\)作爲上界,但當時並沒有要求編成前綴碼)下面我們證明,只需向上取整取\(\ell_i=\left\lceil-\log p_i\right\rceil\)就能得到上界\(L\leq H(X)+1\)。根據\(-\log p_i \leq \ell_i \leq -\log p_i+1\),兩邊同時乘以\(p_i\)得到\(-p_i\log p_i\leq p_i\ell_i\leq -\log p_i+p_i\)。累加得到\(\sum\limits_{i=1}^{n}-p_i\log p_i=\)\(H(X)\leq\)\(\sum\limits_{i=1}^{n}p_i\ell_i=L\)\(\leq \sum\limits_{i=1}^{n}-p_i\log p_i+\sum\limits_{i=1}^{n}p_i\)\(=H(X)+1\)

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