信息熵、相對熵(KL散度)、交叉熵、條件熵

信息熵

  信息量和信息熵的概念最早是出現在通信理論中的,其概念最早是由信息論鼻祖香農在其經典著作《A Mathematical Theory of Communication》中提出的。如今,這些概念不僅僅是通信領域中的基礎概念,也被廣泛的應用到了其他的領域中,比如機器學習。

  信息量用來度量一個信息的多少。和人們主觀認識的信息的多少有些不同,這裏信息的多少用信息的在一個語境中出現的概率來定義,並且和獲取者對它的瞭解程度相關,概率越大認爲它的信息量越小,概率越小認爲它的信息量越大。用以下式子定義:

$I(x) = -\log p(x)$

  信息熵用來描述一個信源的不確定度,也是信源的信息量期望。它實際上是對這個信源信號進行編碼的理論上的平均最小比特數(底數爲2時)。

  式子定義如下(log 的底數可以取2、e等不同的值,只要底數相同,一般是用於相對而言的比較):

$H(X) = E_{x\sim X}[I(x)]$

$= E_{x\sim X}[-\log x]$

$\displaystyle = -\sum\limits_{x\in X}[p(x)\log p(x)]$

  《Deep Learning》的解釋是:它給出了對依據概率分佈P生成的符號進行編碼所需的比特數在平均意義上的下界。

  我的理解:信息(符號)出現概率越高,編碼理應給它少一些比特數,和有較低的信息量相符合(由上面的信息量式子算出)。信息出現概率越低,編碼時可以把它的優先級放後一些,也就是給它分配更長一些的碼,和有較高的信息量相符合。反應了人們對信息的編碼長度和信息的信息量是成正相關的,因爲它符合這樣一個事實:概率低→定義信息量高,概率低→定義編碼長度長。所以信息的信息量就可以在一定程度上度量信息需要編碼的長度,信源分佈的信息量期望(信息熵)也就度量了一個信源平均需要的編碼長度。

  當然能發出信號的信源只是信息的一個語境而已。信息熵可以在很多語境下定義,只要有信息。

  比如:一篇文章的字母的信息熵,那語境$X$就是在這篇文章下的所有字母,$x$就是每個字母,$p(x)$就是每個字母在這篇文章(而不是整個英語體系中每個字母的頻率)中出現的頻率。

  又比如:小王在盒子裏放了一個紅球。小明知道盒子裏的球色可能是紅、黑、藍三者之一,小紅知道盒子裏的球色是紅、黑二者之一。那小明在這個遊戲中所知道的信息的信息熵的語境$X$就是這三種可能性,得$H(X)  = 1.584$(以2爲底)。同理,小紅是二種可能性,得$H(X)  = 1.0$。如果這時候小王告訴他們:盒子裏放的不是黑球。對於小明來說,可能性變成了二種,$H(X)  = 1.0$,和之前相比信息熵減少了,獲得的信息量就是$1.584 - 1.0 = 0.584$。而對於小紅,$H(X)$變爲了0,獲得信息量就是1.0。

  這裏又要問了,比如對小明來說,這個0.584是哪裏來的呢?能不能正向計算呢?不清楚。。。

  另外,接近確定的分佈有較低的熵;接近均勻分佈的概率分佈有較高的熵。如圖:

  因此可以推出,在信源中出現的消息的種數一定時,這些消息出現的概率全都相等時,有信源的信息熵最大。則可以推出信息熵的範圍:

$\displaystyle 0\le H(X) \le -\sum\limits^{n}\frac{1}{n}\log(\frac{1}{n}) = \log(n)$,$n$是不同信息數

相對熵(KL散度)

  相對熵原本在信息論中度量兩個信源的信號信息量的分佈差異。

  而在機器學習中直接把其中的信息量等概念忽略了,當做損失函數,用於比較真實和預測分佈之間的差異。其實用別的式子來比較分佈之間的差異也行,因爲損失函數的目的只是爲了減小模型預測分佈和真實分佈的差異而已。只要符合分佈差異越大,函數值越大的式子應該都行。

定義

  式子定義如下(這裏用期望的形式定義,底數用e):

  $\displaystyle D_{KL}(P||Q) = E_{x\sim P}[\log \frac{P(x)}{Q(x)}] = E_{x\sim P}[\log P(x) - \log Q(x)]$

  《Deep Learning》中的解釋是:在離散型變量的情況下,KL散度衡量的是,當我們用一種被設計成能夠使得概率分佈Q產生的消息的長度最小的編碼,發送包含由概率分佈P產生的符號的消息時,所需要的額外信息量

  我的理解:

  1、用使得P分佈產生的消息長度最小的編碼,來發送P分佈產生的消息時。因爲對於某個符號$x$,它的編碼的信息量是$-\log P(x)$,它的概率是$P(x)$,所以P分佈平均每個符號要編碼的信息量就是$\sum\limits_{x\in P}[-P(x)\log P(x)] = H(P)$,就是P分佈的信息熵。

  2、用使得Q分佈產生的消息長度最小的編碼,來發送P分佈產生的消息時。因爲對於某個符號$x$,它的編碼的信息量是$-\log Q(x)$,它的概率是$P(x)$,所以P分佈平均每個符號要編碼的信息量就是$\sum\limits_{x\in P}[-P(x)\log Q(x)] = H(P, Q)$,實際上是P和Q的交叉熵(後面提到)。

  3、那麼額外信息量就是2和1之差了,所以有:

  $\displaystyle D_{KL}(P||Q) = \sum\limits_{x\in P}[-P(x)\log Q(x)] - \sum\limits_{x\in P}[-P(x)\log P(x)]$

