1. 程式人生 > >從夏農熵到手推KL散度:一文帶你縱覽機器學習中的資訊理論

從夏農熵到手推KL散度:一文帶你縱覽機器學習中的資訊理論

資訊理論與資訊熵是 AI 或機器學習中非常重要的概念,我們經常需要使用它的關鍵思想來描述概率分佈或者量化概率分佈之間的相似性。在本文中,我們從最基本的自資訊和資訊熵到交叉熵討論了資訊理論的基礎,再由最大似然估計推匯出 KL 散度而加強我們對量化分佈間相似性的理解。最後我們簡要討論了資訊熵在機器學習中的應用,包括通過互資訊選擇決策樹的特徵、通過交叉熵衡量分類問題的損失和貝葉斯學習等。

>>>>

資訊理論是應用數學的一個分支,主要研究的是對一個訊號包含資訊的多少進行量化。它最初被髮明是用來研究在一個含有噪聲的通道上用離散的字母表來發送訊息,例如通過無線電傳輸來通訊。而本文主要探討資訊熵在 AI 或機器學習中的應用,一般在機器學習中,我們可以將資訊理論應用在連續型變數上,並使用資訊理論的一些關鍵思想來描述概率分佈或者量化概率分佈之間的相似性。

因此在機器學習中,通常要把與隨機事件相關資訊的期望值進行量化,此外還要量化不同概率分佈之間的相似性。在這兩種情況下,夏農熵都被用來衡量概率分佈中的資訊內容。夏農熵是以資訊理論之父 Claude Shannon 的名字命名的,也稱為資訊熵或微分熵(連續)。

自資訊

夏農熵的基本概念就是所謂的一個事件背後的自資訊(self-information),有時候也叫做不確定性。自資訊的直覺解釋如下,當某個事件(隨機變數)的一個不可能的結果出現時,我們就認為它提供了大量的資訊。相反地,當觀察到一個經常出現的結果時,我們就認為它具有或提供少量的資訊。將自資訊與一個事件的意外性聯絡起來是很有幫助的。例如,一個極其偏畸的硬幣,每一次拋擲總是正面朝上。任何一次硬幣拋擲的結果都是可以完全預測的,這樣的話我們就永遠不會對某次結果感到驚奇,也就意味著我們從這個實驗中得到的資訊是 0。換言之,它的自資訊是 0。如果硬幣的偏畸程度稍微小一些,這樣的話,儘管看到正面朝上的概率超過了 50%,每次拋擲還會有一些資訊。因此,它的自資訊大於 0。如果硬幣的偏畸程度是導致反面朝上的結果,我們得到的自資訊還是 0。在使用一個沒有偏畸的硬幣做實驗時,每次拋擲得到正面朝上和反面朝上的概率都是 50%,我們會得到最大的意外性,因為在這種情況下硬幣拋擲的結果的可預測性是最小的。我們也可以說,均勻分佈的熵最大,確定事件的熵最小。

基於以上的非正式需求,我們可以找到一個合適的函式來描述自資訊。對於一個可能取值為 x_1,x_2,...,x_n 的離散隨機變數 X,它的概率質量函式 P(X),以及任何正的取值在 0 到 1 之間的單調遞減函式 I(p_i) 都可以作為資訊的度量。此外,還有另外一個關鍵的屬性就是獨立事件的可加性;兩次連續硬幣拋擲的資訊應該是一次單獨拋擲的 2 倍。這對獨立變數而言是有意義的,因為在這種情況下意外性或者不可預測性會增大為之前的兩倍。形式上,對於獨立事件 x_i 和 x_j 而言,我們需要 I(p_i * p_j) = I(p_i) + I(p_j)。滿足所有這些要求的函式就是負對數,因此我們可以使用負對數表示自資訊:

640?wx_fmt=png

圖 1 所示是自資訊 I(p)。

640?wx_fmt=png

圖 1:函式 I(p) 的自資訊。小概率對應著較高的自資訊,反之亦然。

我們繼續回到簡單的硬幣拋擲實驗中。在資訊理論中,1bit(也叫做 Shannon)資訊代表一次單獨硬幣拋擲的兩種可能結果。相似地,對於兩次連續拋擲而言,就需要 4 bit 來描述 4 中可能的結果。通常,用 log_2(n)(2 的對數)bit 來描述 n 個連續的獨立隨機事件的結果,或者是自資訊。下面我們來驗證一下一次連續三次的實驗中自資訊的計算:總共有 2^3=8 種可能的結果,每種結果的概率都是 0.5^3=0.125。所以,這次實驗的自資訊就是 I(0.125)= -log_2(0.125) = 3。我們需要 3bit 來描述這些所有可能的結果,那麼,任何一次連續三次的硬幣拋擲的自資訊等於 3.0。

我們也可以計算連續隨機變數的自資訊。圖 2 展示了三種不同的概率密度函式及其對應的資訊函式。圖 2(A)所示的 Dirac delta 對應著很強的偏差,總是同一面朝上的偏畸硬幣對應著零熵。所有 p(x)= 0 的地方都對應著無限高的資訊量。然而,由於這些零概率的事件永遠不會發生,所以這只是一個假設。圖 2(B)中的高斯概率密度函式就是對那種經常同一面朝上,但不總是同一面朝上的情況的模擬。最後,圖 2(C)描述的是一個均勻分佈概率密度函式,它對應著均勻的資訊量,和我們沒有偏畸的硬幣是類似的。

640?wx_fmt=png

圖 2. [-3,3] 上的三種不同的概率密度函式及其自資訊 I(p)。(A)Dirac δ函式(完全確定);(B)μ = 0,σ = 0.5 的高斯分佈;(C)均勻分佈

到目前為止我們只討論了自資訊。在正常的硬幣實驗中,自資訊實際上都等於夏農熵,因為所有的結果都是等概率出現的。通常,夏農熵是 X 的所有可能結果的自資訊期望值:

640?wx_fmt=png

其中 b 是對數的底數。上面我們使用的是 b=2,其他常見的選擇還有 b=10,以及 e。其實這個影響不大,因為不同底數的對數之間存在一個常數的關係。我們這裡仍然假設底數為 2,所以我們將省略下面公式中的 b。

如果仔細注意的話,你可能會疑惑,當 p(x_i) = 0 的時候會發生什麼,因為這種情況下我們必須計算 0 · log(0)。事實上,我們需要計算的是一個極限:lim_(p→0) p*log(p(x_i))=0。使用洛必達法則或泰勒展開式求解的過程讀者可以查閱書籍自行完成。

當夏農熵泛化到連續域的時候,通常它指的是一種微分熵,對於連續的隨機變數 x 及其概率密度函式 p(x),它的夏農熵定義如下:

640?wx_fmt=png

我們上述三個分佈的熵分別是 0(狄拉克δ分佈),174(高斯分佈)以及 431(均勻分佈)。在我們的實驗中出現的模式是:越寬廣的分佈對應著越高的資訊熵。仔細觀察圖 2(B)和圖 2(C)有助於你的理解。儘管高斯分佈中 I(p)曲線下面的面積要遠大於均勻分佈,然而它的資訊熵要遠小於均勻分佈,因為資訊熵 I(P)是按照概率密度 p 加權的,在高斯分佈的兩側,p 接近於 0。更廣的概率密度對應著更大的資訊熵,有一個很好的比喻幫助記住這個:想象某種氣體充滿了一個儲罐。從物理學中我們可以知道,一個封閉系統中的熵會隨著時間增加,而且從來不會減少。在我們從儲罐的另一側注入氣體之後,氣體粒子的分佈會收斂於一個均勻值。低熵意味著高密度的氣體粒子聚集在某個特定的區域,而這是永遠不會自發發生的。很多氣體粒子聚集在某個小面積區域對應的還早呢故事我們的高斯概率密度函式,在狄拉克δ分佈中是一個極端粒例子,所有的氣體都被壓縮在一個無限小的區域。

交叉熵

交叉熵是一個用來比較兩個概率分佈 p 和 q 的數學工具。它和熵是類似的,我們計算 log(q) 在概率 p 下的期望,而不是反過來:

640?wx_fmt=png

在資訊理論中,這個量指的是:如果用「錯誤」的編碼方式 q(而不是 p)去編碼服從 q 分佈的事件,我們所需要的 bit 數。在機器學習中,這是一個衡量概率分佈相似性的有用工具,而且經常作為一個損失函式。因為交叉熵等於 KL 散度加上一項資訊熵,即 D_KL(p||q) = H(p, q) - H(p)。而當我們針對 Q 最小化交叉熵時,H(p) 為常量,因此它能夠被省略。交叉熵在這種情況下也就等價於 KL 散度,因為 KL 散度可以簡單地從最大似然估計推匯出來,因此下文詳細地以 GAN 為例利用 MLE 推導 KL 散度的表示式。

KL 散度

與交叉熵緊密相關,KL 散度是另一個在機器學習中用來衡量相似度的量:從 q 到 p 的 KL 散度如下:D_KL(p||q)。在貝葉斯推理中,DKL(p||q) 衡量當你修改了從先驗分佈 q 到後驗分佈 p 的信念之後帶來的資訊增益,或者換句話說,就是用後驗分佈 q 來近似先驗分佈 p 的時候造成的資訊損失。例如,在訓練一個變分自編碼器的隱藏空間表徵時就使用了 KL 散度。KL 散度可以用熵和交叉熵表示:

640?wx_fmt=png

交叉熵衡量的是用編碼方案 q 對服從 p 的事件進行編碼時所需 bit 數的平均值,而 KL 散度給出的是使用編碼方案 q 而不是最優編碼方案 p 時帶來的額外 bit 數。從這裡我們可以看到,在機器學習中,p 是固定的,交叉熵和 KL 散度之間只相差一個常數可加項,所以從優化的目標來考慮,二者是等價的。而從理論角度而言,考慮 KL 散度仍然是有意義的,KL 散度的一個屬性就是,當 p 和 q 相等的時候,它的值為 0。

KL 散度有很多有用的性質,最重要的是它是非負的。KL 散度為 0 當且僅當 P 和 Q 在離散型變數的情況下是相同的分佈,或者在連續型變數的情況下是 『幾乎 處處』 相同的。因為 KL 散度是非負的並且衡量的是兩個分佈之間的差異,它經常 被用作分佈之間的某種距離。然而,它並不是真的距離因為它不是對稱的:對於某 些 P 和 Q,D_KL(P||Q) 不等於 D_KL(Q||P)。這種非對稱性意味著選擇 D_KL(P||Q) 還是 D_KL(Q||P) 影響很大。

在李弘毅的講解中,KL 散度可以從極大似然估計中推導而出。若給定一個樣本資料的分佈 P_data(x) 和生成的資料分佈 P_G(x;θ),那麼 GAN 希望能找到一組引數θ使分佈 P_g(x;θ) 和 P_data(x) 之間的距離最短,也就是找到一組生成器引數而使得生成器能生成十分逼真的圖片。

現在我們可以從訓練集抽取一組真實圖片來訓練 P_G(x;θ) 分佈中的引數θ使其能逼近於真實分佈。因此,現在從 P_data(x) 中抽取 m 個真實樣本 {?^1,?^2,…,?^?},其中符號「^」代表上標,即 x 中的第 i 個樣本。對於每一個真實樣本,我們可以計算 P_G(x^i;θ),即在由θ確定的生成分佈中,x^i 樣本所出現的概率。因此,我們就可以構建似然函式:

640?wx_fmt=png

其中「∏」代表累乘、P_G(x^i;θ) 代表第 i 個樣本在生成分佈出現的概率。從該似然函式可知,我們抽取的 m 個真實樣本在 P_G(x;θ) 分佈中全部出現的概率值可以表達為 L。又因為若 P_G(x;θ) 分佈和 P_data(x) 分佈相似,那麼真實資料很可能就會出現在 P_G(x;θ) 分佈中,因此 m 個樣本都出現在 P_G(x;θ) 分佈中的概率就會十分大。

下面我們就可以最大化似然函式 L 而求得離真實分佈最近的生成分佈(即最優的引數θ):

640?wx_fmt=png

在上面的推導中,我們希望最大化似然函式 L。若對似然函式取對數,那麼累乘 ∏ 就能轉化為累加 ∑,並且這一過程並不會改變最優化的結果。因此我們可以將極大似然估計化為求令 log[P_G(x;θ)] 期望最大化的θ,而期望 E[logP_G(x;θ)] 可以展開為在 x 上的積分形式:∫P_data(x)logP_G(x;θ)dx。又因為該最優化過程是針對θ的,所以我們新增一項不含θ的積分並不影響最優化效果,即可新增 -∫P_data(x)logP_data(x)dx。新增該積分後,我們可以合併這兩個積分並構建類似 KL 散度的形式。該過程如下:

640?wx_fmt=png

這一個積分就是 KL 散度的積分形式,因此,如果我們需要求令生成分佈 P_G(x;θ) 儘可能靠近真實分佈 P_data(x) 的引數θ,那麼我們只需要求令 KL 散度最小的引數θ。此外,我們可以將 KL 散度的積分形式轉換為我們熟悉的 KL 散度表示式:

640?wx_fmt=png

在離散型變數的情況下,KL 散度衡量的是,當我們使用一種被設計成能夠使得概率分佈 Q 產生的訊息的長度最小的編碼,傳送包含由概率分佈 P 產生的符號訊息時,所需要的額外資訊量。

在機器學習中的使用

你或許疑問,這裡的熵和機器學習是如何相關的。下面我們看一下一些具體的領域。

貝葉斯學習

首先,上面描述的高斯分佈的例子是很重要的,因為在機器學習應用中,高斯分佈是一個很常見的建模選擇。機器學習的目標就是減少熵。我們希望做一些預測,而且我們必須對自己的預測比較確定。而熵正好可以用來衡量這個置信度。在貝葉斯學習中,經常假設一個先驗分佈具有較寬廣的概率密度函式,這反映了隨機變數在觀測之前的不確定性。當資料來了以後,熵會減小,並且讓後驗分佈在最可能的引數值周圍形成峰值。

決策樹學習

在決策樹的學習演算法中,一般包含了特徵選擇、決策樹的生成與決策樹的剪枝過程。決策樹的特徵選擇在於選取對訓練資料有分類能力的特徵,而通常特徵選擇的準則是資訊增益或資訊增益比。

在李航的統計學習方法中,一般熵 H(Y) 與條件熵 H(Y|X) 之差可以稱為互資訊(Mutual Information),決策樹學習中的資訊增益等價於訓練資料中類與特徵的互資訊。若給定訓練資料集 D 和特徵 A,經驗熵 H(D) 表示對資料集 D 進行分類的不確定性。而經驗條件熵 H(D|A) 表示在特徵 A 給定的條件下對資料集 D 進行分類的不確定性。那麼它們的差,即資訊增益,就表示由於特徵 A 而使得對資料集 D 的分類的不確定性減少的程度。顯然,對於資料集 D 而言,資訊增益依賴於特徵,不同的特徵往往具有不同的資訊增益。資訊增益大的特徵具有更強的分類能力。

根據資訊增益準則的特徵選擇方法是:對訓練資料集(或子集)D,計算其每個特徵的資訊增益,並比較它們的大小,選擇資訊增益最大的特徵。

因此在決策樹學習中,熵被用來構建樹。通過將資料集 S 根據可能的「最佳」屬性分成一些子資料集,從根節點開始構建決策樹,「最佳」屬性也就是能夠將得到的子資料集的熵最小化的屬性。這個過程被遞迴地重複,直到沒有更多的屬性來分割。此過程被稱為 ID3 演算法,由此可見 ID3 演算法的核心是在決策樹各個結點上應用資訊增益準則選擇特徵,遞迴地構建決策樹。

分類

不管是在二分類問題還是多分類問題中,交叉熵是 logistic 迴歸和神經網路中的標準損失函式。通常,p 是真實分佈,q 是模型描述的分佈。讓我們來看一個二分類 logistic 迴歸中的一個例子。兩個類別的標籤分別是 0 和 1,logistic 模型給每一個輸入賦予以下概率:q_(y=1) =y_hat,q_(y=0) = 1- y_hat。這個可以簡寫為 q ∈ {y_hat, 1 − y_hat}。儘管真實標籤是精確的 0 和 1,但是這裡還是寫成 p ∈ {y, 1 − y},因此不要被這個表達方式搞混。在這個標記下,每個樣本的真實值和估計分佈之間的交叉熵如下:

