如何通俗的解釋交叉熵與相對熵?

如題。 資訊理論中的條件熵,聯合熵等比較好理解,物理意義也相對明確。請問有人能以相對通俗的語言解釋『交叉熵』與『相對熵』動機與含義嗎?


熵的本質是香農信息量(logfrac{1}{p} )的期望。

現有關於樣本集的2個概率分布p和q,其中p為真實分布,q非真實分布。按照真實分布p來衡量識別一個樣本的所需要的編碼長度的期望(即平均編碼長度)為:H(p)=sum_{i}^{} p(i)*logfrac{1}{p(i)} 。如果使用錯誤分布q來表示來自真實分布p的平均編碼長度,則應該是:H(p,q)=sum_{i}^{} p(i)*logfrac{1}{q(i)} 。因為用q來編碼的樣本來自分布p,所以期望H(p,q)中概率是p(i)。H(p,q)我們稱之為「交叉熵」。

比如含有4個字母(A,B,C,D)的數據集中,真實分布p=(1/2, 1/2, 0, 0),即A和B出現的概率均為1/2,C和D出現的概率都為0。計算H(p)為1,即只需要1位編碼即可識別A和B。如果使用分布Q=(1/4, 1/4, 1/4, 1/4)來編碼則得到H(p,q)=2,即需要2位編碼來識別A和B(當然還有C和D,儘管C和D並不會出現,因為真實分布p中C和D出現的概率為0,這裡就欽定概率為0的事件不會發生啦)。

可以看到上例中根據非真實分布q得到的平均編碼長度H(p,q)大於根據真實分布p得到的平均編碼長度H(p)。事實上,根據Gibbs" inequality可知,H(p,q)&>=H(p)恆成立,當q為真實分布p時取等號。我們將由q得到的平均編碼長度比由p得到的平均編碼長度多出的bit數稱為「相對熵」:D(p||q)=H(p,q)-H(p)=sum_{i}^{} p(i)*logfrac{p(i)}{q(i)} ,其又被稱為KL散度(Kullback–Leibler divergence,KLD) Kullback–Leibler divergence。它表示2個函數或概率分布的差異性:差異越大則相對熵越大,差異越小則相對熵越小,特別地,若2者相同則熵為0。注意,KL散度的非對稱性。

比如TD-IDF演算法就可以理解為相對熵的應用:詞頻在整個語料庫的分布與詞頻在具體文檔中分布之間的差異性。

交叉熵可在神經網路(機器學習)中作為損失函數,p表示真實標記的分布,q則為訓練後的模型的預測標記分布,交叉熵損失函數可以衡量p與q的相似性。交叉熵作為損失函數還有一個好處是使用sigmoid函數在梯度下降時能避免均方誤差損失函數學習速率降低的問題,因為學習速率可以被輸出的誤差所控制。

PS:通常「相對熵」也可稱為「交叉熵」,因為真實分布p是固定的,D(p||q)由H(p,q)決定。當然也有特殊情況,彼時2者須區別對待。


討論這個問題需要從香農的信息熵開始。

小明在學校玩王者榮耀被發現了,爸爸被叫去開家長會,心裡悲屈的很,就想法子懲罰小明。到家後,爸爸跟小明說:既然你犯錯了,就要接受懲罰,但懲罰的程度就看你聰不聰明了。這樣吧,我們倆玩猜球遊戲,我拿一個球,你猜球的顏色,你每猜一次,不管對錯,你就一個星期不能玩王者榮耀,當然,猜對,遊戲停止,否則繼續猜。當然,當答案只剩下兩種選擇時,此次猜測結束後,無論猜對猜錯都能100%確定答案,此時遊戲停止。

題目1:爸爸拿來一個箱子,跟小明說:裡面有橙、紫、藍及青四種顏色的小球任意個,各顏色小球的佔比不清楚,現在我從中拿出一個小球,你猜我手中的小球是什麼顏色?

為了使被罰時間最短,小明發揮出最強王者的智商,瞬間就想到了以最小的代價猜出答案,簡稱策略1,小明的想法是這樣的。

