机器学习:什么是困惑度?从信息熵和交叉熵谈起

一、前言
这片博客从信息论的角度解读信息熵、交叉熵和困惑度。有助于帮助在机器学习之路上理解相应的损失函数和评价指标。要了解交叉熵和困惑度是怎么计算的,以及为什么这样计算是有效的,我们需要从基础的信息量谈起。
另外,在谈及信息量和信息熵的时候,会从数据编码和数据压缩的角度解释,所以阅读本文需具备数据结构中哈夫曼编码的先验知识,并大致了解逻辑回归。

二、信息量
什么是信息量呢?首先我们先用一句话概括,后面再进行说明。

所谓信息量是指从N个相等可能事件中选出一个事件所需要的信息度量或含量,也就是在辩识N个事件中特定的一个事件的过程中所需要提问”是或否”的最少次数.【来自百度百科】

因为信息量和信息熵系统性的定义来自信息论的创始人克劳德·香农(Claude Shannon),美国数学家、电子工程师和密码学家。他发表了发表了划时代的论文——通信的数学原理,也就是最初信息量的提出是为了用数学解决通信问题。所以下面将用一个通信、数据压缩方面的例子作为说明。

【文件压缩(编码)例子】在均匀分布的情况下,假定一个字符(或字符串)在文件中出现的概率是p,因为是均匀分布,所以可知共有1/p个不同的字符,那么在某个位置上最多可能出现1/p种情况,至少需要l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)个二进制位表示这个字符。

如何证明至少需要l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)个二进制位表示这个字符呢?

反证法: l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)个二进制位可以表示2 l o g 2 ( 1 p ) = 1 p 2^{log_2(\frac{1}{p})}=\frac{1}{p}2
log
2

(
p
1

)
=
p
1

种情况(字符),如果少于这个数量,势必有两个以上的字符使用相同的编码,在解码过程就会出错。

所以,我们至少需要l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)位信息,我们才能从1/p个字符(或字符串)中选出特定字符,所以l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)称为该特定字符的信息量。

结合百度百科的定义去理解,我们需要回答多少次是或否,才能从1/p个字符(或字符串)中选出特定字符,想想我们学过的二叉树(哈夫曼编码树),在均匀分布的情况下,树高必然是l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

),所以需要回答l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)次。所以它就是信息量。(个人觉得这样的定义是因为后面经过信息论的发展,它的应用场景不仅仅是数据压缩了,而是更广泛的应用场景,所以如此定义)。

三、信息熵
那信息熵又是什么?也先简单来概括一下:

信息熵是信息量的期望。

同样是举数据压缩的例子,刚刚我们举的是均匀分布的例子,每个字符的信息量都是l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

),我们求一下期望,就得到信息熵如下:
p ∗ l o g 2 ( 1 p ) + p ∗ l o g 2 ( 1 p ) + . . . + p ∗ l o g 2 ( 1 p ) = 1 ∗ l o g 2 ( 1 p ) p* log_2(\frac{1}{p}) + p* log_2(\frac{1}{p}) +… + p * log_2(\frac{1}{p}) = 1 * log_2(\frac{1}{p})
p∗log
2

(
p
1

)+p∗log
2

(
p
1

)+…+p∗log
2

(
p
1

)=1∗log
2

(
p
1

)

那么这个信息熵从数据压缩的角度,代表着什么?我们可以想想哈夫曼编码树,p是某个字符的出现概率,l o g 2 ( 1 p ) log_2(\frac{1}{p})log
2

(
p
1

)是它的编码长度,所以加权平均就是所有字符的平均编码长度。所以信息熵越大,平均编码长度就越长,文件能压缩的空间就越小。

四、信息熵和交叉熵有什么关系吗?
1. 交叉熵的定义
上面我们说到熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。

那信息熵和交叉熵有什么关系吗?可以明确的说,交叉熵是信息熵的一种,下面是它的定义。

现在有关于样本集的两个概率分布 p(x) 和 q(x),其中 p(x) 为真实分布, q(x) 非真实分布。如果用真实分布 p(x) 来衡量识别别一个样本所需要编码长度的期望(平均编码长度)为:
H ( p ) = ∑ x p ( x ) l o g 1 p ( x ) H(p) =\displaystyle\sum_{x}p(x)log\frac{1}{p(x)}
H(p)=
x


p(x)log
p(x)
1

如果使用非真实分布 q(x) 来表示来自真实分布 p(x) 的平均编码长度,则是:
H ( p , q ) = ∑ x p ( x ) l o g 1 q ( x ) H(p,q)=\displaystyle\sum _{x}p(x)log\frac{1}{q(x)}
H(p,q)=
x


p(x)log
q(x)
1

上述公式中,编码长度(信息量)来自于非真实分布q(x), 而概率来自于真实分布p(x),所以这样估算出的信息熵我们称之为交叉熵。

举个例子,考虑一个随机变量 x,真实分布p ( x ) = ( 1 2 , 1 4 , 1 8 , 1 8 ) p(x)= \left( \displaystyle\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{8} \right)p(x)=(
2
1

,
4
1

,
8
1

,
8
1

),非真实分布 q ( x ) = ( 1 4 , 1 4 , 1 4 , 1 4 ) q(x)=\left( \displaystyle\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4} \right)q(x)=(
4
1

,
4
1

,
4
1

,
4
1

), 则

信息熵H ( p ) = 1.75 b i t s H(p)=1.75 bitsH(p)=1.75bits(最短平均码长),

交叉熵 H ( p , q ) = 1 2 l o g 2 4 + 1 4 l o g 2 4 + 1 8 l o g 2 4 + 1 8 l o g 2 4 = 2 b i t s H(p,q)=\displaystyle\frac{1}{2}log_24+\frac{1}{4}log_24+\frac{1}{8}log_24+\frac{1}{8}log_24=2\ bitsH(p,q)=
2
1

log
2

4+
4
1

log
2

4+
8
1

log
2

4+
8
1

log
2

4=2 bits。

由此可以看出在该例子中,根据非真实分布 q(x) 得到的平均码长大于根据真实分布 p(x) 得到的平均码长。

我们知道,在逻辑回归和softmax回归中,我们常常用交叉熵来作为损失函数评价模型的性能,那为什么可以这样子干呢?下面将会结合相对熵的定义进行解释。

2. 相对熵的定义及交叉熵的作用
相对熵

相对熵 (Relative entropy),也称KL散度 (Kullback–Leibler divergence),可以用来衡量两个概率分布之间的差异。

设 p(x)、q(x) 是 离散随机变量 x 中取值的两个概率分布,则 p 对 q 的相对熵是:
D K L ( p ∣ ∣ q ) = ∑ x p ( x ) l o g p ( x ) q ( x ) = E p ( x ) l o g p ( x ) q ( x ) D_{KL}(p||q)=\displaystyle\sum_{x}p(x)log\frac{p(x)}{q(x)}=E_{p(x)}log\frac{p(x)}{q(x)}
D
KL

(p∣∣q)=
x


p(x)log
q(x)
p(x)

=E
p(x)

log
q(x)
p(x)

上面公式的意义就是求 p 与 q 之间的对数差(信息量的差)在 p 上的期望值。

下面我们将介绍相对熵的几条性质,以便从相对熵出发解释交叉熵work的原因。

如果 p(x) 和 q(x) 两个分布相同,那么相对熵等于0
D K L ( p ∣ ∣ q ) ≠ D K L ( q ∣ ∣ p ) D_{KL}(p||q)\not=D_{KL}(q||p)D
KL

(p∣∣q)


=D
KL

(q∣∣p), 即相对熵具有不对称性。
D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p||q)\geq0D
KL

(p∣∣q)≥0, 证明如下:(利用Jensen不等式)
D K L ( p ∥ q ) = ∑ x p ( x ) log ⁡ p ( x ) q ( x ) = − ∑ x p ( x ) log ⁡ q ( x ) p ( x ) = − E p ( x ) ( log ⁡ q ( x ) p ( x ) ) ≥ − log ⁡ E p ( x ) ( q ( x ) p ( x ) ) = − log ⁡ ∑ x p ( x ) q ( x ) p ( x ) = − log ⁡ ∑ x q ( x )
DKL(p∥q)=∑xp(x)logp(x)q(x)=−∑xp(x)logq(x)p(x)=−Ep(x)(logq(x)p(x))≥−logEp(x)(q(x)p(x))=−log∑xp(x)q(x)p(x)=−log∑xq(x)
DKL(p‖q)=∑xp(x)log⁡p(x)q(x)=−∑xp(x)log⁡q(x)p(x)=−Ep(x)(log⁡q(x)p(x))≥−log⁡Ep(x)(q(x)p(x))=−log⁡∑xp(x)q(x)p(x)=−log⁡∑xq(x)
D
KL

(p∥q)

=
x


p(x)log
q(x)
p(x)

=−
x


p(x)log
p(x)
q(x)

=−E
p(x)

(log
p(x)
q(x)

)
≥−logE
p(x)

(
p(x)
q(x)

)
=−log
x


p(x)
p(x)
q(x)

=−log
x


q(x)

因为∑ x p ( x ) = 1 \displaystyle\sum_{x}p(x)=1
x


p(x)=1
所以D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p||q)\geq0D
KL

(p∣∣q)≥0
交叉熵的作用

化简相对熵的公式
D K L ( p ∣ ∣ q ) = ∑ x p ( x ) l o g p ( x ) q ( x ) = ∑ x p ( x ) l o g p ( x ) − p ( x ) l o g q ( x ) D_{KL}(p||q)=\displaystyle\sum_{x}p(x)log\frac{p(x)}{q(x)}=\sum_{x}p(x)logp(x)-p(x)logq(x)
D
KL

(p∣∣q)=
x


p(x)log
q(x)
p(x)

=
x


p(x)logp(x)−p(x)logq(x)

由于熵和交叉熵的公式分别为
H ( p ) = − ∑ x p ( x ) l o g p ( x ) H(p)=-\displaystyle\sum_{x}p(x)logp(x)
H(p)=−
x


p(x)logp(x)

H ( p , q ) = ∑ x p ( x ) l o g 1 q ( x ) = − ∑ x p ( x ) l o g q ( x ) H(p,q)=\displaystyle\sum _{x}p(x)log\frac{1}{q(x)}=-\sum _{x}p(x)logq(x)
H(p,q)=
x


p(x)log
q(x)
1

=−
x


p(x)logq(x)

所以我们有
D K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) D_{KL}(p||q)=H(p,q)-H(p)
D
KL

(p∣∣q)=H(p,q)−H(p)

在介绍相对熵的时候我们谈到,相对熵可以用来衡量两个概率分布之间的差异,当我们用一个模型拟合随机变量的真实分布的时候,我们自然希望我们提出的分布和真实分布之间差异越小越好,即他们的相对熵越小越好,由于当数据给定时,其信息熵H ( p ) H(p)H(p)固定,所以我们最小化交叉熵H ( p , q ) H(p,q)H(p,q)就是最小化相对熵D K L ( p ∣ ∣ q ) D_{KL}(p||q)D
KL

(p∣∣q)

关于交叉熵也可以从另一个角度解释,根据上面相对熵的性质我们知道:
D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p||q)\geq0
D
KL

(p∣∣q)≥0

所以:
H ( p , q ) ≥ H ( p ) H(p,q)\geq H(p)
H(p,q)≥H(p)

因为我们知道交叉熵就是用非真实分布 q(x) 来表示来自真实分布 p(x) 的平均编码长度,而事实证明这个此长度会大于用真实分布 p(x) 来衡量识别别一个样本所需要平均编码长度,我们自然希望前者(即交叉熵)约接近后者(信息熵)越好,所以最终就转换成求交叉熵的最小值的问题。这就是为什么在逻辑回归和softmax回归中使用交叉熵作为损失函数求其最小值的原因。当然,交叉熵当作损失函数的原因也可以极大似然估计的角度解释(详细可以参考李宏毅老师的授课视频)

五、信息熵和困惑度的关系
这小节需要具备语言模型等概念的先验知识。

1. 困惑度的定义
困惑度(Perplexity) 是评价语言模型的一个指标,它的计算公式为:

Perplexity ( W ) = 2 H ( W ) = P ( w 1 w 2 … w N ) − 1 N = 1 P ( w 1 w 2 … w N ) N = ∏ i = 1 N 1 P ( w i ∣ w 1 … w i − 1 ) N
Perplexity (W)=2H(W)=P(w1w2…wN)−1N=1P(w1w2…wN)−−−−−−−−−−−−−√N=∏i=1N1P(wi∣w1…wi−1)−−−−−−−−−−−−−−−−−−⎷N
Perplexity (W)=2H(W)=P(w1w2…wN)−1N=1P(w1w2…wN)N=∏i=1N1P(wi∣w1…wi−1)N
Perplexity (W)

=2
H(W)

=P(w
1

w
2

…w
N

)

N
1

=
N

P(w
1

w
2

…w
N

)
1

=
N

i=1

N

P(w
i

∣w
1

…w
i−1

)
1

2. 困惑度的解释1:从信息熵的角度
可以看到公式第一行这里有H ( W ) H(W)H(W), 所以我们首先从熵的角度解释,从公式上看,困惑度其实就是交叉熵的指数形式。根据上面的理论,我们自然希望交叉熵越小越好,也就是困惑度越小越好,下面是上面一串公式的推导过程,具体就是解释H(W)为什么是交叉熵或者为什么等价于交叉熵。

我们将一个句子看作一个随机变量 W = ( w 0 , w 1 , . . . , w n ) W=(w_0,w_1,…,w_n )W=(w
0

,w
1

,…,w
n

) , 那么这个随机变量的信息熵就是:

H ( w 1 , w 2 , … , w n ) = − log ⁡ w 1 n ∈ L p ( w 1 n ) log ⁡ p ( w 1 n ) H\left(w_{1}, w_{2}, \ldots, w_{n}\right)=-\log _{w_{1}^{n} \in L} p\left(w_{1}^{n}\right) \log p\left(w_{1}^{n}\right)
H(w
1

,w
2

,…,w
n

)=−log
w
1
n

∈L

p(w
1
n

)logp(w
1
n

)

它对应的单字熵(per-word entropy),也就是熵率(entroy rate)为:
1 n H ( w 1 , w 2 , … , w n ) = − 1 n log ⁡ w 1 n ∈ L p ( w 1 n ) log ⁡ p ( w 1 n ) \frac{1}{n} H\left(w_{1}, w_{2}, \ldots, w_{n}\right)=-\frac{1}{n} \log _{w_{1}^{n} \in L} p\left(w_{1}^{n}\right) \log p\left(w_{1}^{n}\right)
n
1

H(w
1

,w
2

,…,w
n

)=−
n
1

log
w
1
n

∈L

p(w
1
n

)logp(w
1
n

)

现在我们引入交叉熵,设真实分布为p,模型拟合的非真实分布为m,那么交叉熵为:
H ( p , m ) = − 1 n ∑ W ∈ L p ( w 1 , w 2 , … , w n ) log ⁡ m ( w 1 , w 2 , … , w n ) H(p, m)=-\frac{1}{n} \sum_{W \in L} p\left(w_{1}, w_{2}, \ldots, w_{n}\right) \log m\left(w_{1}, w_{2}, \ldots, w_{n}\right)
H(p,m)=−
n
1

W∈L


p(w
1

,w
2

,…,w
n

)logm(w
1

,w
2

,…,w
n

)

这里因为训练样本已经给出,也就是p是定值,故H(p,m)可写成:
H ( p , m ) = H ( W ) = − 1 N l o g P ( w 1 w 2 . . . w n ) H(p,m)=H(W)=-\frac{1}{N}logP(w_1w_2…w_n)
H(p,m)=H(W)=−
N
1

logP(w
1

w
2

…w
n

)

上面的式子只是符号有所改变,意义相同,即P代表的分布为m

所以我们有
Perplexity ( W ) = 2 H ( W ) = P ( w 1 w 2 … w N ) − 1 N
Perplexity (W)=2H(W)=P(w1w2…wN)−1N
Perplexity (W)=2H(W)=P(w1w2…wN)−1N
Perplexity (W)

=2
H(W)

=P(w
1

w
2

…w
N

)

N
1

从编码长度的角度来理解,就可认为是在语言模型m下,等可能性的输出结果的个数。所以在给定输入的前面若干词汇即给定历史信息后,当然语言模型等可能性输出的结果个数越少越好,越少表示模型就越知道对给定的历史信息 e 1 , . . . e i − 1 {e_1,…e_{i-1}}e
1

,…e
i−1

,应该给出什么样的输出e i e_ie
i

,即 perplexity 越小,表示语言模型越好。

2. 困惑度的解释2
当然,困惑度也有另外一种表述(跟上述表述等价),这种表述跳过信息熵直接进行解释,虽然直观理解挺简单的,但可能对公式构造的由来解释不完全。

表诉2:给测试集的句子赋予较高概率值的语言模型较好,也就是说,当语言模型训练完之后,测试集中的语句的概率 P ( w 1 w 2 … w N ) P(w_{1} w_{2} \ldots w_{N})P(w
1

w
2

…w
N

) 越高越好。
Perplexity ( W ) = P ( w 1 w 2 … w N ) − 1 N = 1 P ( w 1 w 2 … w N ) N = ∏ i = 1 N 1 P ( w i ∣ w 1 … w i − 1 ) N
Perplexity (W)=P(w1w2…wN)−1N=1P(w1w2…wN)−−−−−−−−−−−−−√N=∏i=1N1P(wi∣w1…wi−1)−−−−−−−−−−−−−−−−−−⎷N
Perplexity (W)=P(w1w2…wN)−1N=1P(w1w2…wN)N=∏i=1N1P(wi∣w1…wi−1)N
Perplexity (W)

=P(w
1

w
2

…w
N

)

N
1

=
N

P(w
1

w
2

…w
N

)
1

=
N

i=1

N

P(w
i

∣w
1

…w
i−1

)
1

根据困惑度的公式可知,句子概率越大,语言模型越好,困惑度越小。所以我们说困惑度能够评价语言模型。

3. 为什么不用交叉熵而用困惑度?
笔者认为其中一个原因是计算复杂度。

交叉熵涉及N个log操作,而计算机实现log操作是通过多项式拟合来完成的,这比困惑度的N个乘法操作复杂度要高,

经试验,相同次数的log和乘法操作,前者的时间复杂度是后者的两倍多,验证了这一猜想。

当然,这其中或许也有其他原因,欢迎大家在评论中批评指正。

参考资料
【1】https://blog.csdn.net/hearthougan/article/details/76192381
【2】http://www.ruanyifeng.com/blog/2014/09/information-entropy.html
【3】https://baike.baidu.com/item/%E4%BF%A1%E6%81%AF%E9%87%8F/420401?fr=aladdin
【4】https://www.cnblogs.com/kyrieng/p/8694705.html
【5】https://www.zhihu.com/question/58482430
————————————————
版权声明:本文为CSDN博主「JacksonKim」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40765537/article/details/110086891

Follow me!

发表评论

您的电子邮箱地址不会被公开。

Previous article

LDA的python实现之模型参数训练