640?wx_fmt=png

當它被作為一個損失函式使用的時候,我們用的是 N 個樣本的交叉熵均值,

640?wx_fmt=png

結語

以上基本上來說就是機器學習中所涉及的資訊理論基礎,雖然我們並不怎麼使用資訊理論中關於訊息長度的解釋,但機器學習主要使用用資訊理論的一些關鍵思想來描述概率分佈或者量化概率分佈之間的相似性。資訊理論是我們構建損失函式隨必須要考慮的,而且它的對數形式很容易與輸出單元一般採用的指數形式相結合而提高學習的效率。此外,現代深度網路的成功與最大似然估計的流行,很大程度是因為有像資訊熵那樣對數形式的損失函式而取得極大的提升。

機器之心編譯

參與:Nurhachu Null、蔣思源

0?wx_fmt=gif

演算法數學之美微信公眾號歡迎賜稿

稿件涉及數學、物理、演算法、計算機、程式設計等相關領域
稿件一經採用,我們將奉上稿酬。

投稿郵箱:[email protected]

相關推薦

到手KL縱覽機器學習資訊理論

資訊理論與資訊熵是 AI 或機器學習中非常重要的概念,我們經常需要使用它的關鍵思想來描述概率分佈

能做什麽到如何去做,快速掌握Python編程基礎與實戰

選擇結構 好處 過濾 類和對象 最重要的 既然 項目 能力提升 for語句 摘要:Python語言的教程雖然隨處可見,但是忙於日常業務/學習的你或許:一直想要“找個時間學一點”,但是又不知道該從何下手?本文將從Python能做什麽,如何學習Python以及Python的基

、最大似然估計(相對)、KL、交叉相互關係及程式碼計算

1 熵 熵其實是資訊量的期望值,它是一個隨機變數的確定性的度量。熵越大,變數的取值越不確定,越無序。 公式: H(X)=E[I(x)]=−E[logP(x)]=-∑P(xi)logP(xi) 熵代表資訊量,基於P分佈自身的編碼長度,是最優的編碼長度。 2 ML

原始碼入手,讀懂Spring AOP面向切面程式設計

基於這兩者的實現上,這次來探索下Spring的AOP原理。雖然AOP是基於Spring容器和動態代理,但不瞭解這兩者原理也絲毫不影響理解AOP的原理實現,因為大家起碼都會用。 AOP,Aspect Oriented Programming,面向切面程式設計。在很多

函式,編輯到編譯 (下) -- 瞭解編譯 連結

上篇的連結在這裡: 函式,從編輯到編譯 (上) --帶你瞭解預編譯做了什麼 下面繼續: 2. 編譯 所謂編譯過程,就是把預處理完的檔案進行一系列詞法分析,語法分析,語義分析及優化後生產相應的彙編程式碼檔案。這一步是整個程式構建的核心部分,也是最容易出錯的一部分。 從現在開始,步驟就變得十分複雜了。 對函式來說

定義到AST及其遍歷方式,搞懂Antlr4

摘要:本文將首先介紹Antlr4 grammer的定義方式,如何通過Antlr4 grammer生成對應的AST,以及Antlr4 的兩種AST遍歷方式:Visitor方式和Listener方式。 1. Antlr4簡單介紹 Antlr4(Another Tool for Language Recogniti

機器學習基礎(五十八)—— 相對KL)與交叉

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資訊),相對KL), 交叉 三者的對比以及 吉布斯不等式