在這種情況下,小明什麼信息都不知道,只能認為四種顏色的小球出現的概率是一樣的。所以,根據策略1,1/4概率是橙色球,小明需要猜兩次,1/4是紫色球,小明需要猜兩次,其餘的小球類似,所以小明預期的猜球次數為:

H = 1/4 * 2 + 1/4 * 2 + 1/4 * 2 + 1/4 * 2 = 2

題目2:爸爸還是拿來一個箱子,跟小明說:箱子裡面有小球任意個,但其中1/2是橙色球,1/4是紫色球,1/8是藍色球及1/8是青色球。我從中拿出一個球,你猜我手中的球是什麼顏色的?

小明畢竟是最強王者,仍然很快得想到了答案,簡稱策略2,他的答案是這樣的。

在這種情況下,小明知道了每種顏色小球的比例,比如橙色佔比二分之一,如果我猜橙色,很有可能第一次就猜中了。所以,根據策略2,1/2的概率是橙色球,小明需要猜一次,1/4的概率是紫色球,小明需要猜兩次,1/8的概率是藍色球,小明需要猜三次,1/8的概率是青色球,小明需要猜三次,所以小明預期的猜題次數為:

H = 1/2 * 1 + 1/4 * 2 + 1/8 * 3 + 1/8 * 3= 1.75

題目3:其實,爸爸只想讓小明意識到自己的錯誤,並不是真的想罰他,所以拿來一個箱子,跟小明說:裡面的球都是橙色,現在我從中拿出一個,你猜我手中的球是什麼顏色?

最強王者怎麼可能不知道,肯定是橙色,小明需要猜0次。

上面三個題目表現出這樣一種現象:針對特定概率為p的小球,需要猜球的次數 = log_2 frac{1}{p} ,例如題目2中,1/4是紫色球, log_2 4 = 2 次,1/8是藍色球, log_2 8 = 3次。那麼,針對整個整體,預期的猜題次數為: sum_{k=1}^N p_k log_2 frac{1}{p_k} ,這就是信息熵,上面三個題目的預期猜球次數都是由這個公式計算而來,第一題的信息熵為2,第二題的信息熵為1.75,最三題的信息熵為1 * log 1 = 0 那麼信息熵代表著什麼含義呢?

信息熵代表的是隨機變數或整個系統的不確定性,熵越大,隨機變數或系統的不確定性就越大。上面題目1的熵 &> 題目2的熵 &> 題目3的熵。在題目1中,小明對整個系統一無所知,只能假設所有的情況出現的概率都是均等的,此時的熵是最大的。題目2中,小明知道了橙色小球出現的概率是1/2及其他小球各自出現的概率,說明小明對這個系統有一定的了解,所以系統的不確定性自然會降低,所以熵小於2。題目3中,小明已經知道箱子中肯定是橙色球,爸爸手中的球肯定是橙色的,因而整個系統的不確定性為0,也就是熵為0。所以,在什麼都不知道的情況下,熵會最大,針對上面的題目1~~題目3,這個最大值是2,除此之外,其餘的任何一種情況,熵都會比2小。

所以,每一個系統都會有一個真實的概率分布,也叫真實分布,題目1的真實分布為(1/4,1/4,1/4,1/4),題目2的真實分布為(1/2,1/4,1/8,1/8),而根據真實分布,我們能夠找到一個最優策略,以最小的代價消除系統的不確定性而這個代價大小就是信息熵,記住,信息熵衡量了系統的不確定性,而我們要消除這個不確定性,所要付出的【最小努力】(猜題次數、編碼長度等)的大小就是信息熵。具體來講,題目1隻需要猜兩次就能確定任何一個小球的顏色,題目2隻需要猜測1.75次就能確定任何一個小球的顏色。

現在回到題目2,假設小明只是鑽石段位而已,智商沒王者那麼高,他使用了策略1,即

爸爸已經告訴小明這些小球的真實分布是(1/2,1/4, 1/8,1/8),但小明所選擇的策略卻認為所有的小球出現的概率相同,相當於忽略了爸爸告訴小明關於箱子中各小球的真實分布,而仍舊認為所有小球出現的概率是一樣的,認為小球的分布為(1/4,1/4,1/4,1/4),這個分布就是非真實分布。此時,小明猜中任何一種顏色的小球都需要猜兩次,即1/2 * 2 + 1/4 * 2 + 1/8 * 2 + 1/8 * 2 = 2。

