机器学习方法——通过实例简单推导信息熵


概要

今天在机器学习中碰巧接触到了信息熵这个词汇,搜索之后发现网上的描述都过于晦涩难懂,所幸在观看了几个相关视频后还算是有所理解,现在我来用不那么“机器学习”的大白话来记录一下信息熵到底是什么。


1. 对数的引入——信息量

要了解什么是信息熵,我们先通过几个例子来做一个初步的分析:

  • 假设我有一枚硬币,抛起后用手遮挡住,这时手掌下的硬币可能是正面朝上也可能是反面朝上,只有当我把手掌拿开时你才能知道的硬币到底是那一面在上;
  • 再假设我有四张不同花色的扑克牌,你从中随便抽一张牌,它可能是黑桃、梅花、方块、红心,但当扑克牌被翻面时,它的花色便被确定了下来;

当你与我面对面时,这些等可能事件的结果可以直观的被你观察到,但假如我与你在两间不同的房间里,彼此之间只能通过电报通信,那么需要如何传播这个结果呢?

  • 对于硬币,我们将电报的长波看做1、短波看做0,那么用1来表示正面,0来表示反面,只需要一个电位信号便可以传达这个结果;
  • 对于扑克牌,同理我们分别用00、01、10、11来表示四种花色,那么这时我们需要两个电位信号来进行结果的传输;

再扩展一下:

  • 假设我们在玩一个幸运大转盘的游戏,上面一共对应八种不同的奖品,转动一次转盘共有八种情况,这时如果我们需要传播这次结果,则需要用到:000、001、010、011、100、101、110、111这八个组合,此时我们则需要三个电位信号。

现在我们分析一下:

  • 当我们需要传递两种结果时,需要1个信号,信息量是: l o g 2 ( 2 ) = 1 log_2(2)=1 log2(2)=1
  • 当我们需要传递四种结果时,需要2个信号,信息量是: l o g 2 ( 4 ) = 2 log_2(4)=2 log2(4)=2
  • 当我们需要传递八种结果时,需要3个信号,信息量是: l o g 2 ( 8 ) = 3 log_2(8)=3 log2(8)=3

将其转换为计算机领域的说法,即分别用1bit、2bit、3bit即可传输这些结果。


2. 公式的推导——信息熵

当我们知道了可以用对数来求解信息量后,我们再来下面这个问题:

  • 对于一个均匀的六面体骰子,我们想将掷一次的结果发送出去,需要多少多少个信号量,即多少bit的数据?
    同理: l o g 2 ( 6 ) ≈ 2.58 log_2(6)\approx2.58 log2(6)2.58

结合上文我们可以发现,当等可能事件的数量越多,由于结果的不确定性增大,传递所需的信息量也就随之增多;
我们再来观察下面这两个公式:

  • 波尔兹曼熵( Ω \Omega Ω为微观态数量): S ∝ l n Ω S \propto ln \Omega SlnΩ
  • 信息量(N为等可能事件数量): l o g 2 N log_2N log2N

可以发现二者是具有相似性的,既然热力学中S被称作“熵”,那么是否同理也可将信息量视为一种“信息熵”?
当然还不能,我们再往下看:

  • 这次我们有一枚质地不均的硬币,其正面由于工艺原因更加重,这导致了硬币的正面与反面变为了不等可能的情况,我们假设正面朝上的概率为0.8,反面朝上的概率为0.2。

这时你突然发现,我们刚才一直在讨论的都是等可能情况,但是现实生活中大部分事件就如同这枚硬币,各种情况并非是等可能的,这时我们如何计算其信息量?我们可以做这样的尝试:

  • 我们把一件事情发生的概率视为在N个球中随机模出一个球,通过这种方式将概率转化为等可能事件,那么这样得到的等可能事件数量为: N = 1 p N=\frac{1}{p} N=p1
  • 由此,上面问题中正面朝上概率为0.8可以看做在 1 0.8 = 1.25 \frac{1}{0.8}=1.25 0.81=1.25 个球中摸出一个球的情况;反面朝上概率为0.2可以看做在 1 0.2 = 5 \frac{1}{0.2}=5 0.21=5 个球中摸出一个球的情况;

