【簡介】
交叉熵(Cross Entropy)是Shannon信息論中一個重要概念,主要用於度量兩個概率分布間的差異性信息。語言模型的性能通常用交叉熵和復雜度(perplexity)來衡量。交叉熵的意義是用該模型對文本識別的難度,或者從壓縮的角度來看,每個詞平均要用幾個位來編碼。復雜度的意義是用該模型表示這一文本平均的分支數,其倒數可視為每個詞的平均概率。平滑是指對沒觀察到的N元組合賦予一個概率值,以保證詞序列總能通過語言模型得到一個概率值。通常使用的平滑技術有圖靈估計、刪除插值平滑、Katz平滑和Kneser-Ney平滑。
將交叉熵引入計算語言學消岐領域,采用語句的真實語義作為交叉熵的訓練集的先驗信息,將機器翻譯的語義作為測試集后驗信息。計算兩者的交叉熵,並以交叉熵指導對歧義的辨識和消除。實例表明,該方法簡潔有效.易於計算機自適應實現。交叉熵不失為計算語言學消岐的一種較為有效的工具。
交叉熵可在神經網絡(機器學習)中作為損失函數,p表示真實標記的分布,q則為訓練后的模型的預測標記分布,交叉熵損失函數可以衡量p與q的相似性。交叉熵作為損失函數還有一個好處是使用sigmoid函數在梯度下降時能避免均方誤差損失函數學習速率降低的問題,因為學習速率可以被輸出的誤差所控制。(來自百度百科)
【預備知識】
1、信息量;
2、信息熵;
3、相對熵。
【信息量】
所謂信息量是指從N個相等可能事件中選出一個事件所需要的信息度量或含量,也就是在辯識N個事件中特定的一個事件的過程中所需要提問"是或否"的最少次數。在數學上,所傳輸的消息是其出現概率的單調下降函數。如從64個數中選定某一個數,提問:“是否大於32?”,則不論回答是與否,都消去了半數的可能事件,如此下去,只要問6次這類問題,就可以從64個數中選定一個數。我們可以用二進制的6個位來記錄這一過程,就可以得到這條信息。
假設X是一個離散型隨機變量,其取值集合為X,概率分布函數為p(x)=Pr(X=x),x∈X,我們定義事件X=x0的信息量為: I(x0)=−log(p(x0)),可以理解為,一個事件發生的概率越大,則它所攜帶的信息量就越小,而當p(x0)=1時,熵將等於0,也就是說該事件的發生不會導致任何信息量的增加。舉個例子,小明平時不愛學習,考試經常不及格,而小王是個勤奮學習的好學生,經常得滿分,所以我們可以做如下假設:
事件A:小明考試及格,對應的概率P(xA)=0.1,信息量為I(xA)=−log(0.1)=3.3219
事件B:小王考試及格,對應的概率P(xB)=0.999,信息量為I(xB)=−log(0.999)=0.0014
可以看出,結果非常符合直觀:小明及格的可能性很低(十次考試只有一次及格),因此如果某次考試及格了(大家都會說:XXX竟然及格了!),必然會引入較大的信息量,對應的I值也較高。而對於小王而言,考試及格是大概率事件,在事件B發生前,大家普遍認為事件B的發生幾乎是確定的,因此當某次考試小王及格這個事件發生時並不會引入太多的信息量,相應的I值也非常的低。
【信息熵】
信息理論的鼻祖之一Claude E. Shannon把信息(熵)定義為離散隨機事件的出現概率。所謂信息熵,是一個數學上頗為抽象的概念,在這里不妨把信息熵理解成某種特定信息的出現概率。一般而言,當一種信息出現概率更高的時候,表明它被傳播得更廣泛,或者說,被引用的程度更高。我們可以認為,從信息傳播的角度來看,信息熵可以表示信息的價值。為了求得信息的價值,我們通過求信息期望的方式,來求得信息熵。公式如下:H(x) = E[I(xi)] = E[ log(1/p(xi)) ] = -∑p(xi)log(p(xi)) 其中,x表示隨機變量,與之相對應的是所有可能輸出的集合,定義為符號集,隨機變量的輸出用x表示。P(x)表示輸出概率函數。變量的不確定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。為了保證有效性,這里約定當p(x)→0時,有p(x)logp(x)→0 。
當X為0-1分布時,熵與概率p的關系如下圖:
可以看出,當兩種取值的可能性相等時,不確定度最大(此時沒有任何先驗知識),這個結論可以推廣到多種取值的情況。在圖中也可以看出,當p=0或1時,熵為0,即此時X完全確定。 熵的單位隨着公式中log運算的底數而變化,當底數為2時,單位為“比特”(bit),底數為e時,單位為“奈特”。
【相對熵】

顯然,當p=q 時,兩者之間的相對熵DKL(p||q)=0 。上式最后的Hp(q)表示在p分布下,使用q進行編碼需要的bit數,而H(p)表示對真實分布p所需要的最小編碼bit數。基於此,相對熵的意義就很明確了:DKL(p||q)表示在真實分布為p的前提下,使用q分布進行編碼相對於使用真實分布p進行編碼(即最優編碼)所多出來的bit數。並且為了保證連續性,做如下約定:
【交叉熵】
在信息論中,交叉熵是表示兩個概率分布p,q,其中p表示真實分布,q表示非真實分布,在相同的一組事件中,其中,用非真實分布q來表示某個事件發生所需要的平均比特數。從這個定義中,我們很難理解交叉熵的定義。
假設現在有一個樣本集中兩個概率分布p,q,其中p為真實分布,q為非真實分布。假如,按照真實分布p來衡量識別一個樣本所需要的編碼長度的期望為:
H(p)=
但是,如果非真實分布q來表示來自真實分布p的平均編碼長度,則應該是:
H(p,q)=
此時就將H(p,q)稱之為交叉熵。交叉熵的計算方式如下:
CEH(p,q)= 
對所有訓練樣本取均值得: