[From] https://www.zhihu.com/question/41252833/answer/108777563
熵的本質是香農信息量()的期望。
現有關於樣本集的2個概率分布p和q,其中p為真實分布,q非真實分布。按照真實分布p來衡量識別一個樣本的所需要的編碼長度的期望(即平均編碼長度)為:H(p)=。如果使用錯誤分布q來表示來自真實分布p的平均編碼長度,則應該是:H(p,q)=
。因為用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)=,其又被稱為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者須區別對待。