很明顯,針對題目2,使用策略1是一個壞的選擇,因為需要猜題的次數增加了,從1.75變成了2,小明少玩了1.75的王者榮耀呢。因此,當我們知道根據系統的真實分布制定最優策略去消除系統的不確定性時,我們所付出的努力是最小的,但並不是每個人都和最強王者一樣聰明,我們也許會使用其他的策略(非真實分布)去消除系統的不確定性,就好比如我將策略1用於題目2(原來這就是我在白銀的原因),那麼,當我們使用非最優策略消除系統的不確定性,所需要付出的努力的大小我們該如何去衡量呢?

這就需要引入交叉熵,其用來衡量在給定的真實分布下,使用非真實分布所指定的策略消除系統的不確定性所需要付出的努力的大小

正式的講,交叉熵的公式為: sum_{k=1}^N p_k log_2 frac{1}{q_k} ,其中 p_k 表示真實分布, q_k 表示非真實分布。例如上面所講的將策略1用於題目2,真實分布 p_k = (frac {1}{2},frac {1}{4},frac {1}{8},frac {1}{8}) , 非真實分布 q_k = (frac {1}{4},frac {1}{4},frac {1}{4},frac {1}{4}) ,交叉熵為 frac{1}{2} * log_2 4 + frac{1}{4} * log_2 4 + frac{1}{8} * log_2 4 + frac{1}{8} * log_2 4 = 2 ,比最優策略的1.75來得大。

因此,交叉熵越低,這個策略就越好,最低的交叉熵也就是使用了真實分布所計算出來的信息熵,因為此時 p_k = q_k ,交叉熵 = 信息熵。這也是為什麼在機器學習中的分類演算法中,我們總是最小化交叉熵,因為交叉熵越低,就證明由演算法所產生的策略最接近最優策略,也間接證明我們演算法所算出的非真實分布越接近真實分布。

最後,我們如何去衡量不同策略之間的差異呢?這就需要用到相對熵,其用來衡量兩個取值為正的函數或概率分布之間的差異,即:

KL(f(x) || g(x)) = sum_{ x in X} f(x) * log_2 frac{f(x)}{g(x)}

現在,假設我們想知道某個策略和最優策略之間的差異,我們就可以用相對熵來衡量這兩者之間的差異。即,相對熵 = 某個策略的交叉熵 - 信息熵(根據系統真實分布計算而得的信息熵,為最優策略),公式如下:

KL(p || q) = H(p,q) - H(p) =  sum_{k=1}^N p_k log_2 frac{1}{q_k} - sum_{k=1}^N p_k log_2 frac{1}{p_k} = sum_{k=1}^N p_k log_2 frac{p_k}{q_k}

所以將策略1用於題目2,所產生的相對熵為2 - 1.75 = 0.25.

參考:

《數學之美》吳軍

Information entropy

還有,小明同學,我幫你分析得這麼清楚,快帶我上王者。


僅從機器學習的角度討論這個問題。

相對熵(relative entropy)就是KL散度(Kullback–Leibler divergence),用于衡量兩個概率分布之間的差異。

對於兩個概率分布p(x)q(x) ,其相對熵的計算公式為:

	t KLit(pparallel q)=-int p(x)ln q(x) dx -(-int p(x)ln p(x) dx)

注意:由於p(x)q(x) 在公式中的地位不是相等的,所以	t KL it(pparallel q)
otequiv 	t KL it (qparallel p).

相對熵的特點,是只有p(x)=q(x) 時,其值為0。若p(x)q(x) 略有差異,其值就會大於0。其證明利用了負對數函數(-ln x )是嚴格凸函數(strictly convex function)的性質。具體可以參考PRML 1.6.1 Relative entropy and mutual information.

相對熵公式的前半部分-int p(x)ln q(x)dx 就是交叉熵(cross entropy)。

