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

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

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

我們從下面這個(gè)問題出發(fā)思考K-L散度。

假設(shè)我們是一群太空科學(xué)家,經(jīng)過遙遠(yuǎn)的旅行,來到了一顆新發(fā)現(xiàn)的星球。在這個(gè)星球上,生存著一種長有牙齒的蠕蟲,引起了我們的研究興趣。我們發(fā)現(xiàn)這種蠕蟲生有10顆牙齒,但是因?yàn)椴蛔⒁饪谇恍l(wèi)生,又喜歡嚼東西,許多蠕蟲會(huì)掉牙。收集大量樣本之后,我們得到關(guān)于蠕蟲牙齒數(shù)量的經(jīng)驗(yàn)分布,如下圖所示

牙齒數(shù)量分布
會(huì)掉牙的外星蠕蟲

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

uniform distribution

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

binomial

對比一下原始數(shù)據(jù),可以看出均分布和二項(xiàng)分布都不能完全描述原始分布。


all distributions

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

數(shù)據(jù)的熵

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

Entropy

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

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

K-L散度度量信息損失

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

entropy-p-q

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

DKL1

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

DKL2

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

OK,現(xiàn)在我們知道當(dāng)用一個(gè)分布來近似另一個(gè)分布時(shí)如何計(jì)算信息損失量了。接下來,讓我們重新回到最開始的蠕蟲牙齒數(shù)量概率分布的問題。

對比兩種分布

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

DKL-uniform

接下來計(jì)算用二項(xiàng)式分布近似原始分布的K-L散度:

DKL-binomial

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

散度并非距離

很自然地,一些同學(xué)把K-L散度看作是不同分布之間距離的度量。這是不對的,因?yàn)閺腒-L散度的計(jì)算公式就可以看出它不符合對稱性(距離度量應(yīng)該滿足對稱性)。如果用我們上面觀察的數(shù)據(jù)分布來近似二項(xiàng)式分布,得到如下結(jié)果:

DKL-notdistance

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

使用K-L散度優(yōu)化模型

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

二項(xiàng)分布K-L值變化曲線

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

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

ad hoc model

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

finding an optimal parameter value for our ad hoc model

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

ad hoc model distribution

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

回頭看,我們在這一小節(jié)中使用K-L散度作為目標(biāo)方程,分別找到了二項(xiàng)式分布模型的參數(shù)p=0.57和上面這個(gè)隨手建立的模型的參數(shù)p=0.47。是的,這就是本節(jié)的重點(diǎn):使用K-L散度作為目標(biāo)方程來優(yōu)化模型。當(dāng)然,本節(jié)中的模型都只有一個(gè)參數(shù),也可以拓展到有更多參數(shù)的高維模型中。

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

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

我們已經(jīng)知道K-L散度用來度量在逼近一個(gè)分布時(shí)的信息損失量。K-L散度能夠賦予神經(jīng)網(wǎng)絡(luò)近似表達(dá)非常復(fù)雜數(shù)據(jù)分布的能力。變分自編碼器(Variational Autoencoders,VAEs)是一種能夠?qū)W習(xí)最佳近似數(shù)據(jù)集中信息的常用方法,Tutorial on Variational Autoencoders 2016是一篇關(guān)于VAEs的非常不錯(cuò)的教程,里面講述了如何構(gòu)建VAE的細(xì)節(jié)。 What are Variational Autoencoders? A simple explanation簡單介紹了VAEs,Building Autoencoders in Keras介紹了如何利用Keras庫實(shí)現(xiàn)幾種自編碼器。

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

因?yàn)楸救藳]有學(xué)習(xí)過VAE和變分推理,所以本節(jié)內(nèi)容質(zhì)量無法得到保證,我會(huì)聯(lián)系這方面的朋友來改善本節(jié)內(nèi)容,也歡迎大家在評論區(qū)給出建議

譯自: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. 計(jì)算K-L的注意事項(xiàng)


    notice
  3. 遇到log 0時(shí)怎么辦

    example for K-L smoothing

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

  • 信息熵,即熵,香濃熵。編碼方案完美時(shí),最短平均編碼長度。
  • 交叉熵,cross-entropy。編碼方案不一定完美時(shí)(由于對概率分布的估計(jì)不一定正確),平均編碼長度。是神經(jīng)網(wǎng)絡(luò)常用的損失函數(shù)。
  • 相對熵,即K-L散度,relative entropy。編碼方案不一定完美時(shí),平均編碼長度相對于最小值的增加值。
    更詳細(xì)對比,見知乎如何通俗的解釋交叉熵與相對熵?
  1. 為什么在神經(jīng)網(wǎng)絡(luò)中使用交叉熵?fù)p失函數(shù),而不是K-L散度?
    K-L散度=交叉熵-熵,即 DKL( p||q )=H(p,q)?H(p)。
    在神經(jīng)網(wǎng)絡(luò)所涉及到的范圍內(nèi),H(p)不變,則DKL( p||q )等價(jià)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?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容