信息论基本概念
文章導讀:
熵
聯合熵和條件熵
互信息
相對熵
交叉熵
困惑度
模擬信道模型
最近在看《統計自然語言處理》,覺得第二章預備知識里的關于信息論的一些基本概念總結得很不錯。雖然對于熵這個詞,我接觸過很多次,在機器學習里的很多地方也都有涉及到,比如說最大熵模型,決策樹訓練時的互信息等等。但是有的時候我還是會經常搞混淆,這里簡單介紹一下常用的概念。
一. 熵
對于離散變量(X), 假設其取值空間為(R),其概率分布為(p(x) = P(X = x), x in R),那么定義隨機變量(X)的熵為:
[H(X) = - sum_{x in R} p(x)log_x (p(x))
]
約定(0log(0) = 0)。由于這里使用了2為底,所以該公式定義的熵的單位為二進制單位(比特),實際情況也有使用其它底數的版本的熵。
熵又被成為自信息(self-information),可以將其描述為一個隨機變量不穩定的程度。通過簡單的數學計算可以證明當隨機變量(X)在其取值空間上對所有值等概率的情況下,熵達到最大值,也就是說隨機變量隨機性越強,它的熵越大。如果在某一個值上取值概率為1,也就是說這個隨機變量其實并不隨機,是一個定值,這個時候的熵達到最小值0,它毫無隨機性。
熵還可以表示信源(X)每發出一個符號所提供的平均信息量。熵越大,越難猜測變量正確的值,因此給予的信息就越多。
二. 聯合熵和條件熵
有了單變量的情況,很自然就想到多變量下聯合概率和條件概率的情況。
對于一堆隨機變量(X, Y),其聯合概率為(p(x, y)),則其聯合熵為:
[H(X, Y) = - sum_{xin X} sum_{y in Y} log_2(p(x, y))
]
聯合熵實際熵就是描述一對隨機變量平均所需要的信息量。
條件熵就是給定條件概率(p(Y|X))的情況下:
[H(Y|X) = sum_{xin X} p(x)H(Y|X = x) = sum_{x in X}sum_{yin Y}p(x)p(y|x)log(p(y|x) = sum_{xin X}sum_{y in Y}p(x)frac{p(x,y)}{p(x)}log(frac{p(x,y)}{p(x)}) = sum_{xin X}sum_{y in Y}p(x,y)log(p(x,y) - p(x,y)logp(x) = sum_{xin X}sum_{y in Y}p(x, y)log(p(x,y) - sum_{xin X}p(x)log(p(x)) = H(X, Y) - H(X)
]
這個式子也被稱為熵的連鎖規則,推廣到一般情況有:
[H(X_1, X_2, ..., X_n) = H(X_1) + H(X_2|X_1) + H(X_3|X_2, X_2) + ... + H(X_n|X_{n-1}, X_{n-2},...,X_1)
]
條件熵可以看作是在受變量(X)影響的情況下,變量(Y)的不穩定程度。
對于來自于同一個分布(X)的一個隨機變量序列((X_1, X_2, ..., X_n)),用(X_{1n})表示。當我們求這個序列的熵的時候,我們可以將其表示為(n)個同樣的隨機分布(X)的聯合熵,為(-sum_{x_{1n}} p(x_{1n})log(p(x_{1n})))。
于是,對于一條長度為n的信息,每一個字符或字的熵為:
[H_{rate} = frac{1}{n}H(X_{1n}) = -frac{1}{n}sum_{x_{1n}} p(x_{1n})log(p(x_{1n}))
]
這個數值被稱為熵率。
對于語言模型來說,如果假定一種語言是由一系列符號組成的隨機過程(L=(X_i)),例如,某報紙的一批預料,那么,可以定義這種語言L的熵率作為其隨機過程的熵率:
[H_{rate} = lim_{n ightarrow infty}frac{1}{n}H(X_{1n})
]
三. 互信息
根據上面的鏈式法則得到:
[H(X, Y) = H(X) + H(Y|X) = H(Y) + H(X|Y)
]
于是有: $$H(X) - H(X|Y) = H(Y) - H(Y|X)$$
這個差值被稱為變量(X)和(Y)之間的互信息,計作(I(X; Y))。它反映了在知道了(Y)的值以后,(X)的不確定性的減少量,同時也是在知道了(X)的值以后,(Y)的不確定性的減少量。可以理解為(Y)的值透露了多少關于(X)的信息量。
將其展開:
[I(X;Y) = H(X)-H(X|Y) = H(X) + H(Y) - H(X, Y) = -sum_x p(x)log(p(x)) - sum_y p(y)log(p(y)) + sum_{x, y} p(x, y)log(p(x, y)) = sum_{x, y}p(x,y)logfrac{p(x, y)}{p(x)p(y)}
]
從這個式子可以看出(I(X;X) = H(X) - H(X|X) = H(X)),這也就是把熵稱為自信息的原因。另一方面可以看出,如果(I(X;Y)>>0),則表明(X)和(Y)是高度相關的。如果(I(X;Y) = 0),即(p(x,y)=p(x)p(y))則說明兩者完全獨立。如果(I(X;Y)<<0),則表明(Y)的出現不但未使(X)的不確定性降低,反而加大了其不確定性,這通常是不利的。
同樣可以推導條件互信息。
條件互信息:
[I(X;Y|Z) = I((X;Y | Z)) = H(X|Z) - H(X|Y,Z) = H(X) - I(X;Z) - (H(X) - I(X;Y,Z)) = I(X;Y,Z) - I(X;Z)
]
四. 相對熵
相對熵又被稱為KL距離,是衡量相同事件空間里兩個概率分布相對差距的測度。兩個概率分布(p(x))和(q(x))的相對熵定義為:
[D(p||q) = sum_{xin X}p(x)logfrac{p(x)}{q(x)} = E_p(logfrac{p(x)}{q(x)})
]
顯然,當兩個隨機分布完全相同,即(p=q)時,相對熵為0,當其差別增加時,其相對熵的期望值也增大。
之前證明了$$I(X;Y) = sum_{x, y}p(x,y)logfrac{p(x, y)}{p(x)p(y)} = D(p(x,y)||p(x)p(y))$$
于是知道互信息就是衡量一個聯合分布與獨立性差距多大的測度。
五. 交叉熵
根據前面的定義,知道熵就是一個不確定性的測度。對于某件事情,我們知道的越多,熵就越小,因而我們對于試驗的結果就越不感到意外。交叉熵的概念就是用來衡量估計模型與真是概率分布之間差異情況的。
如果一個隨機變量(Xsim p(x)),(q)是我們計算得到的模型,(q(x))是模型(q)對于真實分布(p(x))的近似表示。那么隨機變量(X)和模型(q)之間的交叉熵定義為:
[H(X, q) = H(X) + D(p || q) = -sum_{xin X} p(x)log(p(x)) + sum_{xin X} p(x)logfrac{p(x)}{q(x)} = -sum_{xin X}p(x)log(q(x)) = E_p(logfrac{1}{q(x)})
]
這里聯想到之前在介紹神經元交叉熵損失的時候給出了這樣一個定義(yln(a) + (1-y)ln(a)),可以知道這里的(y)并不是對應說真實的標簽,而是對于該神經元的兩種狀態0或1,當其真實值為1時,即(p(x = 1) = 1),損失為(log(q(x=1)),當其真實值為0時,即(p(x=0) = 1),損失就是(log(1-q(x=1) = log(q(x=0))),和我們這里交叉熵的定義完全符合。
注意到這里交叉熵寫作(H(X, q)),這似乎就是聯合熵的形式,這樣表示不會引起誤會嗎?事實上,交叉熵可以看作是一種特殊場景下的聯合熵,它是衡量一個變量(X),和我們對其的近似表示(q(x))的聯合熵。如何這個近似非常完美,即(q(x))就是(X)的真實分布(p(x)),那么(D(p||q) = 0, H(X, q) = H(X, X)),就是自身的聯合熵了。
接著我們定義一個語言(L = (X) sim p(x))與我們構建的語言模型(q)的交叉熵為:
[H(L, q) = -lim_{nightarrow infty}frac{1}{n} sum_{x^n_1} p(x^n_1)log(q(x^n_1))
]
其中,(x^n_1 = x_1, x_2, .. ,x_n)為語言(L)的詞序列樣本,這里的詞包括樣本中出現的任意詞匯、數字、標點等。我們假設這種語言是“理想”的,于是有n趨于無窮大時,有全部“詞匯”的概率和為1,根據信息論的定理,假定語言L是穩態遍歷的隨機過程,就可以得到:
[H(L, q) = -lim_{nightarrow infty}frac{1}{n} log(q(x^n_1))
]
就是說可以用樣本的熵表示整個語言的熵。
在實際情況下,當我們選擇的樣本量n足夠大的時候,可以將上式子近似表示為(-frac{1}{N}log(q(x^N_1)),交叉熵越小,表示我們的模型越接近真實的語言模型,效果越好。
六. 困惑度
在設計語言模型的時候,我們通常并不使用交叉熵而是使用困惑度(perplexity)來表示。給定語言L的樣本(l^n_1 = l_1...l_n),L的困惑度PP_q為:
[pp_q = 2^{H(L,q)} approx 2^{-frac{1}{n}log(q(l^n_1)} = [q(l^n_1)]^{-frac{1}{n}}
]
于是語言模型設計的任務就是尋找困惑度最小的模型,使其最接近真實語言的情況。
從perplexity的計算式可以看出來,它是對于樣本句子出現的概率,在句子長度上Normalize一下的結果。它越小,說明出現概率越大,所得模型就越好。
七. 模擬信道模型
在學通信原理的時候學習過信道的概念,一個信號經過一個信道,會由于壓縮編碼,噪聲引入,然后在解碼的時候就會多少有一點失真。
在自然語言處理中,很多問題也都可以歸結為這樣的模型。給定輸出(O)(可能含有誤傳信息)的情況下,如何從所有可能的輸入(I)中選出最可能的那個:
[hat{I} = argmax_I (p(I|O)) = argmax_I (frac{P(I)p(O|I)}{p(O)}) = argmax_I (p(I)p(O|I))
]
其中(p(I))成為語言模型,是指在輸入語言中“詞”序列的概率分布;另一個(p(O|I))成為信道概率。
對應到實際的NLP問題,比如說機器翻譯在進行漢譯英的時候,漢語句子看作是信道輸出O,求出最可能的信道輸入英語句子I。
噪聲信道模型在NLP中有非常多的用途,除了機器翻譯以外,還用于詞性標注、語音識別、文字識別等很多問題的研究。
總結
- 上一篇: JDK,JRE,JVM,JIT
- 下一篇: Spring中的ModelAndView