如何理解熵、交叉熵、KL散度、JS散度

在机器学习、深度学习中,经常听见熵(entropy)、交叉熵(cross-entropy)、KL散度( Kullback–Leibler divergence )、JS散度( Jensen-Shannon divergence )这些概念。初次听见这些概念肯定一头雾水,在很多地方都能见到对这些概念 high-level 的解释,但 high-level 的解释并不能对这些概念更深入的理解。比如熵是信息的度量,但是为什么熵可以用来作为信息的度量,则不知其缘由。接下来则由浅入深,深入理解这些概念。

编码(Codes)

在计算机中,任何信息都是用0、1来存储。所以为了将信息存储在计算机中,我们要将信息编码为 0、1串以便存储在计算机中。

假设 Bob 是一个动物爱好者,住在美国,他只谈论四种动物:dog、cat、fish、bird

为了和 Bob 进行交流,我们之间需要建立一个 code 把单词映射为 0、1 串。

这些0、1串在网络上传输需要消耗一定的带宽,所以我们希望0、1串越小越好,这样消耗的带宽就越小。如何对信息进行编码呢?

第一种方案:定长编码

发送信息时,只需要将相应的单词替换为对应的编码就行,例如:

第二种方案:变长编码

假设 Bob 非常喜欢狗,他谈论狗的频率比其它动物要高,假设谈论每个动物的概率如下所示。

为了减少带宽,一个直觉的编码方式为:对频率比较高的单词用较短的编码长度,频率比较低的单词使用较长的编码长度,这样最后得到的总长度是最小的。使用变长编码时,为了让解码唯一,可以使用哈夫曼编码来实现。一种变长编码方式为:

熵(Entropy)

以横轴表示每个单词的编码长度,纵轴表示谈论每种动物的频率。

使用定长编码时可以得到下图:

则发送一个单词所使用编码长度的期望(也可以看成图中的面积)为:
1 2 ∗ 2 + 1 4 ∗ 2 + 1 8 ∗ 2 + 1 8 ∗ 2 = 2   b i t s \frac{1}{2}*2+\frac{1}{4}*2+\frac{1}{8}*2+\frac{1}{8}*2=2\ bits 212+412+812+812=2 bits

使用变长编码时可以得到下图:

则发送一个单词所使用编码长度的期望(也可以看成图中的面积)为:
1 2 ∗ 1 + 1 4 ∗ 2 + 1 8 ∗ 3 + 1 8 ∗ 3 = 1.75   b i t s \frac{1}{2}*1+\frac{1}{4}*2+\frac{1}{8}*3+\frac{1}{8}*3=1.75\ bits 211+412+813+813=1.75 bits
使用哈夫曼编码定义的变长编码可以达到最优的期望,证明略。

所以熵可定义为:最优的平均编码长度(即期望),也即是图中的面积

如何计算熵?

长度为 1 的有 2 种编码:0、1

长度为 2 的有 4 种编码:00、01、10、11

长度为 3 的有 8 种编码:000、001、010、011、100、101、110、111

以此类推…

为了获得最优编码长度常使用变长编码,而使用变长编码时,会损失一部分编码空间。例如:使用 01 作为某一个编码时,以 01 开头的那些编码都不能用(例:010、011、0100、0110…)。在所有编码种,有 1 4 \frac{1}{4} 41 的编码以 01 开头,所以我们损失了 1 4 \frac{1}{4} 41 的编码空间。

以此类推,当我们想使用一个长度为 L L L 的编码长度时,损失了 1 2 L \frac{1}{2^L} 2L1 的编码空间。
c o s t ( L ) = 1 2 L cost(L)=\frac{1}{2^L} cost(L)=2L1

L = l o g 2 ( 1 c o s t ) = l o g 2 ( 1 2 L ) L=log_2(\frac{1}{cost})=log_2(\frac{1}{2^L}) L=log2(cost1)=log2(2L1)

同理,为了获得某个单词 x x x 的编码,花费了 p ( x ) p(x) p(x) (注: p ( x ) p(x) p(x) 为某一个单词的概率,这个概率可以看作 c o s t cost cost )。单词 x x x 的编码长度为:

L ( x ) = l o g 2 ( 1 p ( x ) ) L(x)=log_2(\frac{1}{p(x)}) L(x)=log2(p(x)1)

p p p 为单词词频的概率分布, p p p 的最优平均编码长度定义为 p p p 的 熵 H ( p ) H(p) H(p):
H ( p ) = ∑ x p ( x ) log ⁡ 2 ( 1 p ( x ) ) = − ∑ p ( x ) log ⁡ 2 ( p ( x ) ) H(p) = \sum_x p(x)\log_2\left(\frac{1}{p(x)}\right)=- \sum p(x)\log_2(p(x)) H(p)=xp(x)log2(p(x)1)=p(x)log2(p(x))

交叉熵(Cross-Entropy)

假设我还有一个朋友 Alice,她喜欢猫,她的词频概率如下图 q ( x ) q(x) q(x) 所示:

当 Alice 使用 Bod 的编码和我进行通信时,她的平均编码长度为:
1 8 ∗ 1 + 1 2 ∗ 2 + 1 4 ∗ 3 + 1 8 ∗ 3 = 2.25   b i t s \frac{1}{8}*1+\frac{1}{2}*2+\frac{1}{4}*3+\frac{1}{8}*3=2.25\ bits 811+212+413+813=2.25 bits
交叉熵可定义为:当某一个分布( 这里为 q ( x ) q(x) q(x) )使用另一个分布( 这里为 p ( x ) p(x) p(x))的最优编码长度进行编码时的平均编码长度。
H p ( q ) = ∑ x q ( x ) log ⁡ 2 ( 1 p ( x ) ) = − ∑ x q ( x ) log ⁡ 2 ( p ( x ) ) H_p(q) = \sum_x q(x)\log_2\left(\frac{1}{p(x)}\right)=-\sum_x q(x)\log_2\left(p(x)\right) Hp(q)=xq(x)log2(p(x)1)=xq(x)log2(p(x))

有四种情况:

  • Bob 使用他自己的编码 ( H ( p ) = 1.75   b i t s H(p)=1.75\ bits H(p)=1.75 bits )
  • Alice 使用 Bob 的编码 ( $Hp(q)=2.25\ bits $)
  • Alice 使用她自己的编码 ( H ( q ) = 1.75   b i t s H(q)=1.75\ bits H(q)=1.75 bits )
  • Bob 使用 Alice 的编码 ( H q ( p ) = 2.375   b i t s Hq(p)=2.375\ bits Hq(p)=2.375 bits )

可以发现: H p ( q ) ≠ H q ( p ) H_p(q) \neq H_q(p) Hp(q)=Hq(p) ,即:交叉熵并不对称

我们为什么要关注交叉熵?因为交叉熵给我们提供了一个方式来度量两个概率分布有多相同。

如果概率分布 p p p q q q 越不相似, p p p q q q 的交叉熵比 p p p 自己的熵更大,即:

同理, q q q p p p 的交叉熵比 q q q 自己的熵更大

KL散度( Kullback–Leibler divergence )

p p p q q q 的KL散度定义为:分布 p p p 使用 q q q 的最优编码进行编码时的平均编码长度( p p p q q q 的交叉熵 )与 分布 p p p 的最优平均编码长度( p p p 的熵 )的差值。
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \begin{split} …
KL散度有点像一种距离,用来度量两个分布之间的差距。如果 p p p q q q 相同,则KL散度为0。 p p p q q q 越不相同,KL散度越大。

KL散度也是不对称的。

JS散度( Jensen-Shannon divergence )

JS散度基于KL散度,是一个对称平滑版本的KL散度。

p p p q q q 的JS散度定义为:
D J S ( p ∣ ∣ q ) = 1 2 D K L ( p ∣ ∣ m ) + 1 2 D K L ( q ∣ ∣ m ) ,   w h e r e   m = 1 2 ( p + q ) D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||m)+\frac{1}{2}D_{KL}(q||m),\ where\ m=\frac{1}{2}(p+q) DJS(pq)=21DKL(pm)+21DKL(qm), where m=21(p+q)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X+Y=Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值