p(x) 是數據的真實概率分布,q(x) 是由數據計算得到的概率分布。機器學習的目的就是希望q(x)儘可能地逼近甚至等於p(x) ,從而使得相對熵接近最小值0. 由於真實的概率分布是固定的,相對熵公式的後半部分(-int p(x)ln p(x) dx) 就成了一個常數。那麼相對熵達到最小值的時候,也意味著交叉熵達到了最小值。對q(x) 的優化就等效於求交叉熵的最小值。另外,對交叉熵求最小值,也等效於求最大似然估計(maximum likelihood estimation)。具體可以參考Deep Learning 5.5 Maximum Likelihood Estimation.


正在學習 DL Book 第6章,查資料看到了這個問題。
受第一個答案啟發,自己寫了一些筆記。
分享出來供大家參考。有問題歡迎討論。
-------------------------------------------------------------------------------------------------
先給結論:
1)信息熵:編碼方案完美時,最短平均編碼長度的是多少。
2)交叉熵:編碼方案不一定完美時(由於對概率分布的估計不一定正確),平均編碼長度的是多少。
平均編碼長度 = 最短平均編碼長度 + 一個增量
3)相對熵:編碼方案不一定完美時,平均編碼長度相對於最小值的增加值。(即上面那個增量)
-------------------------------------------------------------------------------------------------

零、信息熵
1、熵的本質是香農信息量 log(1/p) 的期望;(參考了第一個答案)
H(p) = E[ log(1/p) ] = ∑ p_i * log(1/p_i),是一個期望的計算,也是記錄隨機事件結果的平均編碼長度;
為什麼信息量 是 log(1/p) 呢?
因為:一個事件結果的出現概率越低,對其編碼的bit長度就越長。
以期在整個隨機事件的無數次重複試驗中,用最少的 bit 去記錄整個實驗歷史。
即無法壓縮的表達,代表了真正的信息量。

2、熵的本質的另一種解釋:最短平均編碼長度
【本質含義:編碼方案完美時,最短平均編碼長度的是多少】

3、交叉熵,則可以這樣理解:使用了「估算」的編碼後,得到的平均編碼長度(可能不是最短的)
p是真實概率分布,q是你以為的概率分布(可能不一致);
你以 q 去編碼,編碼方案 log(1/q_i)可能不是最優的;
於是,平均編碼長度 = ∑ p_i *log(1/q_i),就是交叉熵;
只有在估算的分布 q 完全正確時,平均編碼長度才是最短的,交叉熵 = 熵


一、交叉熵
1、定義
【本質含義:編碼方案不一定完美時,平均編碼長度的是多少】
連續函數:

兩項中 H(p)是 p的信息熵,後者是相對熵;
離散函數:

=Entropy(P) + D_KL(P||Q)

2、在 ML 中等效於相對熵
【作用:用來評估,當前訓練得到的概率分布,與真實分布有多麼大的差異】
因為與相對熵只差一個 分布 P 的信息熵,
若 P 是固定的分布,與訓練無關;
Q 是估計的分布,應盡量等於 P。
二者一致時,交叉熵就等於 P 的熵

二、相對熵
【本質含義:由於編碼方案不一定完美,導致的平均編碼長度的增大值】
離散:

【發現:D_KL(P||Q) = ∑P(i) *logP(i) - ∑P(i) *logQ(i)
= - Entropy(P) + 交叉熵 H(p,q) 】
連續:

1)用來衡量2個取值為正數的函數的相似性
2)2個完全相同的函數,相對熵為0;差異越大,相對熵越大;
3)概率分布函數,或 概率密度函數,若函數值均大於0,相對熵可以度量兩個隨機分布的差異性;
4)相對熵不對稱,沒有交換律
-----------------------------------------------------------
參考:
《數學之美》吳軍
wiki
第一個高票答案


交叉熵H(p,q)=-sum(p*logq),表示用分布q模擬真實分布p所需的信息,可作為一種loss。

相對熵又稱KL距離,KL(p||q)=H(p,q)-H(p,p),表示用分布q模擬真實分布p相比用p模擬p,所需的額外信息。

KL&>=0,當p==q時,取等。最小化KL距離,等價於最小化交叉熵,對應機器學習的一種目標。


信息熵完美編碼,
交叉熵不完美編碼,
相對熵是兩者的差值,交叉熵減去信息熵。差值即差異,也即KL散度。


推薦閱讀:

香農的資訊理論究竟牛在哪裡?

TAG:數學 | 機器學習 | 資訊理論 |