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


信息熵

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

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

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

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

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

$\begin{aligned}H(X) &= E_{x\sim X}[I(x)]\\ &= E_{x\sim X}[-\log p(x)] \displaystyle \\&= -\sum\limits_{x\in X}[p(x)\log p(x)]\end{aligned}$

  《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。

  值得一提的是,這里將信息熵與信息量概念連接了起來。實際上,系統信息熵的熵減(信息熵減少的大小)就是這個系統獲得的信息量。

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

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

$\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之差了,所以有:

$\begin{aligned}\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)] \\&= E_{x\sim P}[\log \frac{P(x)}{Q(x)}] \end{aligned}$

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

非對稱

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

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

  直觀理解上圖(其實下面的理解是錯的2020年10月12日,但我還是想不出實際原因,先不刪了):

  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$,所以有:

\begin{aligned} D_{KL}(p||q) &= - \int p(x)\log \frac{q(x)}{p(x)}dx\\ &\leq -\log\int p(x)\frac{q(x)}{p(x)}dx\\ &= -\log\int q(x)dx = - \log 1 = 0 \end{aligned}

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)$進行求和。所以條件熵定義如下:

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

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

互信息

  互信息用來度量兩個隨機變量之間的相互依賴程度,或者說度量能從一個隨機變量中獲取的另一個隨機變量的信息量。又或者直觀地理解為,當一個隨機變量已知時,另一個隨機變量的不確定性的減少程度。比如:

  1、明天是否下雨的信息熵。

  2、在知道今天是否有晚霞的情況下,明天是否下雨的信息熵。

  這二者信息熵之差就是明天下雨與今天的晚霞這兩個變量之間的依賴程度。如果把明天是否下雨設為$X$,今天是否有晚霞設為$Y$,那么二者的互信息定義如下:

\begin{aligned} I(X;Y) &= H(X) - H(X|Y)\\ & = -\sum\limits_{x\in \mathbb{X}}P(x)\log P(x) - \sum\limits_{y\in \mathbb{Y}}P(y)H(X|y)\\ & = -\sum\limits_{x\in \mathbb{X}}P(x)\log P(x) + \sum\limits_{y\in \mathbb{Y}}P(y)\sum\limits_{x\in\mathbb{X}}P(x|y)\log P(x|y)\\ & = -\sum\limits_{x\in \mathbb{X}}P(x)\log P(x) + \sum\limits_{y\in \mathbb{Y}}\sum\limits_{x\in\mathbb{X}}P(x,y)\left[\log P(x,y) - \log(y)\right]\\ & = -\sum\limits_{x\in \mathbb{X}}P(x)\log P(x) + \sum\limits_{y\in \mathbb{Y}}\sum\limits_{x\in\mathbb{X}}P(x,y)\log P(x,y) - \sum\limits_{y\in \mathbb{Y}}P(y)\log P(y)      \\&= H(X)-H(X,Y)+H(Y)     \\ & = H(Y) - H(Y|X) \end{aligned}

  從倒數二式可以看出互信息是兩個熵之和減去它們的聯合熵,是對稱的,所以互信息值也等於$Y$的信息熵減去$X$和$Y$的條件熵。

  實際上,我們可以把互信息直觀理解為:當一個系統已知時,另一個系統的不確定程度的減少量。我們又可以聯想到前面提到的信息量的減少,信息量的減少是基於某個信息的輸入,系統不確定程度的減少量,用於衡量信息的價值。而互信息則是用於衡量兩個系統之間的相關性。下圖是各個量的關系圖:

聯合熵

  聯合熵也是用隨機變量而不是分布來表示,定義如下:

\begin{aligned} H(X,Y) = -\sum\limits_x\sum\limits_yP(x,y)\log_2P(x,y) \end{aligned}

  衡量隨機變量$X$和隨機變量$Y$的聯合概率密度的信息熵大小。

參考資料

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

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

  3. 《Deep Learning》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM