KL散度(KL divergence)
全稱:Kullback-Leibler Divergence。
用途:比較兩個概率分布的接近程度。
在統計應用中,我們經常需要用一個簡單的,近似的概率分布 f * 來描述。
觀察數據 D 或者另一個復雜的概率分布 f 。這個時候,我們需要一個量來衡量我們選擇的近似分布 f * 相比原分布 f 究竟損失了多少信息量,這就是KL散度起作用的地方。
熵(entropy)
想要考察信息量的損失,就要先確定一個描述信息量的量綱。
在信息論這門學科中,一個很重要的目標就是量化描述數據中含有多少信息。
為此,提出了熵的概念,記作 H 。
一個概率分布所對應的熵表達如下:
如果我們使用 log 2 作為底,熵可以被理解為:我們編碼所有信息所需要的最小位數(minimum numbers of bits)。
需要注意的是:通過計算熵,我們可以知道信息編碼需要的最小位數,卻不能確定最佳的數據壓縮策略。怎樣選擇最優數據壓縮策略,使得數據存儲位數與熵計算的位數相同,達到最優壓縮,是另一個龐大的課題。
KL散度的計算
現在,我們能夠量化數據中的信息量了,就可以來衡量近似分布帶來的信息損失了。
KL散度的計算公式其實是熵計算公式的簡單變形,在原有概率分布 p 上,加入我們的近似概率分布 q ,計算他們的每個取值對應對數的差:

換句話說,KL散度計算的就是數據的原分布與近似分布的概率的對數差的期望值。
在對數以2為底時, log 2 ,可以理解為“我們損失了多少位的信息”。
寫成期望形式:
更常見的是以下形式:
現在,我們就可以使用KL散度衡量我們選擇的近似分布與數據原分布有多大差異了。
散度不是距離
因為KL散度不具有交換性,所以不能理解為“距離”的概念,衡量的並不是兩個分布在空間中的遠近,更准確的理解還是衡量一個分布相比另一個分布的信息損失(infomation lost)。
使用KL散度進行優化
通過不斷改變預估分布的參數,我們可以得到不同的KL散度的值。
在某個變化范圍內,KL散度取到最小值的時候,對應的參數是我們想要的最優參數。
這就是使用KL散度優化的過程。
神經網絡進行的工作很大程度上就是“函數的近似”(function approximators)。
因此我們可以使用神經網絡學習很多復雜函數,學習過程的關鍵就是設定一個目標函數來衡量學習效果。
也就是通過最小化目標函數的損失來訓練網絡(minimizing the loss of the objective function)。
而KL散度可以作為正則化項(regularization term)加入損失函數之中,即使用KL散度來最小化我們近似分布時的信息損失,讓我們的網絡可以學習很多復雜的分布。
一個典型應用是VAE(變分自動編碼)。
