交叉熵损失函数是我们在机器学习分类任务中用的最多的损失函数,但是真正了解交叉熵损失需要理解它背后的信息论知识。
信息量
一条信息的信息量和它的不确定性有着直接的关系。如果我们要搞清楚一件非常不确定的事,就需要大量信息。相反,如果我们对这件事情已经有很多了解,那么就不需要很多信息。信息奠基人香农认为“信息是用来消除随机不确定的东西”,信息量就等于不确定性的多少。
举个例子,假如在一场狼人杀游戏中,1号玩家有50%的概率是平民,有50%是狼人,我想知道1号玩家的身份,就需要询问预言家。如果预言家告诉我1号是狼人,那么他把1号身份的不确定性降低了2倍。
如果我们玩的是高端局,那么1号玩家有四种可能的身份,25%平民,25%狼人,25%女巫,25%猎人。这时候预言家告诉我1号玩家是狼人,此时他把1号的身份不确定性降低了4倍。
香农用“比特”(bit)这个概念来度量信息量,第一个例子包含的信息量为1bit,第二个例子为2bit(需要多少bit去传递信息)。我们可以发现:信息量的大小和事件发生的概率成反比。
信息量表示为:
h
(
x
)
=
−
l
o
g
2
p
(
x
)
h(x) = -log_2p(x)
h(x)=−log2p(x)
信息熵
如果可能性不一样呢?比如通过1号玩家前几轮发言,我可以判断他有75%是狼,25%是平民,这时候预言家会提供给我多少信息量呢?
如果1号是狼,那么提供了
l
o
g
1
0.75
=
0.41
log \frac{1}{0.75} = 0.41
log0.751=0.41 bit的信息,如果是平民,提供了
l
o
g
1
0.25
=
2
b
i
t
log \frac{1}{0.25} = 2 bit
log0.251=2bit信息。
我们平均从预言家得到
0.75
×
0.41
+
0.25
×
2
=
0.81
b
i
t
0.75\times0.41 + 0.25 \times2 = 0.81 bit
0.75×0.41+0.25×2=0.81bit的信息,这就是熵(Entropy):
H
(
X
)
=
∑
p
(
x
)
log
2
p
(
x
)
H(X) = \sum p(x)\log_2p(x)
H(X)=∑p(x)log2p(x)
熵描述一个随机变量的不确定性的数量,也就是我们从这个概率分布样本中得到的平均信息量。一个随机变量的熵越大,它的不确定性越大,需要更大的信息量用以确定其值。
交叉熵
上面的例子中,我通过1号选手的发言,主观上感觉他75%概率为狼,25%为平民。2号玩家觉得1号40%为狼,60%为平民。但事实上,1号选手要不为狼,要不为平民。所以怎么判断我和2号玩家谁的判断比较准?这里就引入了交叉熵(Cross entropy)。
交叉熵就是来衡量估计模型q与真实概率分布p之间差异情况。
H
(
p
,
q
)
=
∑
p
(
x
)
log
q
(
x
)
H(p,q) = \sum p(x)\log q(x)
H(p,q)=∑p(x)logq(x)
我们这里通过上帝视角看到1号为狼。
我:
1
×
log
1
/
0.75
=
0.41
b
i
t
1\times\log 1/0.75 = 0.41 bit
1×log1/0.75=0.41bit
2号:
1
×
log
1
/
0.4
=
1.32
b
i
t
1\times \log 1/0.4 = 1.32 bit
1×log1/0.4=1.32bit
交叉熵越大,p与q之间差异越大,所以可以看到,我的预测比较准。
相对熵
如果预测非常完美,即预测分布等于真实分布,那么交叉熵就是简单的熵。如果分布不同,那么交叉熵是大于等于熵的。交叉熵大于熵的这部分就是相对熵,又称KL散度(Kullback-Leibler divergence),是衡量相同时间空间里两个概率分布相对差距的测度。
D
(
p
∥
q
)
=
H
(
p
,
q
)
−
H
(
p
)
=
∑
p
(
x
)
×
log
(
1
/
q
(
x
)
)
−
∑
p
(
x
)
×
log
(
1
/
p
(
x
)
)
=
∑
p
(
x
)
log
p
(
x
)
q
(
x
)
\begin{aligned} D( p\|q) &= H(p,q) - H(p) \\&=\sum p(x) \times \log (1/q(x) ) - \sum p(x) \times \log (1/p(x) ) \\&=\sum p(x)\log \frac{p(x)}{q(x)} \end{aligned}
D(p∥q)=H(p,q)−H(p)=∑p(x)×log(1/q(x))−∑p(x)×log(1/p(x))=∑p(x)logq(x)p(x)
当两个随机分布完全相同时,即 p=q ,其相对熵为0。当两个随机分布的差别增加时,其相对熵期望值也增大。
上面的例子中,
H
(
p
)
=
0
H(p)=0
H(p)=0 ,所以交叉熵等于相对熵。
参考:
统计自然语言处理 宗成庆
deephub:熵、交叉熵和KL散度的基本概念和交叉熵损失函数的通俗介绍