虽然1.25个球在实际工程中无法实现,但是我们可以根据假设来理解这一过程,再将这个等可能事件数代入信息量公式,便可以求得正反面的信息量:

  • l o g 2 ( 1 0.2 ) + l o g 2 ( 1 0.8 ) = l o g 2 ( 5 ) + l o g 2 ( 1.25 ) log_2(\frac{1}{0.2})+log_2(\frac{1}{0.8})=log_2(5)+log_2(1.25) log2(0.21)+log2(0.81)=log2(5)+log2(1.25)
    再将正反面的信息量分别乘以他们出现的概率,就得到了这个抛硬币事件整体的信息量:
  • 0.2 × l o g 2 ( 5 ) + 0.8 × l o g 2 ( 1.25 ) ≈ 0.72 0.2 \times log_2(5)+0.8 \times log_2(1.25)\approx0.72 0.2×log2(5)+0.8×log2(1.25)0.72

由此我们可以推出:

  • p 1 ⋅ l o g 2 ( 1 p 1 ) + p 2 ⋅ l o g 2 ( 1 p 2 ) p_1\cdot log_2(\frac{1}{p_1})+p_2\cdot log_2(\frac{1}{p_2}) p1log2(p11)+p2log2(p21)
    当这一事件有多种可能时,该式为:
  • Σ p i ⋅ l o g 2 ( 1 / p i ) \Sigma p_i\cdot log_2(1/p_i) Σpilog2(1/pi)
    对数运算转换后,我们便得到了公式:
  • H = − Σ p i ⋅ l o g 2 ( p i ) H=- \Sigma p_i\cdot log_2(p_i) H=Σpilog2(pi)

此时,我们所求得的H正是我们所说的信息熵,它相当于我们所构建的等概率摸球事件的信息量的期望值,我们再用这个公式计算一下当正反面相同时硬币的信息熵:

  • 0.5 × l o g 2 ( 2 ) + 0.5 × l o g 2 ( 2 ) = 1 0.5 \times log_2(2)+0.5 \times log_2(2)=1 0.5×log2(2)+0.5×log2(2)=1
    这样计算过于繁杂,其实这种等可能事件的信息量就是信息熵的特例,对此我们可以直接用:
  • l o g 2 ( 2 ) = 1 log_2(2)=1 log2(2)=1

比较后我们会发现,正反面概率不等的情况下信息熵变小了!也就是说理论上我们可以使用更少的信息量(0.72bit)来传送硬币抛掷后的结果,当然实际工程中我们依然要花费1个信号量来传送这一结果;


3. 实际的应用——压缩极限值

通过上述对于信息熵的研究,我们可以发现:

信息熵指出了数据传输需要的最少信息量的极限:

  • 例如在不规则硬币中我们计算得到传输抛掷结果最少只需要0.72bit的数据,但碍于实际我们只能使用1bit对其进行传输;
  • 而在拥有大量文字的英文文章中,如果我们计算出每个字母出现的概率,并且对高概率字母采用少bit位编码区分(如1、0、01、10)、低概率字母采用多bit位编码区分(如10000、00001、1101),相比于都采用一字节8bit就可以有效地减少需要传输的数据量;
  • 而如果我们想要知道这篇文章平均编码长度的极限(实际不可能低于该值),则可以利用信息熵公式 − Σ p i ⋅ l o g 2 ( p i ) - \Sigma p_i\cdot log_2(p_i) Σpilog2(pi)求得,用该信息熵乘以总字母数量即可得到文章被压缩的极限。

值得注意的是,信息熵给出的是一个极限值,实际工程中多数情况下只能做到尽可能接近该值以减少需要传输的数据量,它可以作为检测一个编码方法优劣的标准之一(同时还要考虑实用性)。
哈夫曼变长编码正是一种实用性很强,且接近压缩极限的编码方式。


4. 进一步分析——个人总结

正如热力学中熵是反应一个体系的混乱程度,信息熵也正是反应了一个事件不可确定的程度:

  • 在不规则硬币的事件中,这个硬币正面朝上的概率为0.8,大于反面朝上的概率0.2,可见其正面朝上的概率是要更高的;
  • 相比于正反面概率均为0.5的硬币,其结果相对来说更容易确定,即一个事件如果出现某一情况的概率较大,就可以减小其不确定性;
  • 这种情况表现在信息熵上就是信息熵减小;反之事件不确定性增大(例如该大概率的情况又被分为多个小概率的情况),信息熵就会增加;

其对于不确定程度的计算结果,可用于决策树的构建


关于信息熵的部分总结就到这里了,如果觉得文章看的不过瘾,想要更具体的视频介绍,可以观看视频:如何理解信息熵,本篇文章为该视频的观后笔记。


创作不易,如果看完对你有帮助可以随手点一个赞😊

如果还有需要补充完善的地方可以在评论区发表一下


转载请注明出处

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值