通俗理解深度学习中的熵相关知识【信息量、熵、相对熵(KL散度)、交叉熵】

转自https://zhuanlan.zhihu.com/p/647312079

通俗理解:一个事件从不确定变为确定的难度有多大

往往某件事情发生概率越低,信息量越大,从不确定变为确定的难度越大

ex:【中国队想要在世界杯夺冠】这一事件发生概率极极极低,信息量非常大,想要实现即“从不确定变为确定”的难度也会非常大。

信息量公式定义: h(x)=−\log_2{p(x)}

  • 为什么有个负号?

如上所述,当某件事情发生概率越低时,代表其信息量越大,加上负号后 𝑃(𝑋𝑖) 越小时, −𝑙𝑜𝑔2(𝑃(𝑋𝑖)) 越大,正好能使公式满足这一性质

  • 为什么用 𝑙𝑜𝑔2 ?

具体为什么用log可以看[1],而至于以2为底是考虑到计算机二进制的特性

通俗理解:和信息量类似,不过熵是用于衡量一个系统从不确定变为确定的难度有多大

熵的本质用一句话概括:用一个数来概括一个概率分布中的不确定性

熵的定义式:

𝐻(𝑋)=−∑𝑖𝑃(𝑋𝑖)𝑙𝑜𝑔2𝑃(𝑋𝑖) 【公式一】

 

  • 为什么需要对信息量−𝑙𝑜𝑔2𝑃(𝑋𝑖) 乘上对应的概率 𝑃(𝑋𝑖) 进行加权求和?

举个例子会比较好理解:假设有两个系统,系统1中比利时和阿根廷的胜率均为50%;而在系统2中法国胜率为99%,中国仅为1%

对于不同国家,根据信息量的公式 −𝑙𝑜𝑔2𝑃(𝑋𝑖) 可以计算分别对应的信息量大小:

知道了各个队伍的信息量后,胜率仅为1%的中国队信息量高达6.6493,证明其想要获胜的话难度很大,与我们前面提到信息量的含义相符。那么现在的问题是,我们怎么知道整个系统中的“信息量”是多少呢?

如果只是进行简单的相加:系统1中的信息量总和为2,系统2中的信息量总和为6.6584,这个结果表示系统2中的不确定性高于系统1,但系统2中的胜率悬殊如此之大,不确定性反而是很小的,此时出现了结果与事实相悖,故衡量一个系统中的信息量并不能简单地将系统中事件信息量相加而得,还应考虑到事件发生的概率:中国队获胜的信息量虽然高达6.6439,但其概率只有1%;法国队获胜的信息量虽然只有0.0145,但其概率高达99%。故每个队伍对其系统贡献的信息量应用公式: −𝑃(𝑋𝑖)𝑙𝑜𝑔2𝑃(𝑋𝑖) 计算而得:

此时再将系统内的各个事件的结果相加,得到系统1的熵为1,系统2的熵为0.080794,系统1的不确定性更高,符合预期。而这种将具体的值【信息量】乘以概率并全部相加起来,在数学上可以看作是期望,这就是所谓的熵

目前,我们知道熵是对一个系统不确定性或混乱程度的描述,那我们如何比较两个模型呢?这就不得不提到相对熵【也叫KL散度】这个概念了

相对熵【KL散度】

KL散度定义式

  • 一定是样本真实分布P在前,模型预测分布Q在后,表示Q是以P的分布为基准的
  • 𝑓𝑄(𝑞𝑖)−𝑓𝑃(𝑝𝑖) 可以从直观上理解为“Q还需要多少信息量才能达到P的分布”
  • 当 𝑓𝑄(𝑞𝑖)=𝑓𝑃(𝑝𝑖) 时,即KL散度为零时,Q和P的分布完全相同【即KL散度越小,两个分布越接近】

将KL散度定义公式展开

将公式展开到最后可以发现公式的后半部分 Σ𝑖=1𝑚𝑝𝑖(−𝑙𝑜𝑔2𝑝𝑖) 其实为目标分布P的熵,为一个定值

而公式前半部分 Σ𝑖=1𝑚𝑝𝑖(−𝑙𝑜𝑔2𝑞𝑖) 则为交叉熵

易知交叉熵和P分布的熵恒大于0,且由吉布斯不等式[2]可知交叉熵恒大于P分布的熵,故KL分布恒大于0

也因此最小化KL散度的目标可以转换为最小化交叉熵,即交叉熵自己本身就可以作为损失函数

对交叉熵求最小值等价于求最大似然估计【在王木头机器学习系列能看到相关推导】

以下对于相对熵和交叉熵更为通俗的解释参考自大神文章[3]

尽管实际训练中常用交叉熵代表相对熵【KL散度】作为损失函数,但它们实际的含义是有所不同的:

交叉熵:其用来衡量在给定的真实分布p下,使用非真实分布q所指定的策略消除系统的不确定性所需要付出的努力的大小【可以联想GAN训练中一开始的随机噪声z就是这里的非真实分布q,一步步地向图片样本分布p逼近】

相对熵:=某个策略的交叉熵 𝐻(𝑝,𝑞) -真实分布的熵 𝐻(𝑝) 【真实分布的熵其实可以理解为是在真实分布下能够使整个系统达到最小熵的最佳策略】故相对熵描述的其实是一个差值:预测的分布q与理想分布p之间的差距值

结合下图可能会有助于理解

关系图

posted @   有何m不可  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2024-01-19 docker部署netbox 中部分汉化配置
点击右上角即可分享
微信分享提示