$= E_{x\sim P}[\log P(x) - \log Q(x)] $

$\displaystyle = E_{x\sim P}[\log \frac{P(x)}{Q(x)}] $ 

  顯然當兩個分佈相同時,它們的KL散度爲0.

非對稱

  KL散度不是一個對稱量,即對於某些$P$和$Q$:$D_{KL}(P||Q) \not= D_{KL}(Q||P)$。所以使用它們來做損失函數,最小化後的效果是不一樣的。

  如下是《Deep Learning》中,使用$D_{KL}(P||Q)$ 和 $D_{KL}(Q||P)$最小化後擬合真實分佈的比較圖:

  直觀理解上圖:

  1、對於$D_{KL}(p||q)$,因爲優化的分佈是$q$而:

$\displaystyle D_{KL}(p||q) = \sum\limits_{x\in p}[-p(x)\log q(x)] - \sum\limits_{x\in p}[-p(x)\log p(x)]$

  其中後一項不變化,所以$q$需要儘可能地靠近$p$,就產生了一個平均,得到左圖。

  2、對於$D_{KL}(q||p)$,因爲優化的分佈是$q$而:

$\displaystyle D_{KL}(q||p) = \sum\limits_{x\in q}[-q(x)\log p(x)] - \sum\limits_{x\in q}[-q(x)\log q(x)]$

  其中後一項會變化,所以$q$不但需要儘可能地靠近$p$,而且$q$分佈的交叉熵也要儘可能地小,就使得$q$分佈更加不平均(概率儘可能集中到一點),得到右圖。

非負

  由Jenson不等式可證明KL散度非負,首先引出Jenson不等式:

  令非負函數$f(x)$,有:

$\displaystyle\int_{-\infty}^{\infty}f(x) dx = 1$

  如果$g(x)$是任意可測函數,並且$\varphi(x)$爲下凸函數,那麼有Jenson不等式如下:

$\displaystyle\varphi(\int_{-\infty}^{\infty}g(x)f(x)dx) \leq \int_{-\infty}^{\infty}\varphi(g(x))f(x)dx$

  轉換成期望的形式就是:

$\displaystyle\varphi(E_{x\sim f(x)}g(x)) \leq E_{x\sim f(x)}\varphi(g(x))$

  在KL散度中,由於$-\log (x)$是嚴格下凸函數,且$\int p(x)dx = 1, \int q(x)dx = 1$,所以有:

$\displaystyle D_{KL}(p||q) = - \int p(x)\log \frac{q(x)}{p(x)}dx$

$\displaystyle \leq -ln\int p(x)\frac{q(x)}{p(x)}dx$

$\displaystyle = -ln\int q(x)dx = - ln1 = 0$ 

JS散度

  JS散度同樣度量兩個概率分佈的相似度,是基於KL散度的變體,解決了KL散度非對稱的問題。JS散度是對稱的,取值是0到1之間。定義如下:

$\displaystyle D_{JS}(P_1||P_2) = \frac{1}{2}D_{KL}(P_1||\frac{P_1+P_2}{2}) +  \frac{1}{2}D_{KL}(P_2||\frac{P_1+P_2}{2}) $

交叉熵

   如上面提到過,交叉熵式子定義:

$H(P, Q) = -E_{x\sim P(x)}\log Q(x)$

  由上面可知,假如$P$是真實分佈,當使用$D_{KL}(P||Q)$作爲損失函數時,因爲只含$P$的那一項並不會隨着擬合分佈$Q$的改變而改變。所以這時候損失函數可以使用$H(P, Q)$來代替簡化

  另外,由於$H(P, Q) = D_{KL}(P||Q) + H(P)$,可看出$H(P, Q)$非負且比H(P)大。

條件熵

  爲了便於表達,和前面的交叉熵、相對熵等不太一樣,條件熵$H(Y|X)$中的$X$和$Y$並不是分佈,而是隨機變量。$H(Y|X)$表示在已知隨機變量 $X$的條件下隨機變量 $Y$的不確定性。注意,這裏的$X$並不是某個確定值,而是隨機變量,所以在計算熵的時候要對所有$H(Y|X=x)$進行求和。所以條件熵定義如下:

$H(Y|X)=\displaystyle\sum\limits_{x}P(X=x)H(Y|X=x)$

$\displaystyle=\sum\limits_{x} P(X=x)\sum\limits_{y}P(Y=y|X=x)\log \frac{1}{P(Y=y|X=x)}$
$\displaystyle=-\sum\limits_{x} \sum\limits_{y}P(X=x)P(Y=y|X=x)\log P(Y=y|X=x)$
$\displaystyle=- \sum\limits_{x,y}P(Y=y,X=x)\log P(Y=y|X=x)$

  實際上定義的就是在所有$X$的條件下,$Y$的混亂度的平均值

 

參考資料

  1. 信息量和信息熵的理解

  2. 詳解機器學習中的熵、條件熵、相對熵和交叉熵

  3. 《Deep Learning》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章