一文读懂信息量、信息熵、相对熵(KL散度)和交叉熵

        在人工智能深度学习的应用中,损失函数绝对是模型网络学习质量的关键。我们使用损失函数来表示的真实值与预测值之间的距离,进而指导模型的收敛方向。对于标量来说,我们能够很容易想到使用方差来描述误差。那么,如何表示向量之间的误差呢?

        交叉熵(cross-entropy)就是用来描述向量之间的误差的损失函数,首先来看它的公式:

                            H(P, Q) = -\sum P(x_{i})log[Q(x_{i})]

        很多人工智能初学者可能觉得这个公式不太好理解,不像方差公式那样简单易懂。要理解这个公式,我们需要先从信息量化的概念开始。

一、【信息量】

        信息是可以量化的吗?答案是肯定的。例如,有两条消息,第一条是“明天太阳会升起”,第二条是“明天会有日食”,这两条消息那一条的信息量更大呢?显然是后者。太阳每天都会升起,也就是“明天太阳会升起”的概率是100%,所以第一条消息其实是一句废话,没有包含任何信息量;再看第二条,日食是一个非常低概率的事件,一个低概率事件的发生显然包含了更多的信息,因此第二条消息的信息量就远高于第一条消息。至此我们可以总结出信息量的一些特征:

        1.非常可能发生的事件信息量比较少,并且在极端情况下,确保能够发生的事件应该没有信息量。

        2.较不可能发生的事件具有更高的信息量。

        那么信息如何量化呢?设想投掷一枚质地均匀的硬币,两面向上的可能性相等,现在要以消息的形式告诉别人投掷的结果,这条消息包含多少信息量呢?答案是1bit,我们只需要一位二进制数就可以表示投硬币的结果,并且无论这条消息中写了多少内容多少个字,其信息量始终只有1个比特。

        将情况再进行扩展,现在有一个天气预报软件来向你预告明天的天气,假设有且仅有8种不同的天气,且他们每一个在明天出现的概率是相同的1/8,那么这条天气预报消息就包含了3bits的信息量,即用3位二进制数对8种不同的天气进行编码。并且无论这条天气预报中写了多少内容多少个字,其信息量始终只有3个比特。

        通过以上两个例子我们已经可以简单的理解信息量的概念了。那么如果硬币的质地不均匀导致两面向上的概率不一样、明天这8种天气出现的概率不同,这时消息的信息量又该如何表示呢?结合上文所说的信息量的特征,我们知道信息量与该事件发生的概率紧密相关,且为负相关。由此引出计算信息量的公式:

                一个事件X = x发生的概率为P(x),那么它的信息量为:I(x) = -log[P(x)]     (1)

        其中,当log以2为底时,I(x)的单位为比特(bits)或者香农(shannons);当log以e为底时,I(x)的单位为奈特(nats) 。

        回到上面的例子。我们假设硬币的质地不均,正面朝上的概率是0.7,反面朝上的概率是0.3,那么“正面朝上”这条消息的信息量即为I(heads) = -log(0.7),结果是0.51bits(或0.36nats),“反面朝上”的信息量为1.74bits(或1.204nats)。又假设明天各项天气出现的概率如下表所示,那么“明天是晴天”这条消息的信息量为1.51bits(或1.05nats),“明天有中雨”的信息量为4.64bits(或3.21nats)。

天气晴天多云阴天阵雨小雨中雨大雨雷暴
出现概率35%35%10%10%4%4%1%1%

