如何理解K-L散度(相對熵)

Kullback-Leibler Divergence,即K-L散度,是一種量化兩種概率分布P和Q之間差異的方式,又叫相對熵。在概率學和統計學上,我們經常會使用一種更簡單的、近似的分布來替代觀察數據太復雜的分布。K-L散度能幫助我們度量使用一個分布來近似另一個分布時所損失的信息量。

K-L散度定義見文末附錄1。另外在附錄5中解釋了為什么在深度學習中,訓練模型時使用的是Cross Entropy 而非K-L Divergence

我們從下面這個問題出發思考K-L散度。

假設我們是一群太空科學家,經過遙遠的旅行,來到了一顆新發現的星球。在這個星球上,生存著一種長有牙齒的蠕蟲,引起了我們的研究興趣。我們發現這種蠕蟲生有10顆牙齒,但是因為不注意口腔衛生,又喜歡嚼東西,許多蠕蟲會掉牙。收集大量樣本之后,我們得到關于蠕蟲牙齒數量的經驗分布,如下圖所示

牙齒數量分布
會掉牙的外星蠕蟲

這些數據很有價值,但是也有點問題。我們距離地球??太遠了,把這些概率分布數據發送回地球過于昂貴。還好我們是一群聰明的科學家,用一個只有一兩個參數的簡單模型來近似原始數據會減小數據傳送量。最簡單的近似模型是均分布,因為蠕蟲牙齒不會超過10顆,所以有11個可能值,那蠕蟲的牙齒數量概率都為 1/11。分布圖如下:

uniform distribution

顯然我們的原始數據并非均分布的,但也不是我們已知的分布,至少不是常見的分布。作為備選,我們想到的另一種簡單模型是二項式分布binomial distribution。蠕蟲嘴里面共有n=10個牙槽,每個牙槽出現牙齒與否為獨立事件,且概率均為p。則蠕蟲牙齒數量即為期望值E[x]=n*p,真實期望值即為觀察數據的平均值,比如說5.7,則p=0.57,得到如下圖所示的二項式分布:

binomial

對比一下原始數據,可以看出均分布和二項分布都不能完全描述原始分布。


all distributions

可是,我們不禁要問,哪一種分布更加接近原始分布呢?
已經有許多度量誤差的方式存在,但是我們所要考慮的是減小發送的信息量。上面討論的均分布和二項式分布都把問題規約到只需要兩個參數,牙齒數量和概率值(均分布只需要牙齒數量即可)。那么哪個分布保留了更多的原始數據分布的信息呢?這個時候就需要K-L散度登場了。

數據的熵

K-L散度源于信息論。信息論主要研究如何量化數據中的信息。最重要的信息度量單位是Entropy,一般用H表示。分布的熵的公式如下:

Entropy

上面對數沒有確定底數,可以是2e10,等等。如果我們使用以2為底的對數計算H值的話,可以把這個值看作是編碼信息所需要的最少二進制位個數bits。上面空間蠕蟲的例子中,信息指的是根據觀察所得的經驗分布給出的蠕蟲牙齒數量。計算可以得到原始數據概率分布的熵值為3.12 bits。這個值只是告訴我們編碼蠕蟲牙齒數量概率的信息需要的二進制位bit的位數。

可是熵值并沒有給出壓縮數據到最小熵值的方法,即如何編碼數據才能達到最優(存儲空間最優)。優化信息編碼是一個非常有意思的主題,但并不是理解K-L散度所必須的。熵的主要作用是告訴我們最優編碼信息方案的理論下界(存儲空間),以及度量數據的信息量的一種方式。理解了熵,我們就知道有多少信息蘊含在數據之中,現在我們就可以計算當我們用一個帶參數的概率分布來近似替代原始數據分布的時候,到底損失了多少信息。請繼續看下節內容。↓↓↓

K-L散度度量信息損失

只需要稍加修改熵H的計算公式就能得到K-L散度的計算公式。設p為觀察得到的概率分布,q為另一分布來近似p,則pqK-L散度為:

entropy-p-q

顯然,根據上面的公式,K-L散度其實是數據的原始分布p和近似分布q之間的對數差值的期望。如果繼續用2為底的對數計算,則K-L散度值表示信息損失的二進制位數。下面公式以期望表達K-L散度:

DKL1

一般,K-L散度以下面的書寫方式更常見:

DKL2

注:log a - log b = log (a/b)

OK,現在我們知道當用一個分布來近似另一個分布時如何計算信息損失量了。接下來,讓我們重新回到最開始的蠕蟲牙齒數量概率分布的問題。

對比兩種分布

首先是用均分布來近似原始分布的K-L散度:

DKL-uniform

接下來計算用二項式分布近似原始分布的K-L散度:

DKL-binomial

通過上面的計算可以看出,使用均分布近似原始分布的信息損失要比用二項式分布近似小。所以,如果要從均分布和二項式分布中選擇一個的話,均分布更好些。

散度并非距離

很自然地,一些同學把K-L散度看作是不同分布之間距離的度量。這是不對的,因為從K-L散度的計算公式就可以看出它不符合對稱性(距離度量應該滿足對稱性)。如果用我們上面觀察的數據分布來近似二項式分布,得到如下結果:

DKL-notdistance

所以,Dkl (Observed || Binomial) != Dkl (Binomial || Observed)
也就是說,用p近似q和用q近似p,二者所損失的信息并不是一樣的。

