信息熵
熵是热力学和信息学中的一个概念,在这里我主要要讨论信息熵。信息熵描述了信息的多少,也可以说是不确定性的多少。打个比方,明天太阳从东边升起,这句话的信息量为0。因为太阳一定是从东边升起的,这是概率为1的事件,没有任何的不确定性。
香农在定义信息熵的时候,考虑了如下几个性质:
- 连续性。 改变事件发生的概率,信息熵也要随之发生变化,信息熵的变化随概率分布的变化是连续的。
- 当事件发生的概率相同时,熵取得最大值,在这种情况下,事件的可能状态越多,熵越大。
- 当事件的发生是确定的,此时熵为0。
熵的计算式如下:
H(X)=∑i=1np(xi)log2(1p(xi))=−∑i=1np(xi)log2p(xi)H(X)=\sum_{i=1}^{n}p(x_i)\log_2(\frac{1}{p(x_i)})=-\sum_{i=1}^{n}p(x_i)\log_2p(x_i)H(X)=i=1∑np(xi)log2(p(xi)1)=−i=1∑np(xi)log2p(xi)
熵的大小决定了编码信息所需要的最小比特数,它也是数据无损压缩的极限。熵还有其它的定义,在满足一下条件的情况下,熵函数H的形式是唯一的:
- 对于概率序列p1,p2,...,pnp_1,p_2,...,p_np1,p2,...,pn, ∑i=1npi=1\sum_{i=1}^{n}p_i=1∑i=1npi=1, H(p1,...,pn)H(p_1,...,p_n)H(p1,...,pn)是连续的。
- 对于正整数n,H满足以下条件:H(1n,...,1n)(n项)<H(1n+1,...,1n+1)(n+1项)H(\frac{1}{n},...,\frac{1}{n})(n项)< H(\frac{1}{n+1},...,\frac{1}{n+1})(n+1项)H(n1,...,n1)(n项)<H(n+11,...,n+11)(n+1项)
- 对于正整数bib_ibi, ∑i=1kbi=n\sum_{i=1}^{k}b_i=n∑i=1kbi=n,有
H(1n,...,1n)=H(b1n,...,bkn)+∑i=1kbinH(1bi,...,1bi)H(\frac{1}{n},...,\frac{1}{n})=H(\frac{b_1}{n},...,\frac{b_k}{n})+\sum_{i=1}^{k}\frac{b_i}{n}H(\frac{1}{b_i},...,\frac{1}{b_i})H(n1,...,n1)=H(nb1,...,nbk)+i=1∑knbiH(bi1,...,bi1)
第三点表明系统的熵可以看作它的子系统的熵之和。假设我们有n个球,每个球取到的概率相等,为1n\frac{1}{n}n1, 系统的熵即为上式的左项;换个方法,我们把这n个球放进k个盒子里,每个盒子的球的数量为bib_ibi,每个球取到的概率依然为1n\frac{1}{n}n1, 球位于第i个盒子的概率为bin\frac{b_i}{n}nbi,在盒子内取到球的概率为1bi\frac{1}{b_i}bi1, 系统的熵可以看成每个盒子的熵与盒子组成的子系统的熵之和。
性质
- Hn(p1,...,pn)H_n(p_1,...,p_n)Hn(p1,...,pn)对于概率序列p1,...,pnp_1,...,p_np1,...,pn是连续和对称的。
- Hn+1(p1,...,pn,0)=Hn(p1,...,pn)H_{n+1}(p_1,...,p_n,0)=H_n(p_1,...,p_n)Hn+1(p1,...,pn,0)=Hn(p1,...,pn)
- 当概率分布为均匀分布的时候,熵取得最大值。即
Hn(p1,...,pn)≤Hn(1n,...,1n)H_n(p_1,...,p_n)\leq H_n(\frac{1}{n},..., \frac{1}{n})Hn(p1,...,pn)≤Hn(n1,...,n1)
可以用琴生不等式证明
H(X)=E[logb(1p(X))]≤logb(E[1p(X)])=logb(n)H(X)=E[\log_b(\frac{1}{p(X)})]\leq \log_b(E[\frac{1}{p(X)}])=\log_b(n)H(X)=E[logb(p(X)1)]≤logb(E[p(X)1])=logb(n)
以上是信息熵的离散形式,信息熵的连续形式如下:
h[f]=−∫−∞∞f(x)logf(x)dxh[f]=- \int _{-\infty}^{\infty} f(x)\log f(x) \mathrm{d}x h[f]=−∫−∞∞f(x)logf(x)dx
其中,f为概率密度函数。
综上,熵的计算式为H(P)=Ex∼P(−log1P(x))H(P)=E_{x \sim P}(-\log \frac{1}{P(x)})H(P)=Ex∼P(−logP(x)1)
交叉熵
在机器学习中,我们经常要用到交叉熵损失函数,交叉熵和信息熵有很深的联系。在机器学习中,我们经常要估计变量的分布,那么我们估计的概率分布和变量的真实分布到底有多接近呢?交叉熵就是用来衡量这个真实概率分布和估计的概率分布的差异的。
假设真实的概率分布为P,估计的概率分布为Q,熵的估计值为
H(Q)=Ex∼Q(log1Q(x))H(Q)=E_{x \sim Q}(\log\frac{1}{Q(x)})H(Q)=Ex∼Q(logQ(x)1)
如果Q和P非常接近的话,那么H(Q)也会接近H(P)。但是X的真实分布是P而不是Q,所以这样计算出来的期望值并不准确,于是我们用交叉熵来表示这个期望值:
H(P,Q)=Ex∼P(log1Q(x))H(P,Q)=E_{x \sim P}(\log\frac{1}{Q(x)})H(P,Q)=Ex∼P(logQ(x)1)
这和我们根据样本计算变量的方差有点类似,由于样本的均值不是变量的均值,所以前面的系数为1n−1\frac{1}{n-1}n−11而不是1n\frac{1}{n}n1。
交叉熵利用概率分布P和编码大小log1Q\log\frac{1}{Q}logQ1来计算熵的期望值。交叉熵不是对称的,一般地,H(P,Q)≠H(Q,P)H(P,Q) \ne H(Q,P)H(P,Q)̸=H(Q,P)。当P=Q,有H(P,Q)=H(P,P)=H(P)H(P,Q)=H(P,P)=H(P)H(P,Q)=H(P,P)=H(P)。
H(P,Q)≥H(P)H(P,Q)\geq H(P)H(P,Q)≥H(P)
当P=Q时,上式取等号。
在做分类任务的时候,我们经常使用交叉熵作为损失函数,进行分类的时候,训练数据一般采用的是one-hot编码。比如[0,1,0,0,0][0,1,0,0,0][0,1,0,0,0]表示样本的类别为第二类,这就是损失函数中的概率分布P。假设我们的模型最后输出的分类结果是[0.5,0.2,0.1,0.1,0.1][0.5,0.2,0.1,0.1,0.1][0.5,0.2,0.1,0.1,0.1],那么计算得到的交叉熵为
H(P,Q)=0+log10.2+0+0+0=1.609H(P,Q)=0+\log\frac{1}{0.2}+0+0+0=1.609H(P,Q)=0+log0.21+0+0+0=1.609
我用的是底数为e的对数函数,这里底数并不重要,因为对数可以用换底公式进行变形,所以相对大小不会有影响。
假设模型经过训练后,分类正确率得到提高,分类结果变为[0.1,0.9,0,0,0][0.1,0.9,0,0,0][0.1,0.9,0,0,0],再次计算交叉熵,得到
H(P,Q)=0+log10.9+0+0+0=0.105H(P,Q)=0+\log\frac{1}{0.9}+0+0+0=0.105H(P,Q)=0+log0.91+0+0+0=0.105
交叉熵的数值减少了,这和我们的直觉是相符合的,因为分类结果变好了。
KL散度
衡量两个分布之间的相似性,还可以用KL散度。KL散度的定义如下:
DKL(P∣∣Q)=H(P,Q)−H(P)=Ex∼P(−logQ(x))−Ex∼P(−logP(x))=Ex∼P(logP(x)−logQ(x))=Ex∼P(logP(x)Q(x)) \begin{aligned}
D_{KL}(P||Q)&=H(P,Q)-H(P) \\
& =E_{x\sim P}(-\log Q(x))-E_{x\sim P}(-\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}DKL(P∣∣Q)=H(P,Q)−H(P)=Ex∼P(−logQ(x))−Ex∼P(−logP(x))=Ex∼P(logP(x)−logQ(x))=Ex∼P(logQ(x)P(x))
KL散度有离散和连续两种情况:
DKL(P∣∣Q)=∑iPilogP(i)Q(i)D_{KL}(P||Q)=\sum_{i}P_i\log\frac{P(i)}{Q(i)}DKL(P∣∣Q)=i∑PilogQ(i)P(i)
DKL(P∣∣Q)=∫P(x)logP(x)Q(x)dxD_{KL}(P||Q)=\int P(x)\log\frac{P(x)}{Q(x)}\mathrm{d}xDKL(P∣∣Q)=∫P(x)logQ(x)P(x)dx
性质
- KL散度是非负的。前面我们已经提到H(P,Q)≥H(P)H(P,Q)\geq H(P)H(P,Q)≥H(P)
- KL散度是非对称的。DKL(P∣∣Q)≠DKL(Q∣∣P)D_{KL}(P||Q)\ne D_{KL}(Q||P)DKL(P∣∣Q)̸=DKL(Q∣∣P)
JS散度
JS散度也可以衡量两个概率分布的相似性。对于两个分布P,Q,它们的JS散度定义如下:
JSD(P∣∣Q)=12DKL(P∣∣M)+12DKL(Q∣∣M)JSD(P||Q)=\frac{1}{2}D_{KL}(P||M)+\frac{1}{2}D_{KL}(Q||M)JSD(P∣∣Q)=21DKL(P∣∣M)+21DKL(Q∣∣M)
其中,M=12(P+Q)M=\frac{1}{2}(P+Q)M=21(P+Q).
JS散度有以下性质:
- 对称性。 JSD(P∣∣Q)=JSD(Q∣∣P)JSD(P||Q)=JSD(Q||P)JSD(P∣∣Q)=JSD(Q∣∣P)
- 有界性。0≤JSD(P∣∣Q)≤10\leq JSD(P||Q) \leq 10≤JSD(P∣∣Q)≤1
证明如下:前面我们知道,D(P,Q)≥0D(P,Q)\geq 0D(P,Q)≥0,所以JSD(P,Q)≥0JSD(P,Q)\geq 0JSD(P,Q)≥0。
JSD(P,Q)=12DKL(P∣∣12(P+Q))+12DKL(Q∣∣12(P+Q))=12{H(P,12(P+Q))−H(P)+H(Q,12(P+Q))−H(Q)}=12{Ex∼Plog2P(x)P(x)+Q(x)+Ex∼Qlog2Q(x)P(x)+Q(x)}≤12(log2+log2)=log2\begin{aligned} JSD(P,Q)&=\frac{1}{2}D_{KL}(P||\frac{1}{2}(P+Q))+\frac{1}{2}D_{KL}(Q||\frac{1}{2}(P+Q))\\&=\frac{1}{2}\{H(P,\frac{1}{2}(P+Q))-H(P)+H(Q,\frac{1}{2}(P+Q))-H(Q)\}\\&=\frac{1}{2}\{{E_{x\sim P}\log \frac{2P(x)}{P(x)+Q(x)}}+E_{x\sim Q}\log \frac{2Q(x)}{P(x)+Q(x)}\}\\&\leq \frac{1}{2}(\log 2+\log 2)\\&=\log 2 \end{aligned}JSD(P,Q)=21DKL(P∣∣21(P+Q))+21DKL(Q∣∣21(P+Q))=21{H(P,21(P+Q))−H(P)+H(Q,21(P+Q))−H(Q)}=21{Ex∼PlogP(x)+Q(x)2P(x)+Ex∼QlogP(x)+Q(x)2Q(x)}≤21(log2+log2)=log2
如果以2为底数,则上界为1;如果以e为底,则上界为ln2\ln2ln2。
互信息
介绍互信息之前,我们先来介绍一下条件熵。条件熵的定义如下:
H(X∣Y)=∑yPY(y)[−∑xPX∣Y(x∣y)log(PX∣Y(x∣y))]=EPY(−EPX∣YlogPX∣Y)\begin{aligned}H(X|Y)&=\sum_{y}P_Y(y)[-\sum_{x}P_{X|Y}(x|y)\log(P_{X|Y}(x|y))]\\&=E_{P_Y}(-E_{P_{X|Y}} \log P_{X|Y})\end{aligned}H(X∣Y)=y∑PY(y)[−x∑PX∣Y(x∣y)log(PX∣Y(x∣y))]=EPY(−EPX∣YlogPX∣Y)
其中,PX∣Y(x∣y)=PXY(x,y)PY(y)P_{X|Y}(x|y)=\frac{P_{XY}(x,y)}{P_Y(y)}PX∣Y(x∣y)=PY(y)PXY(x,y),是给定y以后x的概率。熵描述了变量的不确定性,条件熵则描述了在给定变量y的条件下,变量x的不确定性。
互信息的定义如下:
I(X;Y)=∑x,yPXY(x,y)logPXY(x,y)PX(x)PY(y)=EPXYlogPXYPXPY\begin{aligned}I(X;Y)&=\sum_{x,y}P_{XY}(x,y)\log \frac{P_{XY}(x,y)}{P_X{(x)P_Y(y)}}\\&=E_{P_{XY}} \log \frac{P_{XY}}{P_XP_Y}\end{aligned}I(X;Y)=x,y∑PXY(x,y)logPX(x)PY(y)PXY(x,y)=EPXYlogPXPYPXY
互信息与熵的关系如下:
I(X;Y)=H(X)−H(X∣Y)I(X;Y)=H(X)-H(X|Y)I(X;Y)=H(X)−H(X∣Y)
证明如下:
I(X;Y)=∑x,yPXY(x,y)logPXY(x,y)PX(x)PY(y)=∑x,yPXY(x,y)logPXY(x,y)−∑x,yPXY(x,y)logPX(x)−∑x,yPXY(x,y)logPY(y)\begin{aligned}I(X;Y)&=\sum_{x,y}P_{XY}(x,y)\log \frac{P_{XY}(x,y)}{P_X{(x)P_Y(y)}}\\&=\sum_{x,y}P_{XY}(x,y)\log P_{XY}(x,y)-\sum_{x,y}P_{XY}(x,y)\log P_X(x)- \sum_{x,y}P_{XY}(x,y)\log P_Y(y)\end{aligned}I(X;Y)=x,y∑PXY(x,y)logPX(x)PY(y)PXY(x,y)=x,y∑PXY(x,y)logPXY(x,y)−x,y∑PXY(x,y)logPX(x)−x,y∑PXY(x,y)logPY(y)
(1)∑x,yPXY(x,y)logPX(x)=∑x[∑yPXY(x,y)logPX(x)]=∑x[logPX(x)∑yPXY(x,y)]=∑xPX(x)logPX(x)=−H(X)\begin{aligned}\sum_{x,y}P_{XY}(x,y)\log P_X(x)&=\sum_x[\sum_yP_{XY}(x,y)\log P_X(x)]\\&=\sum_x[\log P_X(x)\sum_yP_{XY}(x,y)]\\&=\sum_xP_X(x)\log P_X(x)\\&=-H(X)\end{aligned}\tag{1}x,y∑PXY(x,y)logPX(x)=x∑[y∑PXY(x,y)logPX(x)]=x∑[logPX(x)y∑PXY(x,y)]=x∑PX(x)logPX(x)=−H(X)(1)
(2)∑x,yPXY(x,y)logPXY(x,y)−∑x,yPXY(x,y)logPY(y)=∑y[∑xPXY(x,y)logPXY(x,y)]−∑y[∑xPXY(x,y)logPY(y)]=∑y[∑xPXY(x,y)logPXY(x,y)]−∑yPY(y)logPY(y)=∑yPY(y)[∑xPX∣Y(x∣y)logPXY(x,y)]−∑yPY(y)logPY(y)=∑yPY(y)[∑xPX∣Y(x∣y)logPXY(x,y)]−∑yPY(y)[∑xPX∣Y(x∣y)logPY(y)]=∑yPY(y)[∑xPX∣Y(x∣y)[logPXY(x,y)−logPY(y)]]=∑yPY(y)[∑xPX∣Y(x∣y)logPX∣Y(x∣y)]=−H(X∣Y)\begin{aligned}\sum_{x,y}P_{XY}(x,y) \log P_{XY}(x,y)-\sum_{x,y}P_{XY}(x,y)\log P_Y(y) \\ = \sum_y [\sum_x P_{XY}(x,y)\log P_{XY}(x,y)] - \sum_y[\sum_xP_{XY}(x,y)\log P_Y(y)] \\=\sum_y[\sum_xP_{XY}(x,y)\log P_{XY}(x,y)] - \sum_{y}P_Y(y)\log P_Y(y) \\=\sum_yP_Y(y)[\sum_xP_{X|Y}(x|y)\log P_{XY}(x,y)]-\sum_yP_Y(y)\log P_Y(y) \\=\sum_yP_Y(y)[\sum_xP_{X|Y}(x|y)\log P_{XY}(x,y)]-\sum_yP_Y(y) [\sum _xP_{X|Y}(x|y)\log P_Y(y)] \\=\sum_yP_Y(y)[\sum_xP_{X|Y}(x|y)[\log P_{XY}(x,y)-\log P_Y(y)]]\\ =\sum_yP_Y(y)[\sum_xP_{X|Y}(x|y)\log P_{X|Y}(x|y)]\\=-H(X|Y)\end{aligned}\tag{2}x,y∑PXY(x,y)logPXY(x,y)−x,y∑PXY(x,y)logPY(y)=y∑[x∑PXY(x,y)logPXY(x,y)]−y∑[x∑PXY(x,y)logPY(y)]=y∑[x∑PXY(x,y)logPXY(x,y)]−y∑PY(y)logPY(y)=y∑PY(y)[x∑PX∣Y(x∣y)logPXY(x,y)]−y∑PY(y)logPY(y)=y∑PY(y)[x∑PX∣Y(x∣y)logPXY(x,y)]−y∑PY(y)[x∑PX∣Y(x∣y)logPY(y)]=y∑PY(y)[x∑PX∣Y(x∣y)[logPXY(x,y)−logPY(y)]]=y∑PY(y)[x∑PX∣Y(x∣y)logPX∣Y(x∣y)]=−H(X∣Y)(2)
(2)中有个地方说明一下,∑yPY(y)logPY(y)=∑y1∗logPY(y)=∑y[logPY(y)∑xPX∣Y(x∣y)]=∑y[∑xPX∣Y(x∣y)logPX∣Y(x∣y)]\begin{aligned}\sum_y P_Y(y)\log P_Y(y)&=\sum_y 1* \log P_Y(y)\\&=\sum_y[\log P_Y(y)\sum_xP_{X|Y}(x|y)]\\&=\sum_y[\sum_x P_{X|Y}(x|y)\log P_{X|Y}(x|y)] \end{aligned}y∑PY(y)logPY(y)=y∑1∗logPY(y)=y∑[logPY(y)x∑PX∣Y(x∣y)]=y∑[x∑PX∣Y(x∣y)logPX∣Y(x∣y)]
在给定y的条件下,∑xPX∣Y(x∣y)=1\sum_x P_{X|Y}(x|y)=1∑xPX∣Y(x∣y)=1
(2)式还有一种简单的证法,
(3)∑x,yPXY(x,y)logPXY(x,y)−∑x,yPXYP(x,y)logPY(y)=∑x,yPXY(x,y)logPX∣Y(x∣y)=∑y[∑xPXY(x,y)logPX∣Y(x∣y)]=∑y[∑xPX∣Y(x∣y)PY(y)logPX∣Y(x∣y)]=∑yPY(y)[∑xPX∣Y(x∣y)logPX∣Y(x∣y)]=−H(X∣Y)\begin{aligned}\sum_{x,y}P_{XY}(x,y)\log P_{XY}(x,y)-\sum_{x,y}P_{XY}P(x,y)\log P_Y(y)\\=\sum_{x,y}P_{XY}(x,y)\log P_{X|Y}(x|y)\\=\sum_y[\sum_xP_{XY}(x,y)\log P_{X|Y}(x|y)]\\=\sum_y[\sum_x P_{X|Y}(x|y)P_Y(y)\log P_{X|Y}(x|y)] \\= \sum_{y} P_Y(y)[\sum_xP_{X|Y}(x|y)\log P_{X|Y}(x|y)]\\=-H(X|Y) \tag{3}\end{aligned}x,y∑PXY(x,y)logPXY(x,y)−x,y∑PXYP(x,y)logPY(y)=x,y∑PXY(x,y)logPX∣Y(x∣y)=y∑[x∑PXY(x,y)logPX∣Y(x∣y)]=y∑[x∑PX∣Y(x∣y)PY(y)logPX∣Y(x∣y)]=y∑PY(y)[x∑PX∣Y(x∣y)logPX∣Y(x∣y)]=−H(X∣Y)(3)
上式得证。
互信息可以表示给定Y的条件下,X的不确定性的减少量,如果互信息越大,说明X和Y的相关性越大,如果互信息为0,则X和Y相互独立。
性质
- 互信息是非负的
- 对称性 I(X;Y)=H(X)−H(X∣Y)=H(Y)−H(Y∣X)=I(Y;X)I(X;Y)=H(X)-H(X|Y)=H(Y)-H(Y|X)=I(Y;X)I(X;Y)=H(X)−H(X∣Y)=H(Y)−H(Y∣X)=I(Y;X)