二、【信息熵】

        上文所述的I(x)描述了单条信息所包含的信息量,那么如何量化表示整个概率分布中的不确定性的总量呢?我们发现,单条信息不仅信息量与其所表示事件的概率相关,其出现的概率也与其所表示事件的概率有关联。例如上文中投掷硬币正面朝上的概率为0.7,则“正面朝上”这条信息出现的概率也是对应的0.7;明天是晴天的概率为0.35,天气预报发出“明天是晴天”这条预告信息的概率也是对应的0.35。由此我们可以引入数学期望的概念来对整个概率分布中的不确定性的总量进行量化,记为香农熵(Shannon entropy),计算公式如下:

                H(P)=E_{x\sim P}[I(x)]=-\sum P(x_{i})logP(x_{i})                (2)

        H(P)的单位同样与log的底数有关。当log以2为底时,单位为比特(bits)或者香农(shannons);当log以e为底时,单位为奈特(nats) 。从公式来看,香农熵即为描述一个概率分布为P(x)的事件X的消息所包含信息量的数学期望。

        下图为X服从0-1分布时,香农熵与p之间的图像。我们可以看出随着p值趋于0或1时,即某事件发生与否的确定性不断增加时,香农熵的值会减小,直到事件完全确定时减为0;在p值为0.5时,即不确定性最大时,香农熵也取得最大值1。

        

        现在回到先前的例子,带入公式(2)可以得出:不均匀硬币的投掷结果这条消息的香农熵为0.88bits,即这条消息的真正有用信息量为0.88bits,比这条消息的实际信息量1bit要少;明天的天气预报的香农熵为2.23bits,也比这条消息的实际信息量3bit要少。

        如果我们改变编码方式会产生怎样的结果呢?如下表所示,我们根据概率为各种天气建立哈夫曼编码。这种编码方式使得天气预报消息的平均信息量从3bits降低到了2.33bits。虽然哈夫曼编码已经是最佳编码方式,但是距离2.23bits的香农熵还是有着0.1bits的差距,也就是说消息中包含了0.1bits的无用信息。要解释产生这种差距的原因,就需要引入相对熵的概念。

天气晴天多云阴天阵雨小雨中雨大雨雷暴
哈夫曼编码10100100010000100000100000010000000

 三、【相对熵】       

        我们对上述例子中的天气情况进行了哈夫曼编码,从概率的角度出发:晴天编码为1bit,也就是在编码时我们假设晴天出现的概率为1/2;多云编码为2bits,也就是我们假设出现多云天气的概率为1/2^{2}=1/4。以此类推,我们可以得出哈夫曼编码下对应的概率分布,如下表所示

天气晴天多云阴天阵雨小雨中雨大雨雷暴
哈夫曼编码10100100010000100000100000010000000
编码概率(P)1/21/41/81/161/321/641/1281/128
实际概率(Q)35%35%10%10%4%4%1%1%

        编码的概率分布与实际的概率分布并不相同,这就是误差产生的原因。我们将实际的概率分布记为P,将哈夫曼编码的概率分布记为Q。为了量化衡量这两个独立的概率分布之间的误差,我们引入相对熵的概念又名KL散度(Kullback-Leibler(KL) divergence),计算公式如下:

                D_{KL}(P\parallel Q)=E_{x\sim P}[log\frac{P(x)}{Q(x)}]=E_{x\sim P}[logP(x)-logQ(x)]

                                       =\sum P(x_{i})[logP(x_{i}) - logQ(x_{i})]

                                       =\sum P(x_{i})logP(x_{i})-\sum P(x_{i})logQ(x_{i})

                                       =-H(P)-\sum P(x_{i})logQ(x_{i})                         (3)

        将上面的例子带入公式(3)进行计算,就得出了哈夫曼编码的概率分布与实际的概率分布的KL散度为0.1bits,也就是这两个概率分布之间的误差为0.1bits。

四、【交叉熵】

        有了前面信息量、信息熵和相对熵的概念,现在再来理解交叉熵的概念就比较容易了。我们再来看交叉熵的公式:

                H(P, Q) = -\sum P(x_{i})log[Q(x_{i})]               (4)

        观察上文中KL散度的计算公式我们可以发现,后半部分即为交叉熵的计算公式。至此,可将交叉熵的公式写为:

                H(P,Q)=H(P)+D_{KL}(P\parallel Q)                (5) 

        当log底数为2时,交叉熵即为用非真实分布Q来表示真实分布P的平均编码长度。在实际使用中计算这个公式时,我们经常会遇到 0log0 这个表达式。按照惯例,在信息论中,该表达式被处理为:lim_{x\rightarrow 0}xlogx=0

        下面举一个实际应用中的例子来说明交叉熵的使用。下图是MNIST手写数字库中的一张图片,下表展示了该图片的标签向量值与迭代中两次不同的预测得到的预测向量。

