1. 程式人生 > >機器學習與資訊理論之熵

機器學習與資訊理論之熵

在機器學習中,我們經常提到熵的概念。例如我們經常使用交叉熵衡量目標(target)與預測值(real)之間的差距,使用KL散度(也稱作相對熵)衡量兩個概率分佈之間的距離。交叉熵和相對熵這些概念其實都來自於資訊理論,並且自我認為機器學習本身也是對樣本資訊的學習,另外最近在研究GAN模型和VAE模型(也就是我們常說的生成模型)時,經常會使用到,所以有必要將其單獨拿出來作為我學習的一個記錄。

要了解交叉熵和相對熵,必須從資訊理論裡面的簡單的知識開始。

1、資訊(information)

這個是熵和資訊增益的基礎概念,我覺得對於這個概念的理解更應該把他認為是一用名稱,就比如‘雞‘(加引號意思是說這個是名稱)是用來修飾雞(沒加引號是說存在的動物即雞),‘狗’是用來修飾狗的,但是假如在雞還未被命名為'雞'的時候,雞被命名為‘狗’,狗未被命名為‘狗’的時候,狗被命名為'雞',那麼現在我們看到狗就會稱其為‘雞’,見到雞的話會稱其為‘狗’,同理,資訊應該是對一個抽象事物的命名,無論用不用‘資訊’來命名這種抽象事物,或者用其他名稱來命名這種抽象事物,這種抽象事物是客觀存在的。

2、資訊量

首先考慮一個離散的隨機變數x,當我們觀察到這個變數的一個具體值的時候,我們接收到多少資訊呢? 
我們暫時把資訊看做在學習x的值時候的”驚訝程度”(這樣非常便於理解且有意義).當我們知道一件必然會發生的事情發生了,比如往下掉的蘋果.我們並不驚訝,因為反正這件事情會發生,因此可以認為我們沒有接收到資訊.但是要是一件平時覺得不可能發生的事情發生了,那麼我們接收到的資訊要大得多.因此,我們對於資訊內容的度量就將依賴於其發生的可能性也即概率分佈p(x). 
假設X是一個離散型隨機變數,其取值集合為\chi,概率分佈函式p(x)=Pr(X=x),x\in \chi,則定義事件X=x_{0}的資訊量為:

I(x_{0})=-log_{2}(p(x_{0}))

我們把這個公式叫做資訊量的公式,前面的負號確保了資訊一定是正數或者是0.(低概率事件帶來高的資訊量). 

說明:上面是以2為對數的底,實際上,這個底是能夠是其他的數字的.常用的是2和e這兩個底.底是2的時候,單位為bit..底是e的時候,單位為nat.

有時候也將其成為自資訊(self-information)。可以推廣一下。 

聯合自資訊:

I(x_{i},y_{i})=-log_{2}(p(x_{i},y_{i}))

條件自資訊:

I(y_{i}|x_{i})=-log_{2}(p(y_{i}|x_{i}))

通俗一點來說的話,就是概率論中很簡單的推廣就行了。有概率基礎的話,這個很容易理解。這裡因為實際上面使用二維的更多一點就以二維為例子,推廣到多維的話也是可以的。

3、資訊熵

熵(entropy):上面的I(x)是指在某個概率分佈之下,某個事件的概率值對應的資訊量的公式.那麼我們知道每個事件對應的概率值也知道每個事件發生的可能性(即概率),也就知道整個概率分佈對應的資訊量的平均值.這個平均值就叫做隨機變數x的熵。

通常,我們使用熵來衡量所有資訊量的期望,即:

H(x)=E_{x\sim p}[I(x)]=E_{x\sim p}[logp(x)]=-\sum_{x}p(x)log(p(x))=-\int p(x)log(p(x))dx

這個公式的意思就是,隨機變數x是服從p這個分佈的,也就是在在p分佈下面的平均自資訊。也就得到了資訊熵。資訊熵的本質可以看做是某個分佈的自資訊的期望。

