對資訊熵的再認識

2021-06-19 01:25:00 字數 2155 閱讀 6971

資訊熵這個概念相信對cs滴童鞋來說都不陌生,映象中在計算機網路,影象處理等課程中都各種接觸,但是以前都僅僅只記住了p*log(1/p)這個公式,以及log(1/p)代表了資訊量,然後在訊號壓縮技術中,如果訊號的熵越大,訊號的壓縮率(原訊號/壓縮訊號)越小這些大致的概念。而沒有進一步去思考公式的含義或者說資訊熵的由來。想想自己之前一切只為應付考試對知識不求甚解的心態真是令人汗顏。今天看書的時候又看到了熵這個概念,感慨熵的概念真是無處不在的同時,忍不住查了一下資料,重新認識了一下熵。

a mathematical theory of communication)

一文,將熵的概念引入資訊理論中。於是有了下面隨處可見的資訊熵公式:

p 代表了 x 的機率質量函式,

在這裡 

b是對數所使用的底,通常是 2, 自然常數 e,或是10。當

b= 2,熵的單位是bit;當

b= e,熵的單位是 nat;而當 

b= 10,熵的單位是 dit。

i(xi)表示xi這個事件本身的訊息(可以理解為xi所承載的資訊量),可以看出i(xi)=-log p(xi),即xi出現的概率的對數函式的負。其實理解熵的關鍵就是理解 i(xi), 下面先給出最出名的乙個計算i(xi) 的例子,然後再給出解釋。

例:           英語有26個字母,假如每個字母在文章中出現次數平均的話,每個字母的資訊量為:

看到這裡,我們不禁想問,為什麼每個字母所承載的資訊量跟它出現的概率有關為什麼要取對數函式,而不是其他函式?最後,為什麼需要取負

首先,思考第乙個問題,為什麼會用到概率。我們需要回過頭來看看,資訊熵引入的意義,為了描述資訊系統的混亂程度或者說該系統的確定性。那麼如何描述呢?當然,我們得清楚資訊系統中每乙個「原子」 (上例中的每乙個字母)的狀態。對於資訊系統而言,為了知道整個體系的確定性,我們需要知道其中每個元素的確定性,而這個確定性不可避免的需要用到數學中的概率統計的相關概念來描述。舉個例子,假設現在討論的資訊系統是乙個txt文件,乙個極端的情況,這個文件中文字全是「a」字母,那麼,這個系統其實就只有乙個元素--字母「a」,並且它出現的概率為1,容易看出我們討論的這個資訊系統可以說完全不混亂,是乙個相當確定的系統。根據資訊熵公式,我們可以得到該系統的熵為0並且「a」字母所承載的資訊量為0,我們可以理解成「a」這個字母在這個系統中可以說是沒有意義的,因為我們關心的是系統內容的有序性而不是系統內容的具體成分。

對於第二個問題,為什麼要用對數函式。其實在回答第二個問題的同時可以進一步回答第乙個問題。首先,我們需要注意到任意事件的概率有乙個很重要的屬性,概率取值必須介於[0,1]區間。再來看對數函式,它有乙個很好的性質,值域可以很好的放大定義域處於[0,1]上的值,將[0,1]上的值對映到[0,∞],乙個相當好的逆normalization過程。而我們知道要想知道整個系統的混雜程度,得研究每乙個個體出現的概率分布,並由個體的概率分布來分析整個系統的行為。然而,概率值分布的區間太小,也就是說值與值之間的變化太小,特徵不夠明顯。我們想要通過用每個個體的概率分布值來計算和比較不同系統之間混雜程度,最後得出的結果區分度必然不高,有些可能甚至需要精確到小數點後幾十位才能比較,最後甚至可能會導致溢位而無法比較。所以為了讓特徵明確話,我們需要對原本的概率函式進行一些處理,讓數值特之間的變化差距大一些,而對數函式則很好的可以幫助擴大區分度。這也是需要對概率取對數函式的原因。

圖:對數函式座標圖

最後,為什麼要取負。其實很容易看出,如果某乙個體發生的概率越小,說明它越有傾向雜質和雜訊的可能,越容易導致系統混亂無序。因此,小概率個體實則對系統雜亂性和不確定性貢獻越大,所以我們在處理個體概率時,不僅需要將其對映到更大的區間上以增大辨識度,還需要找個區間遞減函式來對映之。綜合以上,我們需要用遞減的對數函式來處理個體概率,而一般我們習慣取2,e,10作為對數函式基底(查對數表方便)。可以看得對數函式曲線在基底大於的時候是增函式,為了讓其變區間遞減函式需要前面加負號。

最後的最後,熵是整個系統的平均訊息量,即:

所以在熵計算公式中兩次使用到概率,乙個是用來反映個體發生概率對整個系統混雜程度的影響,另外乙個是計算系統平均值的時候引進的。

note:因為沒有真正去看香濃提出熵的那篇**,所以對於三個問題的回答純屬自己的理解,如有誤,還請大家指正。

ref: 熵(資訊理論)維基百科

對Integer的再認識

為了節省記憶體,對於下列包裝物件的兩個例項,當它們的基本值相同時,他們總是 boolean byte character,u0000 u007f 7f是十進位制的127 integer,128 127 jdk6 api valueof public static integer valueof in...

我對創業的再認識

昨天又一次湧動出創業的想法 要為程式設計師做點什麼.以前,我總是想創業需要前沿的技術,需要多少多少資源.要創就創世界上新穎的公司.要賺多少多少錢.其實不然.創業,首先是你能給社會上帶來什麼,有人真正需要嗎?也就是你的價值所在.創業,也不一定是要最前沿的技術,所謂適合的就是最好的.我這次創業的想法,就...

對C 中Readonly的再認識

很多人知道readonly 和 const 以及他們的區別和聯絡,本文只要對readonly 的乙個小特性進行記錄,屬於讀書筆記吧 請看如下 public sealed class atype 這句 很簡單 我只是對靜態唯讀欄位testchars賦初始值。這時候如果我問你我現在可以改變testcha...