代表数字0123456789
标签向量(P)0000000001
预测向量1(Q1)0.020.110.070.050.010.020.010.220.360.13
预测向量2(Q2)0.010.050.010.010.010.020.010.070.120.69

        第一次预测的结果为8,显然不正确。第二次得到了正确的预测结果。将标签向量看做实际分布P,令预测向量1分布为Q1,预测向量2分布为Q2,带入公式(4)计算出其交叉熵:

        H(P,Q1) =2.0402

        H(P, Q2)=0.3711

        我们可以直观的看出第一次预测错误,交叉熵值非常大,也就是说预测向量1与标签向量之间的误差很大;第二次预测的交叉熵值较小,说明预测向量2与标签向量之间的误差较小。交叉熵的值与预测的准确性呈负相关,因此可用交叉熵作为迭代训练中的损失函数。

        经过前面对信息量、信息熵、相对熵和交叉熵的学习,现在我们就能够直观地理解作为损失函数的交叉熵是如何描述向量之间的误差的了。

参考资料:

1. 视频 Entropy, Cross-Entropy and KL-Divergence

    作者:Aurélien Géron

    来源:https://www.youtube.com/watch?v=ErfnhcEV1O8

2. 《DEEP LEARNING 深度学习》,人民邮电出版社

     作者:Ian Goodfellow & Yoshua Bengio & Aaron Courville

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面板数据进行熵值法

面板数据熵值法分析流程如下: 一、案例背景 当前有9家公司连续5年(2018-2022年)的财务指标数据,想要通过这份数据,确定各个财务指标的权重。熵值法根据指标离散程度确定赋权大小,客观公正准确度高。本次收…

跨数据中心下的 Kafka 高可用架构分析

导语 本文介绍了 Kafka 跨数据中心的两种部署方式,简要分析两种方式下的不同架构以及优缺点,对这些架构可能碰到的问题也提供了一些解决思路;同时也说明了 Kafka 跨数据中心部署的社区解决方案和商业化解决方案。 背景 Kafka 作为世界上最…

分布式的流处理平台Kafka

目录: 一、简介二、基本概念三、生产者使用详解四、发送消息五、消费者代码示例 一、简介 ApacheKafka 是一个分布式的流处理平台。它具有以下特点: 支持消息的发布和订阅,类似于 RabbtMQ、ActiveMQ 等消息队列;支持数据实时处理…

熵_相对熵_散度

1 信息量 意外越大,越不可能发生,概率就越小,信息量也就越大,也就是信息越多。比如说“今天肯定会天黑”,实现概率100%,说了和没说差不多,信息量就是0。 详见:2. 信息量 1.1 公式 …

流批一体计算引擎-4-[Flink]消费kafka实时数据

Python3.6.9 Flink 1.15.2消费Kafaka Topic PyFlink基础应用之kafka 通过PyFlink作业处理Kafka数据 1 环境准备 1.1 启动kafka (1)启动zookeeper zkServer.sh start(2)启动kafka cd /usr/local/kafka/ nohup ./bin/kafka-server-start.sh ./config/server.properties >&g…

【仿牛客网笔记】 Kafka,构建TB级异步消息系统——发送系统通知、显示系统通知

定义时间主题 判断消息内容是否为空,消息格式是否错误。 系统通知是后台发给用户 发送站内通知 构造一个Message对象 设置站内的值 判断是否有数据,然后放入到message中 对CommentController、LikeController、FollowController进行处理。 需要注入…

kafka集群压测与优化

影响kafka集群性能的因数有多个,网络带宽、cpu、内存、磁盘读写速度、副本数、分区数、broker数量、内存缓存等因素都会影响kafka集群的性能 1.优化kafka集群配置 server.properties配置文件优化 num.network.threads4 num.io.threads4 socket.send.buffer.bytes…

熵,信息熵,香农熵,微分熵,交叉熵,相对熵

2019-07-13 https://blog.csdn.net/landstream/article/details/82383503 https://blog.csdn.net/pipisorry/article/details/51695283 https://www.zhihu.com/question/41252833 https://cloud.tencent.com/developer/article/1397504 按顺序查看更容易理解 0、背景 在信息论中…

【Hive】云任务大量卡住故障分析

项目场景: 上一章节我们简单介绍到了JVM调优相关的知识,本章节结合日常故障处理进一步说明相关的使用 问题描述 在云上,hive任务出现大面积卡住的现象,但并无任何报错信息,具体如下: 原因分析&#xff1…

Linux服务器出现异常和卡顿排查思路和步骤

目录 前言一、查看内存使用情况二、查看磁盘使用情况三、top命令3.1 jmap分析堆内存配置信息和使用情况3.2 jstack分析线程的执行情况3.3 jstat查看各个区域占堆百分比 四、其他指令总结 前言 Linux 服务器出现异常和卡顿的原因有很多,以下是一些常见的原因&#x…

熵、交叉熵和散度

熵 自信息 I(x) - log p(x) 对于分布为P(x)的随机变量X,自信息的数学期望 即熵H(X)定义为: 熵越高,随机变量信息越高,反之越少。不同概率分布对应熵如下:P p()熵10001/21/41/41/31/31/3 概率分布越均匀&#xff0…

【腾讯轻量应用服务器上部署kafka并通过flink读取kafka数据】

环境准备 经过1个月的摸索,最终选择在腾讯云上搭建一个学习环境。当时选择原因还是新用户有优惠(150左右3年),但现在看1核2g的配置勉强够用,建议后续小伙伴选择时最好是2核4g配置。 由于是单节点安装,需要准备如下资源&#xff1…

【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

技术交流群:59701880 深圳广州hadoop好友会 微信公众号:后续博客的文档都会转到微信公众号中。 一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的FlumeKafkaStorm的实时日志流系统的搭建文档,自己也跟…

学习笔记之信息量、熵、KL散度、交叉熵的一些介绍

文章目录 信息量熵KL散度(相对熵)交叉熵参考 信息量 以前我也一直只是知道信息量的计算公式,也有想过为什么会是这样,但是因为要学的东西太多了,就没怎么深究,直到看了“交叉熵”如何做损失函数&#xff1…

AI产品经理是如何理解机器学习的(附注释)

本期目的:回顾之前敲代码的日常,利用生活场景帮助AI产品经理认识机器学习及学习过程中常用算法和评价指标。 适用读者:AI/数据产品经理。 阅读重点:品,细品,结合班级故事再品。 最近看了很多关于机器学习…

卢伟冰称小米今年库存会回到更健康水位 将加大门店整合调整

雷递网 乐天 3月25日 小米集团(股票代码为:1810)今日发布财报,财报显示,小米集团2022年营收为2800亿元,较上年同期的3283亿元下降14.7%。小米2022年经调净利为85亿元。 小米2022年第四季度营收为660.47亿元…

小米年营收2800亿:经调整利润85亿 电动汽车业务投入31亿

雷递网 雷建平 3月24日 小米集团(股票代码为:1810)今日发布财报,财报显示,小米集团2022年营收为2800亿元,较上年同期的3283亿元下降14.7%。 2022年,小米集团的境外市场收入为1378亿元&#xff0…

什么是低代码开发平台(apaas)?低代码开发平台的价值有哪些

手码6500字,带你快速看懂:什么是低代码开发平台(apaas),低代码有哪些价值,以及低代码平台的使用逻辑和心得。 一、什么是低代码开发平台(apaas)? 低代码开发平台是一种a…

详解如何在ChatGPT内构建一个Python解释器

这篇文章主要为大家详细介绍了如何在ChatGPT内构建一个Python解释器,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下 目录 引用:Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》 这个灵感来自…

如何画各种“图”?

我们在写文档过程中,多多少少都会画一些图来说明程序的功能,这篇文章就来说明一些常用的"图"怎么画。 1,画图工具 常用的有这么几种 Visio:这是很常用的,基本上的图都可以用这个来画。StarUML&#xff1a…