信息熵,交叉熵,相对熵,KL散度

2024-06-12 15:18

本文主要是介绍信息熵,交叉熵,相对熵,KL散度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        ,信息熵在机器学习和深度学习中是十分重要的。那么,信息熵到底是什么呢?

  首先,信息熵是描述的一个事情的不确定性。比如:我说,太阳从东方升起。那么这个事件发生的概率几乎为1,那么这个事情的反应的信息量就会很小。如果我说,太阳从西方升起。那么这就反应的信息量就很大了,这有可能是因为地球的自转变成了自东向西,或者地球脱离轨道去到了别的地方,那么这就可能导致白天变成黑夜,热带雨林将变成沙漠。

  那么,太阳从东方升起这个事件,概率很大,信息量就会很少。相反,太阳从西方升起,概率很小,信息量就会很多。因此,信息熵常被用来作为一个系统的信息量量化指标。信息熵也是不确定程度的度量, 一个事件的不确定程度越大, 则信息熵越大。

总结一下:消除熵=获取信息 (消除信息量)!

首先给出信息量的公式:

                                                                   

 可以看到当p(x)取得最大值1时,h(x)=0,即对于一个确定事件,其信息量为0.

 信息熵就是信息量的期望。公式如下:

                                                                

交叉熵:现在有样本集的两种概率分布p和q,其中p是样本的真实分布q为预测分布(通过训练样本得到的分布),如果我们要用q来预测样本(对测试样本进行测试),则是基于分布q的信息量的期望,由于样本来自于分布p,因此期望与真实分布一致,所以基于q的样本预测公式为:

                                                                 

相对熵:用预测分布q预测样本  与  用真实分布p预测样本  的差值成为相对熵,又称为KL散度

                                                           

                                                                        

有两种方式可以证明KL(p|q)>=0:

第一种方式可以利用Jensen's Inequality来证明:

注:   Jensen's Inequality 标准定义形式如下:如果X是一个随机变量且\varphi是一个凸函数,则:

                                                       

 由此可得:

                                                 

                                          

                      

第二种方式是直观解释:当编码对应的分布与样本对应的分布为同一分布时,即为最优编码状态,此时编码所需的全部比特数一定是最少的,其余任何方式都会使所需比特数增多,所以P与Q之间的KL散度不小于0。

KL散度除了基本的非负性,还有其它两个常见性质:

第一个是它的非对称性,即KL(p|q) 与KL(q|p)不相等。

第二个是KL散度并不满足三角不等式,即KL(p|q') + KL(q'|q) 与 KL(p|q) 没有明确的大小关系。

机器学习的目的是预测分布q更加接近于真实分布p,因此我们自然而然想到就是要求相对熵的最小值。而相对熵公式中的后一项由于p(x)的分布是确定的,因此可以说是常数,这样就变成了我们熟悉的,要求交叉熵的最小值,也即求最大似然估计。

fēi duì chèn xìng

[数] asymmetry

这篇关于信息熵,交叉熵,相对熵,KL散度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054580

相关文章

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

交叉编译python

1.解决python源码,进入源码目录 2.先编译本地版本的python。直接使用命令 ./configure --prefix=/home/KAS-300/python3.8 --enable-optimizationsmake -j8make install 3.把生成的python可执行文件临时加入PATH export PATH=/home/KAS-300/python3.8/

逐行讲解Transformer的代码实现和原理讲解:计算交叉熵损失

LLM模型:Transformer代码实现和原理讲解:前馈神经网络_哔哩哔哩_bilibili 1 计算交叉熵目的 计算 loss = F.cross_entropy(input=linear_predictions_reshaped, target=targets_reshaped) 的目的是为了评估模型预测结果与实际标签之间的差距,并提供一个量化指标,用于指导模型的训练过程。具体来说,交叉

(4)SVG-path中的椭圆弧A(绝对)或a(相对)

1、概念 表示经过起始点(即上一条命令的结束点),到结束点之间画一段椭圆弧 2、7个参数 rx,ry,x-axis-rotation,large-arc-flag,sweep-flag,x,y (1)和(2)rx,ry rx:椭圆的x轴半径(即水平半径) ry:椭圆的y轴半径(即垂直半径) 这两个参数好理解,就是椭圆的两条对称轴半径,相等即为圆 也可以写比例,写比例时默认用符合条件

OpenCV结构分析与形状描述符(9)检测轮廓相对于其凸包的凹陷缺陷函数convexityDefects()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 查找一个轮廓的凸性缺陷。 下图显示了一个手部轮廓的凸性缺陷: convexityDefects 是 OpenCV 库中的一个函数,用于检测轮廓相对于其凸包的凹陷缺陷。这个函数可以帮助识别轮廓中的凹进去的部分,通常被用来分析手部或其他物体的形状

【深度学习 误差计算】10分钟了解下均方差和交叉熵损失函数

常见的误差计算函数有均方差、交叉熵、KL 散度、Hinge Loss 函数等,其中均方差函数和交叉熵函数在深度学习中比较常见,均方差主要用于回归问题,交叉熵主要用于分类问题。下面我们来深刻理解下这两个概念。 1、均方差MSE。 预测值与真实值之差的平方和,再除以样本量。 均方差广泛应用在回归问题中,在分类问题中也可以应用均方差误差。 2、交叉熵 再介绍交叉熵损失函数之前,我们首先来介绍信息

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测+交叉验证

回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测+交叉验证 目录 回归预测 | Matlab基于贝叶斯算法优化XGBoost(BO-XGBoost/Bayes-XGBoost)的数据回归预测+交叉验证效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现基于贝叶斯算法优化X

hi 平台 opencv4.8 交叉编译

echo "参数是 'arm_hi'"         current_path=$(pwd)         nproc=32         # arm-linux-gnueabihf-gcc, Cross-Toolchain PATH         export PATH="/opt/aarch64-v01c01-linux-musl-gcc/bin:$PATH"

神经网络多分类任务的损失函数——交叉熵

神经网络多分类任务的损失函数——交叉熵 神经网络解决多分类问题最常用的方法是设置n个输出节点,其中n为类别的个数。对于每一个样例,神经网络可以得到的一个n维数组作为输出结果。数组中的每一个维度(也就是每一个输出节点)对应一个类别。在理想情况下,如果一个样本属于类别k,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0。 以识别手写数字为例,0~9共十个类别。识别数字1,神经网