香农信息量/自信息、信息熵、相对熵/KL散度/信息散度、交叉熵

诸神缄默不语-个人CSDN博文目录

文章目录

  • 1. 引言
  • 2. 什么是熵?
  • 3. 香农信息量/自信息
    • 香农信息量的定义
    • 香农信息量的含义
    • 香农信息量计算示例
    • 香农信息量与信息熵的关系
  • 4. 信息熵
    • 信息熵的定义
    • 信息熵的计算公式
    • 信息熵计算示例
  • 5. 衡量两个分布间的差异:相对熵/KL散度/信息散度 & 交叉熵
    • 相对熵
  • 6. 信息熵在深度学习中的应用
    • 交叉熵损失函数
    • 信息增益
  • 总结
  • 参考资料

1. 引言

在学习深度学习和信息论的过程中,我们经常会遇到一个名词——“信息熵”。对于初学者来说,这个概念可能有些抽象,甚至有点让人困惑。本文将从零开始,为大家详细解释什么是信息熵,以及它在计算机和信息论中的重要作用。

2. 什么是熵?

熵(Entropy)最初是一个热力学概念,用来描述系统的混乱程度。后来,这个概念被引入信息论,用来量化信息的“不确定性”。

3. 香农信息量/自信息

在理解信息熵之前,我们需要先了解另一个重要概念——香农信息量。

香农信息量的定义

香农信息量(Shannon Information Content)是指一个事件发生时所携带的信息量。对于一个事件 x i x_i xi,其香农信息量的计算公式为:
I ( x i ) = − log ⁡ 2 P ( x i ) I(x_i) = -\log_2 P(x_i) I(xi)=log2P(xi)

其中:
I ( x i ) I(x_i) I(xi) 表示事件 x i x_i xi 的信息量。
P ( x i ) P(x_i) P(xi) 表示事件 x i x_i xi 发生的概率。对于连续性随机变量 X X X P P P为其概率分布, P ( x ) P(x) P(x)为X在 X = x X=x X=x处的概率密度函数值

这时香农信息量的单位为比特。

如果对数以e为底,单位就是纳特(nat)。

香农信息量的含义

已知事件发生的概率为 P ( x ) P(x) P(x),则需要用多少个比特来描述(唯一标识)这个事件?
在二进制系统中,一个比特可以表示两种状态(0或1)。
如果我们需要n个比特来表示一个事件,这意味着我们可以区分 2 n 2^n 2n种不同的状态,每个状态的概率是 1 2 n \frac{1}{2^n} 2n1
P ( x ) = 1 2 n n = − log ⁡ 2 1 P ( x ) = − log ⁡ 2 P ( x i ) P(x)=\frac{1}{2^n}\\ n=-\log_2\frac{1}{P(x)}=-\log_2 P(x_i) P(x)=2n1n=log2P(x)1=log2P(xi)
概率越低,事件越罕见,所需的比特数越多,信息量也就越大。
通过这个公式,我们能够量化事件发生时的信息量,并且这个量化结果在二进制系统中有直接的实际意义。

直观理解:数据aaBaaaVaaaaa
三个字母出现的概率分别为: P ( a ) = 10 12 , P ( B ) = 1 12 , P ( V ) = 1 12 P(a)=\frac{10}{12},P(B)=\frac{1}{12},P(V)=\frac{1}{12} P(a)=1210,P(B)=121,P(V)=121
香农信息量分别为: I ( a ) = 0.263 , I ( B ) = 3.585 , I ( V ) = 3.585 I(a)=0.263,I(B)=3.585,I(V)=3.585 I(a)=0.263,I(B)=3.585,I(V)=3.585
由于比特数向上取整,所以我们分别需要1、4、4个比特来代表这3个字母,比如把a编码为0,把B编码为1000,把V编码为1001,数据编码结果就成了:001000000100100000
但这时我们可能会想,在这种情况下用4个比特是不是有点浪费了?直接把a编码为0,把B编码为10,把V编码为11,也可以实现无损编码,压缩更大。但是如果对于另一组数据:abBcdeVfhgim,这时B和V的香农信息量仍然是3.585个比特,但是2个比特就不能区分这12个字母了,4个比特才能保证可以编码B和V。香农信息量就是保证能编码事件时所用的比特数。

香农信息量计算示例

如果一个事件 A A A 的发生概率为 0.1,那么其香农信息量为:

I ( A ) = − log ⁡ 2 0.1 ≈ 3.32 I(A) = -\log_2 0.1 \approx 3.32 I(A)=log20.13.32

这表示事件 A A A 发生时,它携带了约 3.32 bits 的信息量。

香农信息量与信息熵的关系

信息熵是所有可能事件的香农信息量的期望值。换句话说,信息熵是香农信息量的加权平均值,权重为每个事件发生的概率。因此,信息熵可以看作是整个信息源的不确定性的度量。

4. 信息熵

信息熵的定义

信息熵是由克劳德·香农(Claude Shannon)在1948年提出的一个概念。它用于衡量信息源产生的信息量。简单来说,信息熵表示的是在一个信息源中,每个符号出现的平均不确定性。

信息熵的计算公式

用期望评估整体系统的信息量:“事件香农信息量×事件概率”的累加

H ( p ) = E [ I ( x ) ] = E [ − log ⁡ ( p ( x ) ) ] H(p)=E\big[I(x)\big]=E\big[-\log\big(p(x)\big)\big] H(p)=E[I(x)]=E[log(p(x))]

信息熵公式
(对于连续型随机变量):
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − log ⁡ p ( x ) ] = − ∫ p ( x ) log ⁡ p ( x ) d x H(p)=H(X)=E_{x∼p(x)}[−\log p(x)]=−\displaystyle\int p(x)\log p(x)dx H(p)=H(X)=Exp(x)[logp(x)]=p(x)logp(x)dx

(对于离散型随机变量):
H ( p ) = H ( X ) = E x ∼ p ( x ) [ − log ⁡ p ( x ) ] = − ∑ i = 1 n p ( x i ) log ⁡ p ( x i ) H(p)=H(X)=E_{x∼p(x)}[−\log p(x)]=−\displaystyle\sum\limits_{i=1}^np(x_i)\log p(x_i) H(p)=H(X)=Exp(x)[logp(x)]=i=1np(xi)logp(xi)

其中:

  • H ( X ) H(X) H(X) 表示随机变量 X X X 的熵。
  • P ( x i ) P(x_i) P(xi) 表示随机变量 X X X 取值 x i x_i xi 的概率。

一般情况下在神经网络中,默认以 e e e为底,这样算出来的香农信息量虽然不是最小的可用于完整表示事件的比特数,但对于信息熵的含义来说是区别不大的。其实只要这个底数是大于1的,都能用来表达信息熵的大小。

信息熵计算示例

为了更好地理解这个公式,我们来看一个具体的例子。假设我们有一个信息源,它只会产生四个符号 A , B , C , D A, B, C, D A,B,C,D,它们出现的概率分别是 0.1, 0.2, 0.4 和 0.3。那么,这个信息源的熵可以计算如下:

H ( X ) = − ( 0.1 log ⁡ 2 0.1 + 0.2 log ⁡ 2 0.2 + 0.4 log ⁡ 2 0.4 + 0.3 log ⁡ 2 0.3 ) H(X) = -(0.1 \log_2 0.1 + 0.2 \log_2 0.2 + 0.4 \log_2 0.4 + 0.3 \log_2 0.3) H(X)=(0.1log20.1+0.2log20.2+0.4log20.4+0.3log20.3)

通过计算我们可以得到:

H ( X ) ≈ 1.846 H(X) \approx 1.846 H(X)1.846

这个结果表明,在这个信息源中,每个符号平均包含约 1.846 bits 的信息。

5. 衡量两个分布间的差异:相对熵/KL散度/信息散度 & 交叉熵

相对熵

两个概率分布间差异的非对称性度量。

在信息论中,相对熵等价于两个概率分布的信息熵的差值,若其中一个概率分布为真实分布( p ( x i ) p(x_i) p(xi) ),另一个为理论(拟合)分布( q ( x i ) q(x_i) q(xi) ),则此时相对熵等于交叉熵1与真实分布的信息熵之差,表示使用理论分布拟合真实分布时产生的信息损耗:

D K L ( p ∥ q ) = ∑ i = 1 N [ p ( x i ) log ⁡ p ( x i ) − p ( x i ) log ⁡ q ( x i ) ] D_{KL}(p∥q)=\displaystyle\sum\limits_{i=1}^N\Big[p(x_i)\log p(x_i)−p(x_i)\log q(x_i)\Big] DKL(pq)=i=1N[p(xi)logp(xi)p(xi)logq(xi)]

