# 信息熵,KL散度,交叉熵
> **写在前面**
> KL散度只是作为距离度量的一种“不完美”的手段,其被提出的出发点不是为了距离度量
## 信息熵
信息熵是==系统信息含量的量化指标==。香农描述了信息熵的三个性质:
1. 单调性,且概率越高,信息量越低
2. 非负性
3. 累加性,即多随机事件同时发生的总不确定性的度量应等于各事件自身不确定性度量之和
同时,信息熵也可以理解为系统所蕴含的信息量的期望,即系统中各事件的信息量与其发生概率乘积之和:
$$
H(X) =\sum_{x} p(x)I(x)
$$
上式中信息量$I(x)$如何计算成了关键。
根据`累加性`, $H(X)+H(Y) = H(X,Y)$, 这一点和$log()$的性质一致,即$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)矛盾,说明`累加性`并不能如此理解,如果是理解为信息量的累加,那确实是正确的。但这里明明说的是信息熵。
## 信息量
上面描述中已经提到,为$I(x)=-log(x)$
## 联合熵
上面的描述中$H(X,Y)$就是联合熵:
$$
H(X, Y)=-\sum_{y \in Y} \sum_{x \in X} p(x, y) \log p(x, y)
$$
## 条件熵
表示在已知在随机变量 $X$ 的条件下随机变量 $Y$发生的不确定性。
$$
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)
$$
## 互信息
两事件的互信息为各事件单独发生所代表的信息量之和减去两事件同时发生所代表的信息量之后剩余的信息量。
$$
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()$,不然更改后会发现互信息为联合熵的表达形式
## 互信息、联合熵、条件熵之间的关系
化简互信息的公式:
$$ \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}
$$
总的关系图:
![](https://www.hualigs.cn/image/60a9e6b02ca3d.jpg)
用集合的关系理解上面这些符号应该更容易。
## 交叉熵
感性来讲,交叉熵描述当系统中事件分布不真实时,所产生的信息熵偏差现象。例如,事件X的真实分布理论为p(x),但由于观测有噪声,观测到的分布为q(x),此时交叉熵为:
$$
H(p,q)=-\sum_{x} p(x) \log q(x)
$$
> 上式中p,q表示分布,而前面提到的X,Y为系统(或许也可以说是随机变量,随机变量不是标量,是函数)
即仅仅用观测到的信息量替换了原本的信息量。由此会带来熵的差异,即==增加==了不确定性。说增加是因为交叉熵一定大于等于原本的信息熵:
$$
\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}
$$
> 上式中转折为何成立
神经网络训练中用交叉熵作为Loss Function时, 就是为了让拟合出来的分布尽量接近真实分布。越接近,交叉熵越小,直至为0,此时拟合分布和真实分布相同。
## KL散度(相对熵)
其实公式$(7)$中已经定义了相对熵,即表述噪声分布下相对真实分布增加的不确定性:
$$
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散度本质是度量相对增加的不确定性。
因此,一些工作中将真实分布和噪声分布的位置颠倒去计算KL散度,看似有问题,实则是为了后续计算期望方便,毕竟不管p、q相对位置如何,KL散度越小,说明二者越接近,且KL散度为0时,说明二者一致。