各種各樣資訊科學中,無論是通訊還是大資料處理,各種“熵”是非常重要的,因為它可以度量隨機變數不確定度,量化資訊量的大小。 資訊熵(夏農熵) 首先複習一下資訊熵(夏農熵),輔助我們對相對熵和交叉熵的理解。 對於一個隨機變數XX,其可能的取值分別為X={x

信息,交叉KL

老師 數據壓縮 定性 引入 理解 1.7 資料 衡量 我們 0 前言 上課的時候老師講到了信息論中的一些概念,看到交叉熵,這個概念經常用在機器學習中的損失函數中。 這部分知識算是機器學習的先備知識,所以查資料加深一下理解。 Reference: 信息熵是什麽,韓迪的回答:h

KL、交叉與極大似然 的友誼

ood 進行 映射 滿足 變量 rac 生成 ack kl散度 一. 信息論背景   信息論的研究內容,是對一個信號包含信息的多少進行量化。所采用的量化指標最好滿足兩個條件: (1)越不可能發生的事件包含的信息量越大; (2)獨立事件有增量的信息(就是幾個獨立事件同時發生的

Python實現計算資訊增益的

夏農熵公式: # -*- coding:utf-8 -*- import math __author__ = 'yangxin' """ 一條資訊的資訊量大小和它的不確定性有直接的關係。比如說,我們要搞清楚一件非常非常不確定的事,或是我們一無所知的事情, 就需要了解大量的資訊。相反,

交叉KL

Welcome To My Blog 老遇到交叉熵作為損失函式的情況,於是總結一下 KL散度 交叉熵從KL散度(相對熵)中引出,KL散度(Kullback-Leibler Divergence)公式為: KL散度是衡量兩個分佈之間的差異大小的,KL散度大於等於0,並且越接

交叉 vs KL

交叉熵和KL散度 資訊熵H(X)可以看做,對X中的樣本進行編碼所需要的編碼長度的期望值。 這裡可以引申出交叉熵的理解,現在有兩個分佈,真實分佈p和非真實分佈q,我們的樣本來自真實分佈p。 按照真實分佈p來編碼樣本所需的編碼長度的期望為,這就是上面說的資訊熵H( p ) 按照不真實分佈

學習+例子[轉載]

轉自:https://www.cnblogs.com/wyuzl/p/7699818.html  1.在決策樹演算法中,就是根據資訊理論的方法找到最合適的特徵來劃分資料集。在這裡,我們首先要計算所有類別的所有可能值的夏農熵,根據夏農熵來我們按照取最大資訊增益(information gain)的方

機器學習基礎】KL、交叉

  熵(entropy)、KL 散度(Kullback-Leibler (KL) divergence)和交叉熵(cross-entropy)在機器學習的很多地方會用到。比如在決策樹模型使用資訊增益來選擇一個最佳的劃分,使得熵下降最大;深度學習模型最後一層使用 softmax 啟用函式後,我們也常使用交叉熵來

KL(相對)、交叉的解析

1 前言 注意兩個名詞的區別: 相對熵:Kullback–Leibler divergence 交叉熵:cross entropy KL距離的幾個用途: ① 衡量兩個概率分佈的差異。 ② 衡量利用概率分佈Q 擬合概率分佈P 時的能量損耗,也就是說擬合以後丟失了

資訊理論知識互資訊、交叉KL

資訊理論的基本想法是一個不太可能的事件居然發生了,要比一個非常可能的事件發生,能提供更多的資訊。訊息說:‘‘今天早上太陽升起’’ 資訊量是如此之少以至於沒有必要傳送,但一條訊息說:‘‘今天早上有日食’’ 資訊量就很豐富。 我們想要通過這種基本想法來量化資訊。定義三個性質

最大似然估計,交叉,相對(KL)

在機器學習中,選擇損失函式時,通常會遇到交叉熵的概念,也就是交叉熵損失函式,那麼我們知道最小化交叉熵損失函式等價於最大化對數似然,那麼最小化交叉熵損失函式其含義是怎麼樣本的?我們知道針對分類問題,我們並不知道Y的真實分佈,因此需要通過模型來估計Y的真實分佈,以邏

交叉KL、JS

資訊量 符號 x x x的資訊量定義為

決策樹基本概念——

在學習決策樹時,最重要的步驟是構建決策樹。 其中,最重要的步驟是根據屬性劃分資料集,其中先使用哪個屬性,後使用哪個屬性,是決定決策樹構建的好壞的重要標準。 其中,使用屬性構建資料集,最重要的參考標準,就是使劃分後的資訊增益最大。 這裡就使用到一個概念:資訊熵。 熵:表示隨