使用K-L散度優化模型

前面使用的二項式分布的參數是概率 p=0.57,是原始數據的均值。p的值域在 [0, 1] 之間,我們要選擇一個p值,建立二項式分布,目的是最小化近似誤差,即K-L散度。那么0.57是最優的嗎?
下圖是原始數據分布和二項式分布的K-L散度變化隨二項式分布參數p變化情況:

二項分布K-L值變化曲線

通過上面的曲線圖可以看出,K-L散度值在圓點處最小,即p=0.57。所以我們之前的二項式分布模型已經是最優的二項式模型了。注意,我已經說了,是而像是模型,這里只限定在二項式模型范圍內。

前面只考慮了均分布模型和二項式分布模型,接下來我們考慮另外一種模型來近似原始數據。首先把原始數據分成兩部分,1)0-5顆牙齒的概率和 2)6-10顆牙齒的概率。概率值如下:

ad hoc model

即,一只蠕蟲的牙齒數量x=i的概率為p/5; x=j的概率為(1-p) / 6i=0,1,2,3,4,5; j=6,7,8,9,10
Aha,我們自己建立了一個新的(奇怪的)模型來近似原始的分布,模型只有一個參數p,像前面那樣優化二項式分布的時候所做的一樣,讓我們畫出K-L散度值隨p變化的情況:

finding an optimal parameter value for our ad hoc model

p=0.47時,K-L值取最小值0.338。似曾相識嗎?對,這個值和使用均分布的K-L散度值是一樣的(這并不能說明什么)!下面我們繼續畫出這個奇怪模型的概率分布圖,看起來確實和均分布的概率分布圖相似:

ad hoc model distribution

我們自己都說了,這是個奇怪的模型,在K-L值相同的情況下,更傾向于使用更常見的、更簡單的均分布模型。

回頭看,我們在這一小節中使用K-L散度作為目標方程,分別找到了二項式分布模型的參數p=0.57和上面這個隨手建立的模型的參數p=0.47。是的,這就是本節的重點:使用K-L散度作為目標方程來優化模型。當然,本節中的模型都只有一個參數,也可以拓展到有更多參數的高維模型中。

變分自編碼器VAEs和變分貝葉斯法

如果你熟悉神經網絡,你肯能已經猜到我們接下來要學習的內容。除去神經網絡結構的細節信息不談,整個神經網絡模型其實是在構造一個參數數量巨大的函數(百萬級,甚至更多),不妨記為f(x),通過設定目標函數,可以訓練神經網絡逼近非常復雜的真實函數g(x)。訓練的關鍵是要設定目標函數,反饋給神經網絡當前的表現如何。訓練過程就是不斷減小目標函數值的過程。

我們已經知道K-L散度用來度量在逼近一個分布時的信息損失量。K-L散度能夠賦予神經網絡近似表達非常復雜數據分布的能力。變分自編碼器(Variational Autoencoders,VAEs)是一種能夠學習最佳近似數據集中信息的常用方法,Tutorial on Variational Autoencoders 2016是一篇關于VAEs的非常不錯的教程,里面講述了如何構建VAE的細節。 What are Variational Autoencoders? A simple explanation簡單介紹了VAEs,Building Autoencoders in Keras介紹了如何利用Keras庫實現幾種自編碼器。

變分貝葉斯方法(Variational Bayesian Methods)是一種更常見的方法。這篇文章介紹了強大的蒙特卡洛模擬方法能夠解決很多概率問題。蒙特卡洛模擬能夠幫助解決許多貝葉斯推理問題中的棘手積分問題,盡管計算開銷很大。包括VAE在內的變分貝葉斯方法,都能用K-L散度生成優化的近似分布,這種方法對棘手積分問題能進行更高效的推理。更多變分推理(Variational Inference)的知識可以訪問Edward library for python

因為本人沒有學習過VAE和變分推理,所以本節內容質量無法得到保證,我會聯系這方面的朋友來改善本節內容,也歡迎大家在評論區給出建議

譯自:Kullback-Leibler Divergence Explained
作者:Will Kurt
If you enjoyed this post please subscribe to keep up to date and follow @willkurt!
If you enjoyed this writing and also like programming languages, you might like the book on Haskell I just finished due in print July 2017 (though nearly all the content is available online today).

附錄

  1. K-L 散度的定義


    define K-L divergence
  2. 計算K-L的注意事項


    notice
  3. 遇到log 0時怎么辦

    example for K-L smoothing

  4. 信息熵、交叉熵、相對熵

  • 信息熵,即熵,香濃熵。編碼方案完美時,最短平均編碼長度。
  • 交叉熵,cross-entropy。編碼方案不一定完美時(由于對概率分布的估計不一定正確),平均編碼長度。是神經網絡常用的損失函數。
  • 相對熵,即K-L散度,relative entropy。編碼方案不一定完美時,平均編碼長度相對于最小值的增加值。
    更詳細對比,見知乎如何通俗的解釋交叉熵與相對熵?
  1. 為什么在神經網絡中使用交叉熵損失函數,而不是K-L散度?
    K-L散度=交叉熵-熵,即 DKL( p||q )=H(p,q)?H(p)
    在神經網絡所涉及到的范圍內,H(p)不變,則DKL( p||q )等價H(p,q)
    更多討論見Why do we use Kullback-Leibler divergence rather than cross entropy in the t-SNE objective function?Why train with cross-entropy instead of KL divergence in classification?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容