注意: 
1.熵只依賴於X的分佈,與X的取值無關,因此服從某個分佈的X的熵也可以等價於這個分佈的熵. 
2.定義0log0=0(因為可能出現某個取值概率為0的情況) 
3.熵越大,隨機變數的不確定性就越大(因為之前說了,越是不確定,資訊量就越大,要是平均資訊量很大,那麼也可以代表這個變數的不確定性越大)

舉一個特殊的例子,比如投擲硬幣只有兩種可能,字朝上或花朝上。買彩票只有兩種可能,中獎或不中獎。我們稱之為0-1分佈問題(二項分佈的特例),對於這類問題,熵的計算方法可以簡化為如下算式: 

H(X)=-\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))=-p(x)log(p(x))-(1-p(x))log(1-p(x))

仿照之前的資訊量的公式,可以推廣一下。 
假設一個概率分佈有兩個隨機變數決定。其中x有n種取值,y有m種取值。那麼可以得到一個n×m的聯合概率分佈的表。那麼有: 
複合熵(聯合熵): 

H(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})log(p(x_{i},y_{j}))

同樣,複合熵的公式還可以推廣到連續變數和多個變數的情況。這裡就不寫了。

條件熵(離散情況)

H(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(y_{j})p(x_{i}|y_{j})log(p(x_{i}|y_{j}))

條件熵(連續情況)

H(x,y)=-\int \int p(y)p(x|y)log(p(x|y))dxdy

上面這個公式可能有點難以理解,不知道這個公式是怎麼來的。舉一個例子來說明一下: 
如果以x表示學生體重,以y表示身高,以p(x|y)表示身高為某個特定的y_{0}時的體重為x的概率,把熵公式用到這個特殊情況得到是熵顯然應當是:

H(x,y)=-\sum_{i=1}^{n}\p(x_{i}|y_{0})log(p(x_{i}|y_{0}))

上面得到的計算公式是針對y為一個特殊值y_{0}時求得的熵。考慮到y會出現各種可能值,如果問已知學生身高時(不特指某一身高,而是泛指身高已經知道)的體重的熵(不確定程度),它應當是把前面的公式依各種y的出現概率做加權平均,那麼就可以得到上面的條件熵的公式。

4、常見變形總結

進過上面的之後,應該對於資訊量和資訊熵的幾個公式有了瞭解。然後那幾個公式還可以變形為一些常用的公式。

複習一下概率論中的條件分佈的乘法公式:

p(A|B)=\frac{p(AB)}{p(B)}

 p(AB)=p(B)p(A|B)

然後把之前條件熵式子使用上面這個公式改寫一下,可以寫為: 

H(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})log\frac{p(x_{i},y_{j})}{p(y_{j})}

H(x,y)=-\int \int p(x,y)log\frac{p(x,y)}{p(y)}dxdy

當熵和條件熵中的概率由資料估計(特別是極大似然估計)得到的時候,所對應的熵與條件熵分別稱為經驗熵(empirical entropy)經驗條件熵(empirical conditional entropy)

上面的式子表明,只要你能夠得到聯合分佈和y的分佈就能夠求出條件熵了。事實上,還能夠更加簡化成為常見的形式: 
這裡利用上面的公式(以離散型為例子)直接推導,有:

H(x|y)=H(x,y)-H(y)

這個公式是不是簡潔很多很多。只要知道聯合資訊熵和其中一個分量的資訊熵,就能夠求出條件資訊熵來。 

證明:

H(x|y)\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})log\frac{p(x_{i},y_{j})}{p(y_{j})}\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})\left ( logp(x_{i},y_{j})-logp(y_{j})\right )\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})logp(x_{i},y_{j})-p(x_{i},y_{j})logp(y_{j})\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})logp(x_{i},y_{j})-\left [ -\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})logp(y_{j}) \right ]\\ =H(x,y)-H(y)

同樣,如果求x已知時y的條件熵,顯然也會得到類似的公式: 

H(y|x)=H(x,y)-H(x)

那麼兩個公式何並,就能夠得到: 

H(y|x)+H(x)=H(x,y)=H(x|y)+H(y)

這個公式把複合熵、條件熵以及熵聯絡到一起了。它們也顯示了熵的對稱性。

5、相對熵

相對熵又稱KL散度,如果我們對於同一個隨機變數 x 有兩個單獨的概率分佈 p(x)q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分佈的差異。

維基百科對相對熵的定義:

In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.

即如果用P來描述目標問題,而不是用Q來描述目標問題,得到的資訊增量。

在機器學習中,P往往用來表示樣本的真實分佈,比如[1,0,0]表示當前樣本屬於第一類。Q用來表示模型所預測的分佈,比如[0.7,0.2,0.1] 。
直觀的理解就是如果用P來描述樣本,那麼就非常完美。而用Q來描述樣本,雖然可以大致描述,但是不是那麼的完美,資訊量不足,需要額外的一些“資訊增量”才能達到和P一樣完美的描述。如果我們的Q通過反覆訓練,也能完美的描述樣本,那麼就不再需要額外的“資訊增量”,Q等價於P。

p(x)q(x)是取值的兩個概率概率分佈,則p對q的相對熵(或者KL散度)為: 

D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log\frac{p(x_{i})}{q(x_{i})}=E_{p(x)}(\frac{p(x)}{q(x)})

 

在一定程度上面,相對熵可以度量兩個隨機分佈的距離。也常常用相對熵來度量兩個隨機分佈的距離。當兩個隨機分佈相同的時候,他們的相對熵為0,當兩個隨機分佈的差別增大的時候,他們之間的相對熵也會增大。 

但是事實上面,他並不是一個真正的距離。因為相對熵是不具有對稱性的,即一般來說:

D_{KL}(p||q)\neq D_{KL}(q||p)

相對熵還有一個性質,就是不為負:

D_{KL}(q||p)\geq 0,D_{KL}(p||q)\geq 0

6、交叉熵

對上述相對熵(即KL散度)的公式進行變形可以得到:

D_{KL}(p||q)\\ =\sum_{i=1}^{n}p(x_{i})log\frac{p(x_{i})}{q(x_{i})}=\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))\\ =-H(p(x))+\left [ -\sum_{i=1}^{n}p(x_{i})log(q(x_{i})) \right ]

等式的前一部分恰巧就是p的熵,等式的後一部分,就是交叉熵:

H(p,q)=-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))

在機器學習中,我們需要評估label和predicts之間的差距,使用KL散度剛剛好,即D_{KL}(y||\hat{y}),由於KL散度中的前一部分-H(y)不變,故在優化過程中,只需要關注交叉熵就可以了。所以一般在機器學習中直接用交叉熵做誤差函式,評估模型。

在機器學習中,我們希望在訓練資料上模型學到的分佈 P(model) 和真實資料的分佈 P(real) 越接近越好,所以我們可以使其相對熵最小。但是我們沒有真實資料的分佈,所以只能希望模型學到的分佈 P(model)和訓練資料的分佈 P(train)儘量相同。假設訓練資料是從總體中獨立同分布取樣的,那麼我們可以通過最小化訓練資料的經驗誤差來降低模型的泛化誤差。即:

  1. 希望學到的模型的分佈和真實分佈一致,P(model)≃P(real)
  2. 但是真實分佈不可知,假設訓練資料是從真實資料中獨立同分布取樣的,P(train)≃P(real)
  3. 因此,我們希望學到的模型分佈至少和訓練資料的分佈一致,P(train)≃P(model)

根據之前的描述,最小化訓練資料上的分佈  P(train)與最小化模型分佈 P(model) 的差異等價於最小化相對熵,即 DKL(P(train)||P(model))。此時,P(train) 就是DKL(p||q)中的 p,即真實分佈,P(model) 就是 q。又因為訓練資料的分佈 p 是給定的,所以求  DKL(p||q) 等價於求 H(p,q)。得證,交叉熵可以用來計算學習模型分佈與訓練分佈之間的差異。交叉熵廣泛用於邏輯迴歸的Sigmoid和Softmax函式中作為損失函式使用。

7、互資訊

互資訊(Mutual Information)是資訊理論裡一種有用的資訊度量,它可以看成是一個隨機變數中包含的關於另一個隨機變數的資訊量,或者說是一個隨機變數由於已知另一個隨機變數而減少的不確定性。 
兩個隨機變數X,Y的互資訊,定義為X,Y的聯合分佈和獨立分佈乘積的相對熵。

I(X,Y)=D_{KL}(P(X,Y)||P(X)P(Y))=\sum_{x,y}p(x,y)log\frac{p(x,y)}{p(x)p(y)}

那麼互資訊有什麼更加深層次的含義呢?首先計算一個式子先: 

H(X)-I(X,Y)\\ =-\sum_{x}p(x)log(p(x))-\sum_{x,y}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})\\ =-\sum_{x}(\sum_{y}p(x,y))log(p(x)-\sum_{x,y}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})\\ =-\sum_{x,y}p(x,y)log(p(x)-\sum_{x,y}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})\\ =-\sum_{x,y}p(x,y)\left (log(p(x)+log(\frac{p(x,y)}{p(x)p(y)}) \right )\\ =-\sum_{x,y}p(x,y)\left (log(p(x)\cdot (\frac{p(x,y)}{p(x)p(y)}) \right )\\ =-\sum_{x,y}p(x,y)log \frac{p(x,y)}{p(y)} \\ =-\sum_{x,y}p(x,y)log(p(x|y))\\ =H(X|Y)

從這個公式可以知道,X的熵減去X和Y的互資訊之後,可以得到在Y給定的情況下X的熵。

8、JS散度

因為最近在研究GAN模型,所以看到了JS散度。

KL散度的缺點是它不是距離、不對稱,因此引進JS散度的概念。JS散度的定義如下:

JS(P||Q)=\frac{1}{2}KL(P(x)||\frac{P(x)+Q(x)}{2})+\frac{1}{2}KL(Q(x)||\frac{P(x)+Q(x)}{2})

其實JS散度是KL散度的一種變形,但是不同於KL主要又兩方面:

(1)值域範圍

JS散度的值域範圍是[0,1],相同則是0,相反為1。相較於KL,對相似度的判別更確切了。

(2)對稱性

即 JS(P||Q)=JS(Q||P),從數學表示式中就可以看出。

9、總結

1、資訊熵是衡量隨機變數分佈的混亂程度,是隨機分佈各事件發生的資訊量的期望值,隨機變數的取值個數越多,狀態數也就越多,資訊熵就越大,混亂程度就越大。當隨機分佈為均勻分佈時,熵最大;資訊熵推廣到多維領域,則可得到聯合資訊熵;條件熵表示的是在 X給定條件下,Y 的條件概率分佈的熵對 X的期望。

2、相對熵可以用來衡量兩個概率分佈之間的差異。

3、交叉熵可以來衡量在給定的真實分佈下,使用非真實分佈所指定的策略消除系統的不確定性所需要付出的努力的大小。

4、交叉熵和相對熵(KL散度)的關係:D_{KL}(p||q) =-H(p)+H(p,q)

5、條件熵和聯合熵的關係:H(x|y)=H(x,y)-H(y)H(y|x)=H(x,y)-H(x)

6、互資訊、條件熵和聯合熵三者之間的關係:H(X|Y)=H(X)-I(X,Y)I(X,Y)=H(X)-H(X|Y)

路漫漫其修遠兮,咱們下一篇再見。