信息论
交叉熵是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。
1 信息量
每件事情都有一定的发生概率,不同概率的事情发生带来的信息量是不同的。举例来说:
事件A:巴西队进入了2018世界杯决赛圈。
事件B:中国队进入了2018世界杯决赛圈。
可以知道,B事件发生的信息量是比A事件发生的信息量要大的,因为A事件的概率明显比B事件的概率大。那么我们如何来衡量不同事件发生带来的信息量呢?公式如下:
其中p(x)表示事件x发生的概率
信
息
量
=
−
l
o
g
(
p
(
x
)
)
信息量=-log(p(x))
信息量=−log(p(x))
2 熵
熵用来表示所有信息量的期望。熵衡量了预测随机变量的不确定度,不确定性越大熵越大。
公式如下:
H
(
X
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
H(X)=-\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))
H(X)=−i=1∑np(xi)log(p(xi))
其中n代表所有可能发生的事件数量。
举例来说:
序号 | 事件 | 概率p | 信息量I |
---|---|---|---|
A | 电脑正常开机 | 0.6 | − l o g ( p ( A ) ) = 0.22 -log(p(A))=0.22 −log(p(A))=0.22 |
B | 电脑无法开机 | 0.2 | − l o g ( p ( B ) ) = 0.69 -log(p(B))=0.69 −log(p(B))=0.69 |
C | 电脑爆炸 | 0.2 | − l o g ( p ( C ) ) = 0.69 -log(p(C))=0.69 −log(p(C))=0.69 |
H ( x ) = − [ p ( A ) l o g ( p ( A ) ) + p ( B ) l o g ( p ( B ) ) + p ( C ) ) l o g ( p ( C ) ) ] = 0.6 ∗ 0.22 + 0.2 ∗ 0.69 + 0.2 ∗ 0.69 = 0.408 H(x) = −[p(A)log(p(A))+p(B)log(p(B))+p(C))log(p(C))] =0.6*0.22+0.2*0.69+0.2*0.69 =0.408 H(x)=−[p(A)log(p(A))+p(B)log(p(B))+p(C))log(p(C))]=0.6∗0.22+0.2∗0.69+0.2∗0.69=0.408
3 相对熵(KL散度)
相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异
维基百科对相对熵的定义
In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.
即 使用P来描述问题所带来的信息增量,相对于Q来说。
在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]
直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。
KL散度的计算公式:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
q
(
x
i
)
)
D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log( \frac{ p(x_{i}) } {q(x_{i}) })
DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
D
K
L
D_{KL}
DKL的值越小,表示q分布和p分布越接近。
4 交叉熵
对KL散度公式变形得到:
D
K
L
(
[
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
−
∑
i
=
1
n
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}([||q) = \sum_{i=1}^{n}p(x_{i})log(p(x_{i})) - \sum_{i=1}^{n}p(x_{i})log(q(x_{i})) =-H(p(x)) + [-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))]
DKL([∣∣q)=i=1∑np(xi)log(p(xi))−i=1∑np(xi)log(q(xi))=−H(p(x))+[−i=1∑np(xi)log(q(xi))]
等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:
H
(
p
,
q
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
H(p,q) = -\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))
H(p,q)=−i=1∑np(xi)log(q(xi))
在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即
D
K
L
(
y
∣
∣
y
^
)
D_{KL}(y||\hat{y})
DKL(y∣∣y^),由于KL散度中的前一部分
−
H
(
y
)
−H(y)
−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。
下一篇将会讲解为什么要使用交叉熵作为损失函数
转自:博客