一、信息量
对于一个离散性总体
X
X
X,随机抽取得到的样本值为
x
x
x,该样本值向我们传递的信息量定义为:
I
(
x
)
=
−
l
o
g
p
(
x
)
I(x)=-log\ p(x)
I(x)=−log p(x)
p
(
x
)
p(x)
p(x)为取得样本值
x
x
x的概率,根据总体
X
X
X的概率密度函数得到。这里的底数既可以为
e
e
e,也可以是2。底数为
e
e
e时信息量单位为奈特(nat),底数为2时信息量单位为比特(bit),这里我们统一用比特作为单位。
信息量有一个很显著的特点,便是概率越小的事件发生,所蕴含的信息量越大。比如太阳从东边升起,这件事的发生概率无限接近于1,从中并不能获得什么信息。但哪天你看到太阳从西边升起了,这种小概率事件发生所蕴含的信息量就很大,说不定这意味着地球倒着转了或者自己的眼睛出毛病了。
二、信息熵
上面的信息量衡量的是单个样本,如果要衡量随机变量总体
X
X
X带来的信息量,需要用到信息熵,定义如下:
H
(
X
)
=
E
(
I
(
x
)
)
=
∑
i
=
1
n
p
(
x
i
)
I
(
x
i
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
p
(
x
i
)
H(X)=E(I(x))=\sum_{i=1}^np(x_i)I(x_i)=-\sum_{i=1}^np(x_i)log\ p(x_i)
H(X)=E(I(x))=i=1∑np(xi)I(xi)=−i=1∑np(xi)log p(xi)
可以看到信息熵实际为信息量的期望,可以理解为该随机变量所有可能发生事件所带来信息量的期望,也可以理解为一个系统的复杂度。如果一个系统的复杂度越大,可能发生事件种类越多,则带来的信息量,也即信息熵越大。比如我有一个普通的正方体骰子,掷出1、2、3、4、5、6的概率均为1/6,则该系统的信息熵为2.58bit。如果有另一个”老千骰子”,掷出1、2、3、4、5的概率为0.01,而掷出6的概率为0.95,则该系统的信息熵为0.4bit。可以看到后者大家都知道掷出的结果多半是6,结果比较确定,所以信息量的期望,也即信息熵远小于前者。
三、KL散度
KL散度用于衡量两个不同分布p、q的差异。其定义式如下:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
(
l
o
g
p
(
x
i
)
−
l
o
g
q
(
x
i
)
)
D_{KL}(p||q)=\sum_{i=1}^np(x_i) \left( log\ p(x_i) -log\ q(x_i) \right)
DKL(p∣∣q)=i=1∑np(xi)(log p(xi)−log q(xi))
可以证明KL散度具有非对称性与非负性,其值越大表明p、q两种分布差异越大。在一般的分类问题中,我们用近似分布q去逼近实际分布p,便可用KL散度来衡量二者的差异。
四、交叉熵
整理上面的KL散度定义式:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
(
l
o
g
p
(
x
i
)
−
l
o
g
q
(
x
i
)
)
=
−
H
(
p
(
x
)
)
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
q
(
x
i
)
D_{KL}(p||q)=\sum_{i=1}^np(x_i) \left( log\ p(x_i) -log\ q(x_i) \right)=-H(p(x))-\sum_{i=1}^np(x_i)log\ q(x_i)
DKL(p∣∣q)=i=1∑np(xi)(log p(xi)−log q(xi))=−H(p(x))−i=1∑np(xi)log q(xi)
定义其中
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
q
(
x
i
)
-\sum_{i=1}^np(x_i)log\ q(x_i)
−∑i=1np(xi)log q(xi)项为p、q分布的交叉熵
H
(
p
,
q
)
H(p,q)
H(p,q),这样我们还可以写出交叉熵、信息熵、KL散度之间的关系:
H
(
p
,
q
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
q
(
x
i
)
=
H
(
p
(
x
)
)
+
D
K
L
(
p
∣
∣
q
)
H(p,q)=-\sum_{i=1}^np(x_i)log\ q(x_i)=H(p(x))+D_{KL}(p||q)
H(p,q)=−i=1∑np(xi)log q(xi)=H(p(x))+DKL(p∣∣q)
对于一般的分类问题,其中
H
(
p
(
x
)
)
H(p(x))
H(p(x))为真实分布的信息熵,不会随着近似分布q的改变而改变。所以我们要使得p、q分布之间的差异最小化,也即KL散度最小,等价于已知真实分布p,要选择合适的q使得它们之间的交叉熵
H
(
p
,
q
)
H(p,q)
H(p,q)最小。
比如一个三分类问题,我们要区分猫、狗、鸡三种动物(分别令为
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3),估计得到的近似分布为抽样得到猫的概率为0.3,狗的概率为0.3,只因的概率为0.4。即
q
(
x
1
)
=
0.3
,
q
(
x
2
)
=
0.3
,
q
(
x
3
)
=
0.4
q(x_1)=0.3,\ q(x_2)=0.3,\ q(x_3)=0.4
q(x1)=0.3, q(x2)=0.3, q(x3)=0.4。但我们的每个样本实际分布只可能是三种动物中的一种,假如我们抽样得到一只鸡,则此时实际分布为
p
(
x
1
)
=
0
,
p
(
x
2
)
=
0
,
p
(
x
3
)
=
1
p(x_1)=0,\ p(x_2)=0,\ p(x_3)=1
p(x1)=0, p(x2)=0, p(x3)=1,p、q之间的交叉熵为:
H
(
p
,
q
)
=
−
∑
i
=
1
3
p
(
x
i
)
l
o
g
q
(
x
i
)
=
−
l
o
g
q
(
x
3
)
H(p,q)=-\sum_{i=1}^3p(x_i)log\ q(x_i)=-log\ q(x_3)
H(p,q)=−i=1∑3p(xi)log q(xi)=−log q(x3)
可以看到这其实就是我们在训练分类模型过程中使用到的交叉熵损失函数。