当前位置:   article > 正文

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

机器学习 困惑度

一、前言

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

二、信息量

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

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

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

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

如何证明至少需要 l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1)个二进制位表示这个字符呢?

反证法: l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1)个二进制位可以表示 2 l o g 2 ( 1 p ) = 1 p 2^{log_2(\frac{1}{p})}=\frac{1}{p} 2log2(p1)=p1种情况(字符),如果少于这个数量,势必有两个以上的字符使用相同的编码,在解码过程就会出错。

所以,我们至少需要 l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1)位信息,我们才能从1/p个字符(或字符串)中选出特定字符,所以 l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1)称为该特定字符的信息量。

结合百度百科的定义去理解,我们需要回答多少次是或否,才能从1/p个字符(或字符串)中选出特定字符,想想我们学过的二叉树(哈夫曼编码树),在均匀分布的情况下,树高必然是 l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1),所以需要回答 l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1)次。所以它就是信息量。(个人觉得这样的定义是因为后面经过信息论的发展,它的应用场景不仅仅是数据压缩了,而是更广泛的应用场景,所以如此定义)。

三、信息熵

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

信息熵是信息量的期望。

同样是举数据压缩的例子,刚刚我们举的是均匀分布的例子,每个字符的信息量都是 l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1),我们求一下期望,就得到信息熵如下:
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}) plog2(p1)+plog2(p1)+...+plog2(p1)=1log2(p1)

那么这个信息熵从数据压缩的角度,代表着什么?我们可以想想哈夫曼编码树,p是某个字符的出现概率, l o g 2 ( 1 p ) log_2(\frac{1}{p}) log2(p1)是它的编码长度,所以加权平均就是所有字符的平均编码长度。所以信息熵越大,平均编码长度就越长,文件能压缩的空间就越小。

四、信息熵和交叉熵有什么关系吗?

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)=xp(x)logp(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)=xp(x)logq(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)=(21,41,81,81),非真实分布 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)=(41,41,41,41), 则

信息熵 H ( p ) = 1.75 b i t s H(p)=1.75 bits H(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\ bits H(p,q)=21log24+41log24+81log24+81log24=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)} DKL(pq)=xp(x)logq(x)p(x)=Ep(x)logq(x)p(x)

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

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

  1. 如果 p(x) 和 q(x) 两个分布相同,那么相对熵等于0
  2. D K L ( p ∣ ∣ q ) ≠ D K L ( q ∣ ∣ p ) D_{KL}(p||q)\not=D_{KL}(q||p) DKL(pq)=DKL(qp), 即相对熵具有不对称性。
  3. D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p||q)\geq0 DKL(pq)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(pq)=xp(x)logp(x)q(x)=xp(x)logq(x)p(x)=Ep(x)(logq(x)p(x))logEp(x)(q(x)p(x))=logxp(x)q(x)p(x)=logxq(x)
    DKL(pq)=xp(x)logq(x)p(x)=xp(x)logp(x)q(x)=Ep(x)(logp(x)q(x))logEp(x)(p(x)q(x))=logxp(x)p(x)q(x)=logxq(x)

    因为 ∑ x p ( x ) = 1 \displaystyle\sum_{x}p(x)=1 xp(x)=1
    所以 D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p||q)\geq0 DKL(pq)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) DKL(pq)=xp(x)logq(x)p(x)=xp(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)=xp(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)=xp(x)logq(x)1=xp(x)logq(x)

所以我们有
D K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) D_{KL}(p||q)=H(p,q)-H(p) DKL(pq)=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) DKL(pq)

关于交叉熵也可以从另一个角度解释,根据上面相对熵的性质我们知道:
D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p||q)\geq0 DKL(pq)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(w1w2wN)1N=1P(w1w2wN)N=i=1N1P(wiw1wi1)N
 Perplexity (W)=2H(W)=P(w1w2wN)N1=NP(w1w2wN)1 =Ni=1NP(wiw1wi1)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=(w0,w1,...,wn) , 那么这个随机变量的信息熵就是:

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(w1,w2,,wn)=logw1nLp(w1n)logp(w1n)

它对应的单字熵(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) n1H(w1,w2,,wn)=n1logw1nLp(w1n)logp(w1n)

现在我们引入交叉熵,设真实分布为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)=n1WLp(w1,w2,,wn)logm(w1,w2,,wn)

这里因为训练样本已经给出,也就是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)=N1logP(w1w2...wn)
上面的式子只是符号有所改变,意义相同,即P代表的分布为m

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

 Perplexity (W)=2H(W)=P(w1w2wN)1N
 Perplexity (W)=2H(W)=P(w1w2wN)N1

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

2. 困惑度的解释2

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

表诉2:给测试集的句子赋予较高概率值的语言模型较好,也就是说,当语言模型训练完之后,测试集中的语句的概率 P ( w 1 w 2 … w N ) P(w_{1} w_{2} \ldots w_{N}) P(w1w2wN) 越高越好。
 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(w1w2wN)1N=1P(w1w2wN)N=i=1N1P(wiw1wi1)N
 Perplexity (W)=P(w1w2wN)N1=NP(w1w2wN)1 =Ni=1NP(wiw1wi1)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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/937636
推荐阅读
相关标签
  

闽ICP备14008679号