# 信息熵,KL散度,交叉熵
> **寫在前面**
> KL散度只是作為距離度量的一種“不完美”的手段,其被提出的出發(fā)點不是為了距離度量
## 信息熵
信息熵是==系統(tǒng)信息含量的量化指標==。香農(nóng)描述了信息熵的三個性質(zhì):
1.? 單調(diào)性,且概率越高,信息量越低
2.? 非負性
3.? 累加性,即多隨機事件同時發(fā)生的總不確定性的度量應等于各事件自身不確定性度量之和
同時,信息熵也可以理解為系統(tǒng)所蘊含的信息量的期望,即系統(tǒng)中各事件的信息量與其發(fā)生概率乘積之和:
$$
H(X) =\sum_{x} p(x)I(x)
$$
上式中信息量$I(x)$如何計算成了關鍵。
根據(jù)`累加性`, $H(X)+H(Y) = H(X,Y)$, 這一點和$log()$的性質(zhì)一致,即$log(x)+log(y)=log(xy)$。由此可以假設$I(x)=Clog(x)$,因為`非負性`,$C=-1$。然后再驗證累加性是否成立:
$$
H(X,Y) = H(X) +H(Y) \tag1
$$
> 公式$(1)$是按照`累加性`理解寫出來的,但事實上是不成立的,原因看下面推導。
其中,
$$
\begin{aligned}
H(X,Y)
&=C\sum_{(x,y)}p(x,y)log(x,y)? \\
&=C\sum_{(x,y)} p(x,y)? log(p(x \mid y)p(y) ) \\
&=C\sum_{(x,y)} p(y \mid x)p(x)log(y \mid x) +C \sum_{(x,y)} p(x \mid y)p(y)logp(x) \\
&=C\sum_{x}p(x) \sum_{y}p(y \mid x)logp(y \mid x)? +C \sum_{y} p(y) \sum_{x} p(x \mid y) log p(x) \\
&=C\sum_{x} p(x)H(Y \mid x) +C \sum_{y} p(y) \sum_{x} \frac {p(y \mid x)p(x) }{p(y)}logp(x)\\
&=H(Y \mid X) + C\sum_{x}p(x)logp(x)\sum_{y} p(y \mid x)\\
&=H(Y \mid X) + H(X)\\ \tag2
\end{aligned}
$$
對立的,$H(X,Y)=H(X \mid Y) + H(Y)$
因此,
$$
H(X)+H(Y)=2H(X,Y) -H(Y \mid X)- H(X \mid Y) \tag3
$$
這與公式(1)矛盾,說明`累加性`并不能如此理解,如果是理解為信息量的累加,那確實是正確的。但這里明明說的是信息熵。
## 信息量
上面描述中已經(jīng)提到,為$I(x)=-log(x)$
## 聯(lián)合熵
上面的描述中$H(X,Y)$就是聯(lián)合熵:
$$
H(X, Y)=-\sum_{y \in Y} \sum_{x \in X} p(x, y) \log p(x, y)
$$
## 條件熵
表示在已知在隨機變量 $X$ 的條件下隨機變量 $Y$發(fā)生的不確定性。
$$
H(Y \mid X)=\sum_{x \in X} p(x) H(Y \mid x)=-\sum_{x \in X} p(x) \sum_{y \in Y} p(y \mid x) \log p(y \mid x)
$$
## 互信息
兩事件的互信息為各事件單獨發(fā)生所代表的信息量之和減去兩事件同時發(fā)生所代表的信息量之后剩余的信息量。
$$
I(X, Y)=\sum_{y \in Y} \sum_{x \in X} p(x, y) f(x,y)
$$
其中,
$$
f(x,y)= -\log p(x)-\log p(y)-(-\log p(x, y))= \log \left(\frac{p(x, y)}{p(x) p(y)}\right)
$$
> 這里的$f()$不能寫成$I()$,不然更改后會發(fā)現(xiàn)互信息為聯(lián)合熵的表達形式
## 互信息、聯(lián)合熵、條件熵之間的關系
化簡互信息的公式:
$$ \tag{4}
\begin{aligned}
I(X, Y) &=\sum_{y \in Y} \sum_{x \in X} p(x, y) \log \frac{p(x, y)}{p(x) p(y)} \\
&=\sum_{x \in X} \sum_{y \in Y} p(x, y)(\log p(x, y)-\log p(x)-\log p(y)) \\
&=\sum_{x \in X} \sum_{y \in Y}[ p(x, y) \log p(x, y)- p(x, y) \log p(x)-p(x, y) \log p(y)] \\
&=\sum_{x \in X} \sum_{y \in Y} p(x, y) \log p(x, y)-\sum_{x \in X} p(x) \log p(x)-\sum_{x \in X} p(y) \log p(y) \\
&=H(X)+H(Y)-H(X, Y)
\end{aligned}
$$
結合公式$(3)$,也得到:
$$\tag5
I(X,Y) = H(X,Y) - H(Y \mid X)- H(X \mid Y)
$$
另外,結合公式(2),(5),得到:
$$\tag6
\begin{aligned}
H(X) - I(X,Y) &= H(X) -? H(X,Y) + H(Y \mid X)+ H(X \mid Y) \\
&= H(X) -? (H(Y \mid X) + H(X) )- H(Y \mid X)- H(X \mid Y) \\
&=H(X \mid Y)
\end{aligned}
$$
總的關系圖:

用集合的關系理解上面這些符號應該更容易。
## 交叉熵
感性來講,交叉熵描述當系統(tǒng)中事件分布不真實時,所產(chǎn)生的信息熵偏差現(xiàn)象。例如,事件X的真實分布理論為p(x),但由于觀測有噪聲,觀測到的分布為q(x),此時交叉熵為:
$$
H(p,q)=-\sum_{x} p(x) \log q(x)
$$
> 上式中p,q表示分布,而前面提到的X,Y為系統(tǒng)(或許也可以說是隨機變量,隨機變量不是標量,是函數(shù))
即僅僅用觀測到的信息量替換了原本的信息量。由此會帶來熵的差異,即==增加==了不確定性。說增加是因為交叉熵一定大于等于原本的信息熵:
$$
\begin{aligned} \tag7
H(p, q) - H(p) &= -\sum_{x} p(x) \log q(x) + \sum_{x} p(x) \log p(x) \\
&=-\sum_{x} p(x) log \frac {q(x)}{p(x)} \\
&=-E_{p(x)}\left(\log \frac{q(x)}{p(x)}\right) \\
& \geq-\log E_{p(x)}\left(\frac{q(x)}{p(x)}\right) \\
&=-\log \sum_{x} p(x) \frac{q(x)}{p(x)} \\
&=-\log \sum_{x} q(x) =-log(1)=0
\end{aligned}
$$
> 上式中轉(zhuǎn)折為何成立
神經(jīng)網(wǎng)絡訓練中用交叉熵作為Loss Function時, 就是為了讓擬合出來的分布盡量接近真實分布。越接近,交叉熵越小,直至為0,此時擬合分布和真實分布相同。
## KL散度(相對熵)
其實公式$(7)$中已經(jīng)定義了相對熵,即表述噪聲分布下相對真實分布增加的不確定性:
$$
D_{KL}(p \parallel q) = H(p, q) - H(p)? = -\sum_{x} p(x) log \frac {q(x)}{p(x)}=\sum_{x} p(x) log \frac {p(x)}{q(x)} \geq 0
$$
盡管很多工作用KL散度作為兩個分布的距離度量方法,但實際熵KL散度本地并不是用來評估二者相似程度的。
其一在于,KL散度中p、q位置交換,公式結果不相等,這違背了相對距離概念。
其二,KL散度本質(zhì)是度量相對增加的不確定性。
因此,一些工作中將真實分布和噪聲分布的位置顛倒去計算KL散度,看似有問題,實則是為了后續(xù)計算期望方便,畢竟不管p、q相對位置如何,KL散度越小,說明二者越接近,且KL散度為0時,說明二者一致。