從夏農資訊量到KL散度

Chilia Waterhouse發表於2021-01-02

一、夏農資訊量

1、定義

假設我們聽到了兩件事,分別如下:
事件A:巴西隊進入了2018世界盃決賽圈。
事件B:中國隊進入了2018世界盃決賽圈。
僅憑直覺來說,顯而易見事件B的資訊量比事件A的資訊量要大。究其原因,是因為事件A發生的概率很大,事件B發生的概率很小。所以當越不可能的事件發生了,我們獲取到的資訊量就越大。越可能發生的事件發生了,我們獲取到的資訊量就越小。那麼資訊量應該和事件發生的概率有關。

如果是連續型隨機變數的情況,設p為隨機變數X的概率分佈,即p(x)為隨機變數X在X = x處的概率密度函式值,則隨機變數X在X = x處的夏農資訊量定義為:

                                                                                                                - log_2p(x)

這時夏農資訊量的單位為位元。由夏農資訊量我們可以知道對於一個已知概率的事件,我們需要多少的資料量能完整地把它表達清楚,不與外界產生歧義。

 

2、舉例

假設我們有一段資料長下面這樣:aaBaaaVaaaaa

可以算出三個字母出現的概率分別為:

a : 10/12 , B : 1/12 , V : 1/12 

夏農資訊量為:a : 0.263 , B : 3.585 , V : 3.585

也就是說如果我們要用位元來表述這幾個字母,分別需要0.263 , 3.585 , 3.585個這樣的位元。當然,由於位元是整數的,因此應該向上取整,變為1,4,4個位元。

這個時候我們就可以按照這個指導對字母進行編碼,比如把a編碼為"0",把B編碼為"1000",V 編碼為"1001",然後用編碼替換掉字母來完成壓縮編碼,資料壓縮結果為:001000000100100000.

 

二、資訊熵

1、intuition

對於整個系統而言,我們更加關心的是表達系統整體所需要的資訊量。比如我們上面舉例的aaBaaaVaaaaa這段字母,雖然B和V的夏農資訊量比較大,但他們出現的次數明顯要比a少很多,因此我們需要有一個方法來評估整體系統的資訊量。

很自然地想到利用期望,因此評估的方法可以是:“事件夏農資訊量×事件概率”的累加。這也正是資訊熵的概念。

                                                                                                     H(p)=\sum _{i=1}^n p(x)log_2 p(x)

資訊熵衡量了系統的混亂程度,如果k個事件都是等概率發生,那麼混亂程度最大,資訊熵也最大。

三、相對熵(KL散度)

1、直觀解釋

KL 散度是一種衡量兩個分佈之間的匹配程度的方法。

2、一個有趣的例子

假設我們是一組正在廣袤無垠的太空中進行研究的科學家。我們發現了一些太空蠕蟲,這些太空蠕蟲的牙齒數量各不相同。現在我們需要將這些資訊發回地球。但從太空向地球傳送資訊的成本很高,所以我們需要用盡量少的資料表達這些資訊。我們有個好方法:我們不傳送單個數值,而是繪製一張圖表,其中 X 軸表示所觀察到的不同牙齒數量(0,1,2…),Y 軸是看到的太空蠕蟲具有 x 顆牙齒的概率(即具有 x 顆牙齒的蠕蟲數量/蠕蟲總數量)。這樣,我們就將觀察結果轉換成了分佈

傳送分佈比傳送每隻蠕蟲的資訊更高效。但我們還能進一步壓縮資料大小。我們可以用一個已知的分佈來表示這個分佈(比如均勻分佈、二項分佈、正態分佈)。舉個例子,假如我們用均勻分佈來表示真實分佈,我們只需要傳送兩段資料就能恢復真實資料:均勻概率和蠕蟲數量。但我們怎樣才能知道哪種分佈能更好地解釋真實分佈呢?這就是 KL 散度的用武之地。

假設有 100 只蠕蟲,各種牙齒數的蠕蟲的數量統計結果如下。

0 顆牙齒:2(概率:p_0 = 0.02)

1 顆牙齒:3(概率:p_1 = 0.03)

2 顆牙齒:5(概率:p_2 = 0.05)

3 顆牙齒:14(概率:p_3 = 0.14

4 顆牙齒:16(概率:p_4 = 0.16)

5 顆牙齒:15(概率:p_5 = 0.15)

6 顆牙齒:12(概率:p_6 = 0.12)

7 顆牙齒:8(概率:p_7 = 0.08)

8 顆牙齒:10(概率:p_8 = 0.1)

9 顆牙齒:8(概率:p_9 = 0.08)

10 顆牙齒:7(概率:p_10 = 0.07)

preview

嘗試 1:使用均勻分佈建模

我們首先使用均勻分佈來建模該分佈。均勻分佈只有一個引數:均勻概率;即給定事件發生的概率。

preview

均勻分佈和真實分佈對比:

嘗試 2:使用二項分佈建模

由於二項分佈的均值為np,方差為np(1-p),經計算得到p=0.544.

二項分佈和真實分佈對比:

preview

 

我們如何定量地確定哪個分佈更好?

經過這些計算之後,我們需要一種衡量每個近似分佈與真實分佈之間匹配程度的方法。這很重要,這樣當我們傳送資訊時,我們才無需擔憂「我是否選擇對了?」畢竟太空蠕蟲關乎我們每個人的生命。

這就是 KL 散度的用武之地。KL 散度在形式上定義如下:

                                                                                                       D_{KL}(p||q) = \sum_{i=1}^N p(x_i)log(\frac{p(x_i)}{q(x_i)})

其中 q(x) 是近似分佈,p(x) 是真實分佈。直觀地說,這衡量的是給定任意分佈偏離真實分佈的程度。如果兩個分佈完全匹配,那麼 D_{KL}(p||q)=0.

KL 散度越小,真實分佈與近似分佈之間的匹配就越好。

三、再次直觀解釋

讓我們看看 KL 散度各個部分的含義。首先看看

log(\frac{p(x_i)}{q(x_i)})

項。如果 q(x_i) 大於 p(x_i) 會怎樣呢?此時這個項的值為負,因為小於 1 的值的對數為負。另一方面,如果 q(x_i) 總是小於 p(x_i),那麼該項的值為正。如果 p(x_i)=q(x_i) 則該項的值為 0。然後,為了使這個值為期望值,你要用 p(x_i) 來給這個對數項加權。也就是說,p(x_i) 有更高概率的匹配區域比低 p(x_i) 概率的匹配區域更加重要。

四、性質

1)不對稱性

儘管KL散度從直觀上是個度量或距離函式,但它並不是一個真正的度量或者距離,因為它不具有對稱性,即D(P||Q)!=D(Q||P)。這是因為KL散度是針對近似分佈偏離真實分佈的程度來說的。

(2)非負性

相對熵的值是非負值,即D(P||Q)>0。

四、交叉熵

1、和KL散度的關係

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

其中,p(x)是真實分佈,q(x)是預測分佈。

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

2、交叉熵loss舉例

單分類問題:

loss= −(0×log(0.3)+1×log(0.6)+0×log(0.1) = log(0.6)

多分類問題:

這裡不採用softmax(因為概率總和不再是1),而是採用sigmoid把每個概率值放縮到(0,1)即可。

單張樣本的loss即為loss=loss貓+loss蛙+loss鼠

相關文章