信息論研究目標: 用最少的編碼表示傳遞信息.
舉一個例子來感性認識一下:機器學習
假設兩地互相通訊,兩地之間一直在傳遞A,B,C,D四類消息,那應該要選擇什麼樣的編碼方式才能儘量少的使用資源呢?
等長編碼
若是這四類消息的出現是等機率的,都爲$\frac{1}{4}$,那麼確定應該採用等編碼方式,也就是ide
信息 | A | B | C | D |
---|---|---|---|---|
編碼 | 00 | 01 | 10 | 11 |
這樣就能達到最優的編碼方式,平均編碼長度爲$2\times\frac{1}{4}\times4=2$函數
可是,若是四類消息出現的機率不一樣呢?例如, A消息出現的機率是$\frac{1}{2}$,B是$\frac{1}{4}$,C是$\frac{1}{8}$,D是$\frac{1}{8}$,那應該怎樣編碼呢?學習
不等長編碼優化
直覺告訴咱們,爲了使平均編碼長度儘量小,出現機率高的A消息應該使用短編碼,出現機率低的C,D消息應該使用長編碼。與等長編碼相比,這樣的編碼方式叫作變長編碼,它的效果更好. 這其實是哈夫曼編碼.編碼
哈夫曼編碼的原則:spa
哈夫曼編碼過程舉例: orm
從右往左, 以此給ABCD反向編碼以下:blog
信息 | A | B | C | D |
---|---|---|---|---|
編碼 | 0 | 10 | 110 | 111 |
機率 | $1/2$ | $1/4$ | $1/8$ | $1/8$ |
平均編碼長度爲$1\times\frac{1}{2}+2\times\frac{1}{4}+3\times\frac{1}{8}+3\times\frac{1}{8}=1.75$,顯然要優於等長編碼, 這也是最優編碼.事件
在對消息進行變長編碼時,能夠看到對A消息編碼後,後面的三類消息編碼都不是以0開頭。這是由於在編碼時必須保證該編碼是惟一可解碼的。例如若A消息編碼爲0,B消息編碼爲01,那麼0101的編碼就會產生歧義,即不知道在何位置對接收到的編碼消息進行劃分。所以在進行變長編碼時,就必須保證任何編碼都不是其餘編碼的前綴。符合這種特性的編碼稱爲前綴碼(Prefix Codes)。
從上面的敘述能夠看出,每當在某位置選取一個編碼之後,咱們都要損耗一部分編碼空間,如圖
當咱們在第2個bit選擇了編碼1,那爲了知足前綴碼的特性,就會致使有$\frac{1}{4}$的編碼空間不能繼續使用了。事實上,長度爲L的編碼會使得$\frac{1}{2^L}$的編碼空間不能繼續使用。
所以,爲了達到對信息進行最優編碼的目標,咱們要在使用盡量短的編碼與短編碼可能會致使編碼空間不可用的兩種狀況中進行權衡。
咱們能夠把使用短編碼須要消耗的編碼空間稱爲編碼代價。事實上,爲了達到理論上的最優編碼,咱們只須要根據不一樣消息X出現的機率P(X)給每類消息分配相應的編碼代價便可以達到最優編碼,假設X的編碼長度爲L(X),那麼
$$ \begin{align*} &\frac{1}{2^{L(X)}} =P(X)\\ &L(X) = log_2{\frac{1}{P(X)}}\\ \end{align*} $$
這樣,對於p分佈,咱們的平均編碼長度就是:
$$ H(p)=\sum_{x}p(x)log_2(\frac{1}{p(x)}) $$
在信息論中,H(p)被稱爲熵,熵表明了理論上對符合p分佈的消息進行編碼的最優編碼的平均長度。
若如今還有一種消息序列的機率分佈知足q分佈,可是它仍然使用p分佈的最優編碼方式,那麼它的平均編碼長度即爲
$$ H(q||p)=H_p(q)=\sum_{x}q(x)log_2(\frac{1}{p(x)})$$
其中$H_p(q)$被稱爲q分佈相對於p分佈的交叉熵(Cross Entropy),它衡量了q分佈使用p分佈的最優編碼方式時的平均編碼長度。
交叉熵不是對稱的,即$H_p(q)\neq H_q(p)$。交叉熵的意義在於它給咱們提供了一種衡量兩個分佈的不一樣程度的方式。兩個分佈p和q的差別越大,交叉熵$H_p(q)$就比$H(p)$大的越多,如圖
它們的不一樣的大小爲$D_p(q)$,這在信息論中被稱爲KL散度(Kullback-Leibler Divergence),它知足
$$D_p(q)=H_p(q)-H(q)$$
KL散度能夠看做爲兩個分佈之間的距離,也能夠說是能夠衡量兩個分佈的不一樣程度。
和單變量相同,若是有兩個變量X,Y,咱們能夠計算它們的聯合熵(Joint Entropy)
$$H(X,Y)=\sum_{x,y}p(x,y)log_2(\frac{1}{p(x,y)})$$
當咱們事先已經知道Y的分佈,咱們能夠計算條件熵(Conditional Entropy)
$$ H(X|Y)=\sum_{y}p(y)\sum_{x}p(x|y)log_2(\frac{1}{p(x|y)})=\sum_{x,y}p(x,y)log_2(\frac{1}{p(x|y)}) $$
X與Y變量之間可能共享某些信息,咱們能夠把信息熵想象成一個信息條,以下圖
從中能夠看出,單變量的信息熵H(X)(或H(Y))通常比多變量信息熵H(X,Y)要小。若是把條件熵也放進來,那麼能夠從信息條更清晰的看出它們之間的關係
能夠看出
$$H(X,Y)=H(X)+H(Y|X)=H(Y)+H(X|Y)$$
更細一點,咱們把H(X)與H(Y)重疊的部分定義爲X與Y的互信息(Mutual Entropy),記做$I(X,Y)$,則
$$I(X,Y)=H(X)+H(Y)-H(X,Y)$$
互信息表明了X中包含的有關於Y的信息(或相反)。
將X與Y不重疊的信息定義爲差別信息(Variation of Information),記爲$V(X,Y)$,則
$$V(X,Y)=H(X,Y)-I(X,Y)$$
差別信息能夠衡量變量X與Y的差距,若V(X,Y)爲0,就意味着只要知道一個變量,就知道另外一個變量的全部信息。隨着V(X,Y)的增大,也就意味着X與Y更不相關。形象化的表示能夠從下圖看出
自信息(self-information)
信息量公式: $$ I(x) = -log(P(x)) $$
自信息量處理單個輸出,香農熵對整個機率分佈中的不肯定性總量進行量化。
香農熵公式:
$$ H(x) = E_{x \sim P}[I(x)] = -E_{x \sim P}[logP(x)] $$
對於同一個隨機變量x,有兩個單獨的機率分佈P(x)和 Q(x),使用KL散度來描述這兩個分佈的差別。由於KL散度是非負的,若是KL散度爲0.表示P和Q在離散變量上相同分佈,或者連續變量上幾乎到處相同。
KL散度公式:
$$ D_{KL} = E_{x \sim P}[log\frac{P(x)}{Q(x)}] = E_{x \sim P}[logP(x) - logQ(x)] $$
用於度量兩個機率分佈間的差別性信息
交叉熵公式:
$$ H(P,Q) = -E_{x \sim P}logQ(x) $$
$$ H(P,Q) = H(P) + D_{KL})(P\parallel Q) $$
信息論中有不少理論能夠應用在機器學習中,其中交叉熵和KL散度在各種模型中出現的頻率很是高。
在分類任務中,咱們想要的結果是使預測的分佈和真實的分佈儘可能接近,交叉熵提供了一種很是好的衡量方式,在LR分類,SVM多分類等問題中常常用到,將交叉熵定義爲損失函數
$$L=H_p(q)=\sum_xp(x)log(\frac{1}{q(x)})$$
其中$p(x)$表明真實分佈,$q(x)$表明預測分佈,優化目標爲$min_{q(x)}L$。
在機率推斷中,常用變分推斷來近似隱變量Z真實的後驗分佈P(Z|X)。利用以下公式
$$lnP(X)=L(q)+KL(q||p)$$
其中
$$ L(q)=\int q(Z)ln\{\frac{p(X,Z)}{q(Z)}\}dZ KL(q||p)=-\int q(Z)ln\{\frac{p(Z|X)}{q(Z)}\}dZ $$
上式中的$L(q)$稱爲證據下界(Evidence Lower Bound)。
這裏KL散度$KL(q||p)$描述了估計分佈$q(Z)$與真實分佈$P(Z|X)$的差異,當$KL(q||p)=0$時兩分佈就是相同的。咱們知道$KL(q||p)\geq0$,但由於咱們不知道真實的後驗分佈$P(Z|X)$是什麼,所以沒法直接最小化$KL(q||p)$,可是咱們能夠經過最大化$L(q)$來達到這個目的。而在求解最大化$L(q)$的過程當中,能夠利用平均場方法(Mean Field)將最終目標能夠轉化成最小化另外的一個KL散度.