说起熵,相信看本文的你一定听过这个概念,我们以前高中的时候在化学里学过,我们有一种大致的概念就是:熵是描述系统混乱程度的一种物理量,而且我们知道世界是向着熵增的方向进行的。那么在信息论里面,熵又是一种什么样的存在呢,为什么要引入这样抽象的一个概念,香农大佬为啥要把人搞得迷迷糊糊的?而你搞机器学习的话,肯定会遇到什么联合熵,条件熵,交叉熵。这些熵,到底是什么关系,有什么用?本文将会尽量把信息熵之间的关系给阐述清楚,让你茅塞顿开,一泻千里。
1. 信息熵
我们说信息熵,当然就不再是化学中的熵的概念了,但是他们的内在精神十分相似,信息熵是描述一个随机变量的不确定性的,如X是一个随机变量,概率分布是
p
(
x
)
=
P
(
X
=
x
)
p(x) = P(X=x)
p(x)=P(X=x),那么X的熵的定义为式子:
H
(
X
)
=
−
Σ
x
p
(
x
)
l
o
g
2
p
(
x
)
H(X) = -\Sigma_xp(x)log_2p(x)
H(X)=−Σxp(x)log2p(x)
我们看到底数是2,因此熵的单位是比特,以后可以省略底数2。
你可以试图取两个分布,A是0.2,0.8;B是0.5,0.5,算算谁的熵更大呢?很容易可以算出后者的熵更大,这是什么意思呢?我们看A和B谁的不确定性更大?当然是B了,那么它的熵算出来更大,是不是也是更合理的呢?就是基于这样的一种思想,信息熵被创造了出来。你问我有啥用?单纯的一个熵确实发挥不出来威力,我们往后看。
2. 联合熵
简而言之,我们有两个变量的联合分布
p
(
x
,
y
)
p(x,y)
p(x,y),为什不能有两个变量的联合熵呢?答案当然是可以的,那么我们如何定义的呢?
H
(
X
,
Y
)
=
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
H(X,Y)=\Sigma_x\Sigma_y p(x,y)logp(x,y)
H(X,Y)=ΣxΣyp(x,y)logp(x,y)
联合熵的含义也很简单,就是描述这样一对随机变量平均所需要的信息量。这个也很好理解。
3. 条件熵
有同学说,我知道,熵是
H
(
X
)
=
−
Σ
x
p
(
x
)
l
o
g
2
p
(
x
)
H(X) = -\Sigma_xp(x)log_2p(x)
H(X)=−Σxp(x)log2p(x)
联合熵是
H
(
X
,
Y
)
=
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
H(X,Y)=\Sigma_x\Sigma_y p(x,y)logp(x,y)
H(X,Y)=ΣxΣyp(x,y)logp(x,y)
那条件熵肯定是
H
(
X
∣
Y
)
=
Σ
x
Σ
y
p
(
x
∣
y
)
l
o
g
p
(
x
∣
y
)
H(X|Y)=\Sigma_x\Sigma_y p(x|y)logp(x|y)
H(X∣Y)=ΣxΣyp(x∣y)logp(x∣y)
那你可是太棒了,错大了,很多同学想当然,容易在这里犯错误,但是这里的条件熵不是这样的,不信我们来推导一下。
给定随机变量X时,条件熵是:
H
(
Y
∣
X
)
=
Σ
x
p
(
x
)
H
(
Y
∣
X
=
x
)
H(Y|X)=\Sigma_x p(x)H(Y|X=x)
H(Y∣X)=Σxp(x)H(Y∣X=x)
=
Σ
x
p
(
x
)
[
−
Σ
y
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
]
=\Sigma_x p(x)[-\Sigma_yp(y|x)logp(y|x)]
=Σxp(x)[−Σyp(y∣x)logp(y∣x)]
=
−
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
y
∣
x
)
=-\Sigma_x\Sigma_yp(x,y)logp(y|x)
=−ΣxΣyp(x,y)logp(y∣x)
是不是很神奇,
l
o
g
log
log前面的概率不是条件概率,是联合概率。下面可以推导联合熵和条件熵的关系!
H
(
X
,
Y
)
=
−
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
H(X,Y)=-\Sigma_x\Sigma_y p(x,y)logp(x,y)
H(X,Y)=−ΣxΣyp(x,y)logp(x,y)
=
−
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
∣
y
)
p
(
y
)
=-\Sigma_x\Sigma_y p(x,y)logp(x|y)p(y)
=−ΣxΣyp(x,y)logp(x∣y)p(y)
=
−
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
∣
y
)
−
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
y
)
=-\Sigma_x\Sigma_y p(x,y)logp(x|y)-\Sigma_x\Sigma_y p(x,y)logp(y)
=−ΣxΣyp(x,y)logp(x∣y)−ΣxΣyp(x,y)logp(y)
=
−
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
∣
y
)
−
Σ
y
p
(
y
)
l
o
g
p
(
y
)
=-\Sigma_x\Sigma_y p(x,y)logp(x|y)-\Sigma_y p(y)logp(y)
=−ΣxΣyp(x,y)logp(x∣y)−Σyp(y)logp(y)
=
H
(
X
∣
Y
)
+
H
(
Y
)
=H(X|Y)+H(Y)
=H(X∣Y)+H(Y)
有点东西!他们说多一公式少一个读者,不知道有没有属性恐惧症的同学,其实这里密密麻麻地一堆,翻来覆去的都是很基础的东西,真的不要怕这些公式。
4. 互信息
我们上面知道了,既然
H
(
X
,
Y
)
=
H
(
X
∣
Y
)
+
H
(
Y
)
H(X,Y)=H(X|Y)+H(Y)
H(X,Y)=H(X∣Y)+H(Y)
当然是对称的,又有
H
(
X
,
Y
)
=
H
(
Y
∣
Y
)
+
H
(
X
)
H(X,Y)=H(Y|Y)+H(X)
H(X,Y)=H(Y∣Y)+H(X)
相当于是一个这样的集合的关系
当然,互信息就是中间的交集部分咯,又来暴虐数学恐惧症了:
I
(
X
;
Y
)
=
H
(
X
)
−
H
(
X
∣
Y
)
I(X;Y) = H(X)-H(X|Y)
I(X;Y)=H(X)−H(X∣Y)
=
H
(
X
)
+
H
(
Y
)
−
H
(
X
,
Y
)
= H(X)+H(Y)-H(X,Y)
=H(X)+H(Y)−H(X,Y)
=
−
Σ
x
p
(
x
)
l
o
g
p
(
x
)
−
Σ
y
p
(
x
)
l
o
g
p
(
y
)
+
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
=-\Sigma_xp(x)logp(x)-\Sigma_yp(x)logp(y)+\Sigma_x\Sigma_yp(x,y)logp(x,y)
=−Σxp(x)logp(x)−Σyp(x)logp(y)+ΣxΣyp(x,y)logp(x,y)
=
Σ
x
Σ
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
p
(
x
)
p
(
y
)
=\Sigma_x\Sigma_yp(x,y)log\frac{p(x,y)}{p(x)p(y)}
=ΣxΣyp(x,y)logp(x)p(y)p(x,y)
可以看出来,这个互信息还是很合理的,
I
(
X
;
Y
)
I(X;Y)
I(X;Y)反映的就是知道了Y的值以后,X的不确定性的减少量。而
I
(
X
;
Y
)
=
I
(
Y
;
X
)
I(X;Y)= I(Y;X)
I(X;Y)=I(Y;X)就是知道了X的值以后,Y的不确定性减少量,他们是相等的。
平均互信息是非负的。自然语言处理中,通常可以通过互信息来判断两个对象之间的关系,如根据主题类别与词汇之间的互信息大小,来进行特征词抽取。
多一句嘴,大家还记得ID3决策树吗,每次分裂的节点是怎么得来的,里面是不是以信息增益作为指标来找分裂节点的?这里的信息增益,其实就是平均互信息。
5. 交叉熵
对于熟悉机器学习的同学来说,交叉熵这个词怕是听得太多次了,因为有个概念叫交叉熵损失,而交叉熵可以用来衡量估计模型与真实概率分布之间的差异情况,通俗来说还是衡量两个概率分布之间的距离嘛~~这样我们就知道,为什么交叉熵可以作为损失函数,也就是我们的优化目标存在了,因为它能衡量估计模型和真实分布之间的差异情况,而我们的目标就是估计模型和真实分布差异越小越好,因此它作为一种损失函数,是十分可行的!
假设X的分布是
p
(
x
)
p(x)
p(x),
q
(
x
)
q(x)
q(x)是用于近似
p
(
x
)
p(x)
p(x)的分布,
D
(
)
p
∣
∣
q
D()p||q
D()p∣∣q是相对熵,后面会讲。那么有:
H
(
X
,
q
)
=
H
(
X
)
+
D
(
p
∣
∣
q
)
H(X,q) = H(X)+D(p||q)
H(X,q)=H(X)+D(p∣∣q)
=
−
Σ
x
p
(
x
)
l
o
g
q
(
x
)
=-\Sigma_xp(x)logq(x)
=−Σxp(x)logq(x)
还记得逻辑回归中怎么写的吗:
C
o
s
t
=
1
N
Σ
x
[
y
l
n
y
^
+
(
1
−
y
)
l
n
(
1
−
y
^
)
]
Cost=\frac{1}{N}\Sigma_x[yln\hat y+(1-y)ln(1-\hat y)]
Cost=N1Σx[ylny^+(1−y)ln(1−y^)]
这里的
y
y
y是真实样本的分布,
y
^
\hat y
y^是我们的模型估计出来的分布,也就是用来近似真实分布的分布(好拗口)。
6. 相对熵(KL散度)
KL散度也是用来衡量两个分布之间的差异的,所以作用和交叉熵是差不多的。
定义为:
D
(
p
∣
∣
q
)
=
Σ
x
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
D(p||q) = \Sigma_xp(x)log\frac{p(x)}{q(x)}
D(p∣∣q)=Σxp(x)logq(x)p(x)
当两个随机分布的差别增加时,相对熵的期望值即增大。
7. 总结
好了,说了这么多,不知道你都搞清楚了吗,常见的一些熵,还头疼吗?头疼的话,我们再全局地看看他们之间的关系:
(注意这张图里面的
H
(
T
;
Y
)
H(T;Y)
H(T;Y)表示的是交叉熵,其余符号与上文同)
好了,大概就这些内容了,其实是要写个最大熵模型,但要先把这个概念给讲清楚,欢迎关注后面的更新。看了本文应该是大概对这些熵能有基本的认识了,如果哪里还不明白,欢迎提出,我会及时修正~~