其中:

  • P ( x i ) P(x_i) P(xi) 是真实分布 P P P 中事件 x i x_i xi 的概率。
  • Q ( x i ) Q(x_i) Q(xi) 是近似分布 Q Q Q 中事件 x i x_i xi 的概率。

有一种理解是:信息量变成了 − log ⁡ ( q ) -\log(q) log(q),但事件概率还是原先的 p p p,所以会变成那个公式

假设理论拟合出来的事件概率分布跟真实的一模一样,那么这玩意就等于真实事件的信息熵,这一点显而易见。

假设拟合的不是特别好,那么这个玩意会比真实事件的信息熵大(这个在相对熵(KL散度)__寒潭雁影的博客-CSDN博客_kl三都一文中有证明,感觉还是比较好证的)。

也就是在理论拟合出来的事件概率分布跟真实的一模一样的时候,相对熵等于0。而拟合出来不太一样的时候,相对熵大于0。这个性质很关键,因为它正是深度学习梯度下降法需要的特性。假设神经网络拟合完美了,那么它就不再梯度下降,而不完美则因为它大于0而继续下降。

但它有不好的地方,就是它是不对称的。

(相对熵(KL散度)__寒潭雁影的博客-CSDN博客_kl三都一文中还介绍了为什么用相对熵衍生出的交叉熵而不是均方差作为损失函数来训练神经网络,主要是关心梯度消失问题。相关的分析博文还可以参考,我只浏览过一遍还没有细看:1. 深度学习1—最简单的全连接神经网络__寒潭雁影的博客-CSDN博客_全连接神经网络实例 2. 一文弄懂神经网络中的反向传播法——BackPropagation - Charlotte77 - 博客园 3. 神经网络中w,b参数的作用(为何需要偏置b的解释)_AI_盲的博客-CSDN博客_神经元 为什么要有偏置)

交叉熵:
H q ( p ) = ∑ x p ( x ) log ⁡ 1 q ( x ) H_q(p)=\sum_xp(x)\log\frac{1}{q(x)} Hq(p)=xp(x)logq(x)1

KL散度=交叉熵-信息熵
D K L ( p ∥ q ) = H q ( p ) − H ( p ) = ∑ x p ( x ) log ⁡ 1 q ( x ) − ( − ∑ x p ( x ) log ⁡ p ( x ) ) = ∑ i = 1 N [ p ( x i ) log ⁡ p ( x i ) − p ( x i ) log ⁡ q ( x i ) ] \begin{aligned} D_{KL}(p∥q)&=H_q(p)-H(p)\\ &=\sum_xp(x)\log\frac{1}{q(x)}-\bigg(-\sum_xp(x)\log p(x)\bigg)\\ &=\displaystyle\sum\limits_{i=1}^N\Big[p(x_i)\log p(x_i)−p(x_i)\log q(x_i)\Big] \end{aligned} DKL(pq)=Hq(p)H(p)=xp(x)logq(x)1(xp(x)logp(x))=i=1N[p(xi)logp(xi)p(xi)logq(xi)]

在这里插入图片描述
第一行表示p所含的信息量/平均编码长度 H ( p ) H(p) H(p)
第二行是cross-entropy,即用q来编码p所含的信息量/平均编码长度|或者称之为q对p的cross-entropy;
第三行是上面两者之间的差值,即q对p的KL距离,KL距离越大说明差值越大,说明两个分布的差异越大。
(注意这三者都是非负的。上面说的KL和cross-entropy是两个不同分布之间的距离度量,因此用 H ( p ) H(p) H(p)来表示熵。如果是测量同一分布中两个变量相互影响的关系,则一般用 H ( X ) H(X) H(X)来表示熵,如联合信息熵和条件信息熵 - 简书(我还没看))

这一部分我还没看的参考资料:1. 【机器学习】信息量,信息熵,交叉熵,KL散度和互信息(信息增益)_哈乐笑的博客-CSDN博客(这一篇公式符号似乎有问题) 2. 熵 (信息论) - 维基百科,自由的百科全书

6. 信息熵在深度学习中的应用

在深度学习中,信息熵有许多重要的应用,以下是几个主要的方面:

交叉熵损失函数

在分类问题中,我们通常使用交叉熵损失函数(Cross-Entropy Loss)来衡量模型预测结果与真实结果之间的差异。交叉熵损失函数基于信息熵定义,用于衡量两个概率分布之间的距离。

