比較兩個機率分割的方法-- Kullback-Leibler(KL)散度介紹

2020-01-02     人工智慧遇見磐創

在這篇文章中,我們將探討一種比較兩個機率分布的方法,稱為Kullback-Leibler散度(通常簡稱為KL散度)。通常在機率和統計中,我們會用更簡單的近似分布來代替觀察到的數據或複雜的分布。KL散度幫助我們衡量在選擇近似值時損失了多少信息。

讓我們從一個問題開始我們的探索。假設我們是太空科學家,正在訪問一個遙遠的新行星,我們發現了一種咬人的蠕蟲,我們想研究它。我們發現這些蠕蟲有10顆牙齒,但由於它們不停地咀嚼,很多最後都掉了牙。在收集了許多樣本後,我們得出了每條蠕蟲牙齒數量的經驗機率分布:

雖然這些數據很好,但我們有一個小問題。我們離地球很遠,把數據寄回家很貴。我們要做的是將這些數據簡化為一個只有一兩個參數的簡單模型。一種選擇是將蠕蟲牙齒的分布表示為均勻分布。我們知道有11個可能的值,我們可以指定1/11的均勻機率

顯然,我們的數據不是均勻分布的,但是看起來也不像我們所知道的任何常見分布。我們可以嘗試的另一種選擇是使用二項分布對數據進行建模。在這種情況下,我們要做的就是估計二項分布的機率參數。我們知道如果我們有n次試驗,機率是p,那麼期望就是E[x]= np。在本例中n = 10,期望值是我們數據的平均值,計算得到5.7,因此我們對p的最佳估計為0.57。這將使我們得到一個二項分布,如下所示:

將我們的兩個模型與原始數據進行比較,我們可以看出,兩個都沒有完美匹配原始分布,但是哪個更好?

現如今有許多錯誤度量標準,但是我們主要關注的是必須使發送的信息量最少。這兩個模型都將我們的問題所需的參數量減少。最好的方法是計算分布哪個保留了我們原始數據源中最多的信息。這就是Kullback-Leibler散度的作用。

我們分布的熵

KL散度起源於資訊理論。資訊理論的主要目標是量化數據中有多少信息。資訊理論中最重要的指標稱為熵,通常表示為$H$。機率分布的熵的定義是:

如果在我們的計算中我們使用log_2,我們可以把熵解釋為「我們編碼信息所需要的最小比特數」。在這種情況下,根據我們的經驗分布,信息將是每個牙齒計數的觀察結果。根據我們觀察到的數據,我們的機率分布的熵為3.12比特。比特的數目告訴我們,在單一情況下,我們平均需要多少比特來編碼我們將觀察到的牙齒數目。

熵沒有告訴我們可以實現這種壓縮的最佳編碼方案。信息的最佳編碼是一個非常有趣的主題,但對於理解KL散度而言不是必需的。熵的關鍵在於,只要知道所需位數的理論下限,我們就可以準確地量化數據中有多少信息。現在我們可以對此進行量化,當我們將觀察到的分布替換為參數化的近似值時,我們丟失了多少信息。

使用KL散度測量丟失的信息

Kullback-Leibler散度只是對我們的熵公式的略微修改。不僅僅是有我們的機率分布p,還有上近似分布q。然後,我們查看每個log值的差異:

本質上,我們用KL散度看的是對原始分布中的數據機率與近似分布之間的對數差的期望。再說一次,如果我們考慮$log_2$,我們可以將其解釋為「我們預計有多少比特位的信息丟失」。我們可以根據期望重寫公式:

查看KL散度的更常見方法如下:

​​因為

利用KL散度,我們可以精確地計算出當我們近似一個分布與另一個分布時損失了多少信息。讓我們回到我們的數據,看看結果如何。

比較我們的近似分布

現在我們可以繼續計算兩個近似分布的KL散度。對於均勻分布,我們發現:

對於我們的二項式近似:

如我們所見,使用二項式分布所損失的信息大於使用均勻分布所損失的信息。如果我們必須選擇一個來代表我們的觀察結果,那麼最好還是堅持使用均勻分布。

KL散度不是距離

將KL散度視為距離度量可能很誘人,但是我們不能使用KL散度來測量兩個分布之間的距離。這是因為KL散度不是對稱的。例如,如果我們將觀察到的數據用作近似二項式分布的方式,我們將得到非常不同的結果:

使用KL散度進行優化

當我們選擇二項分布的值時,我們通過使用與數據匹配的期望值來選擇機率參數。但是,由於我們正在進行優化以最大程度地減少信息丟失,因此這可能並不是選擇參數的最佳方法。當我們更改此參數的值時,我們可以通過查看KL散度的變化方式來仔細檢查我們的工作。以下是這些值如何一起變化的圖表:

如你所見,我們對二項式分布的估計(由點標記)是使KL散度最小的最佳估計。

假設我們要創建一個臨時分布來對數據建模。我們將數據分為兩部分。0-5顆牙齒的機率和6-10顆牙齒的機率。然後,我們將使用單個參數來指定總機率分布的百分比落在分布的右側。例如,如果我們為參數選擇p=1,則6-10的機率分別為0.2,0-5組中的所有事物的機率均為0。:

注意:因為 log在0點未定義,我們唯一允許為零的機率是當p(xi)=0,可以推出q(xi)=0

我們如何才能找到我們組合在一起的這個奇怪模型的最佳參數?我們需要做的就是像以前一樣最大程度地減少KL差異:

我們發現在以下情況下找到的KL散度的最小值是0.338,當p = 0.47。最小KL散度的值應該看起來很熟悉:它幾乎與我們均勻分布得到的值相同!當我們用p的理想值繪製出我們的分布的值時,我們發現它幾乎是均勻的:

由於我們不會使用臨時分布來保存任何信息,因此最好使用更熟悉,更簡單的模型。

這裡的關鍵點是,我們可以將KL散度作為目標函數來找到我們可以得出的任何近似分布的最優值。儘管此示例僅優化單個參數,但我們可以輕鬆想像將這種方法擴展到具有許多參數的高維模型。

變分自動編碼器和變分貝葉斯方法

如果你熟悉神經網絡,那麼你可能已經猜到了上一節之後的去向。在最一般的意義上,神經網絡是函數近似器。這意味著你可以使用神經網絡來學習各種複雜的功能。使神經網絡學習的關鍵是使用目標函數,該函數可以告知網絡運行狀況。你可以通過最小化目標函數的損失來訓練神經網絡。

如我們所見,我們可以使用KL散度來最小化近似分布時的信息損失量。將KL散度與神經網絡相結合,可以讓我們學習非常複雜的數據近似分布。一種常見的解決方法稱為「變分自編碼器」,它學習了近似數據集中信息的最佳方法。以下連結一個很棒的教程,深入探討了構建變分自編碼器的細節:https://arxiv.org/abs/1606.05908。

更一般的是變分貝葉斯方法領域。在其他文章中,我們看到了蒙特卡洛模擬可以有效解決一系列機率問題。儘管蒙特卡洛模擬可以幫助解決貝葉斯推理所需的許多難解積分,但即使這些方法在計算上也非常昂貴。包括變分自動編碼器在內的變分貝葉斯方法使用KL散度來生成最佳近似分布,從而可以對非常困難的積分進行更有效的推斷。要了解有關變分推理的更多信息,可以查看python的Edward庫:http://edwardlib.org/。

文章來源: https://twgreatdaily.com/zh-sg/hlBkbm8BMH2_cNUgeFEn.html