交叉熵损失函数的公式为:

L = − ∑ i = 1 n y i log ⁡ p ( y i ) L = -\sum_{i=1}^{n} y_i \log p(y_i) L=i=1nyilogp(yi)

其中:

  • y i y_i yi 是真实标签的独热编码(one-hot encoding)。
  • p ( y i ) p(y_i) p(yi) 是模型对类别 i i i 的预测概率。

信息增益

在决策树算法中,信息增益是用来选择最佳分割特征的标准。信息增益表示在某一特征的条件下,信息熵的减少量。信息增益越大,表示特征对分类效果越好。

信息增益的公式为:

信息增益 = H ( D ) − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) \text{信息增益} = H(D) - \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i) 信息增益=H(D)i=1nDDiH(Di)

其中:

  • H ( D ) H(D) H(D) 是数据集 D D D 的熵。
  • ∣ D i ∣ |D_i| Di 是数据集 D D D 中第 i i i 个子集的大小。

总结

通过本文的介绍,希望大家对信息熵有了一个初步的了解。信息熵是一个非常重要的概念,在信息论和深度学习中都有广泛的应用。掌握信息熵的概念和计算方法,对于深入理解许多机器学习和深度学习算法至关重要。

如果你对本文有任何疑问或建议,欢迎在评论区留言,我们一起交流学习!

参考资料

  1. 香农信息量__寒潭雁影的博客-CSDN博客
  2. 还没看
    1. Claude E. Shannon, “A Mathematical Theory of Communication,” Bell System Technical Journal, vol. 27, pp. 379-423, 623-656, July, October, 1948.

感谢阅读!

如果你觉得这篇文章对你有帮助,请点赞并分享给更多的小伙伴。你们的支持是我不断创作的动力!

希望这篇博文能帮助到你,祝学习愉快!


  1. 交叉熵_百度百科 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/642080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ColossalAI Open-Sora 1.1 项目技术报告 (视频生成)

项目信息 项目地址:https://github.com/hpcaitech/Open-Sora技术报告: Open-Sora 1:https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_01.mdOpen-Sora 1.1:https://github.com/hpcaitech/Open-Sora/blob/main/docs…

技术前沿 |【VL-BEIT:引领未来的极简单阶段多模态预训练方案】

VL-BEIT:引领未来的极简单阶段多模态预训练方案 引言一、VL-BEIT的基本介绍二、VL-BEIT的原理和工作方式三、VL-BEIT的特点四、VL-BEIT的应用场景五、总结与展望 引言 在人工智能蓬勃发展的今天,多模态预训练模型正逐渐成为研究和应用的热点。这些模型能…

C++高效死锁检测——实现原理与应用(基于强连通分量)

背景 在项目使用多进程、多线程过程中,因争夺资源而造成一种资源竞态,所以需加锁处理。如下图所示,线程 A 想获取线程 B 的锁,线程 B 想获取线程 C 的锁,线程 C 想获取线程 D 的锁, 线程 D 想获取线程 A 的…

视频号小店的保证金是多少钱?2024最新收费标准,一篇了解!

哈喽~我是电商月月 现实社会,干什么都需要交钱,就连上班,路费也得掏钱 想要入驻视频号小店,在视频号里卖货赚钱,就要缴纳类目保证金 那到底要缴多少钱呢? 今天,月月就把最新的收费标准分享给…

批量化处理和矩阵(torch)

左边是权重,右边是变量 高维可以看成二维的堆叠 总结:二维是一维的堆叠,三维是二维的堆叠。但似乎是为了引入矩阵,本来应该是左上角是第一组权重和第一组变量的乘积这种表示表示来着,最后成了和列向量乘积&#xff…

C# GDI+ 绘制文字不同的操作系统渲染文字大小不同

一、C# GDI 绘制文字不同的操作系统渲染文字大小不同 原因:使用Font 字体的时候,没有指定字体渲染的单位。 不同系统的默认字体单位会不同。 二、解决方案: 在指定字体的时候,指定字体大小,同时也要设置字体的单位 …

私域流量的真谛:构建并运营属于你自己的私域生态

大家好,我是来自一家专注于私域电商行业的软件开发公司的产品经理,拥有超过七年的行业经验。今天,我想和大家聊聊私域流量的真正含义,以及为何我们应该关注并努力打造属于自己的私域生态。 什么是私域流量? 私域流量&…

【机器学习】【深度学习】正则化(Regularization)

概念 正则化(Regularization)是在机器学习模型中避免过拟合的一种技术。它通过引入一个惩罚项(即正则项)来限制模型的复杂度,以此来提防模型过度依赖训练数据,捕获数据中的噪音信息而导致过拟合现象。简单…

10.3.k8s的附加组件-图形化管理工具dashboard

目录 一、dashboard介绍 二、部署安装dashboard组件 1.下载dashboard本地文件 2.修改nodeport的端口范围 3.创建和查看dashboard 4.电脑浏览器访问测试 5.token登录方式登录dashboard 5.1.查看dashboard的token 5.2.继续查看用户token的secrets资源详细信息 5.3.复制…

【Apache Doris】周FAQ集锦:第 4 期

【Apache Doris】周FAQ集锦:第 4 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

clangd failed: Couldn‘t build compiler instance问题解决!!!

如果其他人的博客不能解决问题,可以试试我的解决方案: 修改compile_commands.json中cc为arm-linux-gnueabihf-gcc, 例如: 之后,clangd就能用了,虽然输出也会报错,但好歹能用了

ICML 2024 时空数据(Spatial-Temporal)论文总结

2024ICML(International Conference on Machine Learning,国际机器学习会议)在2024年7月21日-27日在奥地利维也纳举行 (好像ICLR24现在正在维也纳开)。 本文总结了ICML 24有关时空数据(Spatial-temporal) 的相关论文…

docxtemplater避坑!!! 前端导出word怎么插入本地图片或base64 有完整示例

用docxtemplater库实现前端通过模板导出word,遇到需求,要插图片并转成word并导出,在图片转换这块遇到了问题,网上查示例大多都跑不通,自己琢磨半天,总算搞明白了。 附上清晰完整示例,供参考。 …

【云原生】Kubernetes----POD基本管理

目录 引言 一、Pod基础概念 (一)Pod简介 (二)Pod的分类 1.自主式Pod 2.控制器管理的Pod (三)Pod使用方式 1.单容器pod 2.多容器Pod 3. 注意事项 二、Pod容器的分类 (一)…

C++之第八课

课程列表 今天我们来学一学C里的一些实用的东西。 1.域宽 说到域宽setw&#xff0c;就叒要加头文件了。 #include<iomanip> 使用格式是&#xff1a; cout<<setw(5)<<"123"; setw括号里面可以改数字&#xff0c;后面就是输出内容了&#xff…

Python高级进阶--dict字典

dict字典⭐⭐ 1. 字典简介 dictionary&#xff08;字典&#xff09; 是 除列表以外 Python 之中 最灵活 的数据类型&#xff0c;类型为dict 字典同样可以用来存储多个数据字典使用键值对存储数据 2. 字典的定义 字典用{}定义键值对之间使用,分隔键和值之间使用:分隔 d {中…

java 子类继承父类

为什么需要继承 我现在要有两个类一个 一个是小学生&#xff0c;一个是大学生 代码 小学生 package b; public class encapsulatio{public String name;public int age;public double score;public void setscore (double score) {this.scorescore;}public void testing() {S…

【测试SQLite】测试SQLite支持的SQL语句分类

测试SQLite支持的SQL语句分类 为了全面测试SQLite支持的SQL语句&#xff0c;需要设计一个包含多种类型的表结构&#xff0c;并编写各种SQL语句来测试这些功能。目前按照以下分类进行测试&#xff1a; 数据定义语言&#xff08;DDL&#xff09;数据操作语言&#xff08;DML&am…

重学java 44.多线程 Lock锁的使用

昨日之深渊&#xff0c;今日之浅谈 —— 24.5.25 一、Lock对象的介绍和基本使用 1.概述 Lock是一个接口 2.实现类 ReentrantLock 3.方法 lock()获取锁 unlock()释放锁 4.Lock锁的使用 package S78Lock;import java.util.concurrent.locks.Lock; import java.util.concurrent.lo…

Slash后台管理系统源码阅读笔记 实现环形图统计卡片

目前在梳理工作台相关的代码。 工作台的界面如下&#xff1a; 这里面的Banner的代码已经基本梳理完毕&#xff0c;整体代码如下&#xff1a; import { Col, Row } from antd; import Color from color;import Character3 from /assets/images/characters/character_3.png; i…