深度学习中的熵、交叉熵、相对熵(KL散度)、极大释然估计之间的联系与区别

news/2024/5/18 12:16:40

熵的最初来源于热力学。在热力学中,熵代表了系统的无序程度或混乱程度,也可以理解为系统的热力学状态的一种度量。后来被广泛引用于各个领域中,如信息学、统计学、AI等,甚至社会学当中。接下来将大家领略一下深度学习中熵的应用。

1. 熵(信息熵)

信息熵:Entropy,信息论中的概念,用来衡量信息的不确定性或随机性。信息熵越高,表示信息的不确定性越大。

1.1 自信息

自信息表示某一事件发生时所带来的信息量的多少,当事件发生的概率越大,则自信息越小。如何理解呢?如:某动物园猴子会说话这件事发生的概率很小,但是发生了,这一定是一个爆炸新闻,信息量很大,所以概率越小,信息量越大;相反,猴子不会说话,是一件确定的事情,概率很大,平平无奇的一件事,信息自然越小。公式可以用以下描述: P ( x i ) P(x_i) P(xi)表示随机变量 x i x_i xi发生的概率。 I ( P ( x i ) ) = − l o g ( P ( x i ) ) I(P(x_i)) = -log(P(x_i)) I(P(xi))=log(P(xi))

在这里插入图片描述

1.2 信息熵

自信息只能对单个事件信息描述,如果要对系统概率分布的平均信息量进行描述就需要信息熵,也就是所谓的熵。平均也就是求均值。
H ( X ) = E ( I ) = − E x ∼ P ( l o g ( P ( x i ) ) ) = − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) H(X)=E(I)=-E_{x\sim P}(log(P(x_i)))=-\sum_{i=1}^nP(x_i)log(P(x_i)) H(X)=E(I)=ExP(log(P(xi)))=i=1nP(xi)log(P(xi))
从公式可以看出,那些接近确定性的分布(输出几乎可以确定)具有较低的熵,那些接近均匀分布的概率分布具有较高的熵。如:二值分布,P(0) = 0 , P(1) = 1 带入公式得到 H=0。

2.交叉熵

2.1 交叉熵

交叉熵是一种用来衡量两个概率分布之间差异的指标,常用于评估模型输出与真实标签之间的差异。先看公式:
H ( P , Q ) = − E x ∼ P ∑ i = 1 n l o g ( Q ( x i ) ) = ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) ) H(P,Q)=-E_{x\sim P}\sum_{i=1}^nlog(Q(x_i))=\sum_{i=1}^nP(x_i)log(Q(x_i)) H(P,Q)=ExPi=1nlog(Q(xi))=i=1nP(xi)log(Q(xi))
P ( x i ) P(x_i) P(xi) 是真实分布, Q ( x i ) Q(x_i) Q(xi)是模型预测分布,假如模型预测分布等于真实分布,则 H ( P , Q ) = − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) = H ( P ) H(P,Q)=-\sum_{i=1}^nP(x_i)log(P(x_i))=H(P) H(P,Q)=i=1nP(xi)log(P(xi))=H(P),可以看出即使预测很准确,交叉熵也不等于0,但是为什么模型优化,对于分类任务使用交叉熵呢。将交叉熵公式变形得到:
H ( P , Q ) = − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) ) − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) + ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) = − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) P ( x i ) ) + H ( P ) H(P,Q)=-\sum_{i=1}^nP(x_i)log(Q(x_i)) - \sum_{i=1}^nP(x_i)log(P(x_i)) + \sum_{i=1}^nP(x_i)log(P(x_i))\\=-\sum_{i=1}^nP(x_i)log(\frac{Q(x_i)}{P(x_i)}) + H(P) H(P,Q)=i=1nP(xi)log(Q(xi))i=1nP(xi)log(P(xi))+i=1nP(xi)log(P(xi))=i=1nP(xi)log(P(xi)Q(xi))+H(P)
定义KL散度: D K L ( P ∣ ∣ Q ) = − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) P ( x i ) ) D_{KL}(P||Q) = -\sum_{i=1}^nP(x_i)log(\frac{Q(x_i)}{P(x_i)}) DKL(P∣∣Q)=i=1nP(xi)log(P(xi)Q(xi)) ,所以 H ( P , Q ) = D K L ( P ∣ ∣ Q ) + H ( P ) H(P,Q)=D_{KL}(P||Q)+H(P) H(P,Q)=DKL(P∣∣Q)+H(P),由于P是真实值,其H(P )必然为固定值,因此对 H ( P , Q ) H(P,Q) H(P,Q)求梯度实际上是对 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)求梯度,因此在分类任务中交叉熵的优化任务可以看成是对 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)优化。
我们再看一下 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)公式,如果想要其最小,则势必Q(x)=P(x),因此优化交叉熵 H ( P , Q ) H(P,Q) H(P,Q)和优化KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)是一样的,从公式复杂程度来看,优化交叉熵会更简单一些,这也是为什么分类任务模型训练更喜欢用交叉熵损失,而这只是其中一个原因。我们可以接下来看,既然有了交叉熵,为什么还有KL散度,后面在介绍原因。

2.2 交叉熵损失

2.2.1 逻辑回归

我们先看一下最初的逻辑回归公式,有人说来源于最小化交叉熵,也有人说来源于最大释然估计,其实两种说法是等价的。2.1已经证明最小化交叉熵的结果是使预测值Q(x)=P(x),对于分类任务(逻辑回归)我们的目的也是如此,希望预测概率和真实概率一致。因此定义了预测概率函数 h θ ( x ) h_\theta(x) hθ(x)代替Q(x),真实值 y y y代替P(x),因此由交叉熵演变的二分类逻辑回归损失函数为,这里y=0或者1,因此二值的概率也可写为 h θ ( x ) , 1 − h θ ( x ) h_\theta(x),1 - h_\theta(x) hθ(x),1hθ(x)
J ( θ ) = − ∑ i = 0 , 1 y l o g h θ ( x ) = y l o g h θ ( x ) + ( 1 − y ) l o g ( 1 − h θ ( x ) ) J(\theta)=-\sum_{i=0,1}ylogh_\theta(x) = ylogh_\theta(x) + (1-y)log(1-h_\theta(x)) J(θ)=i=0,1yloghθ(x)=yloghθ(x)+(1y)log(1hθ(x))
这就是我们熟悉的二分类的逻辑回归损失了,如果是n分类呢,二分类只不过是多分类的一个特例,这里的 h θ ( x ) h_\theta(x) hθ(x)使用 q i q_i qi代替,
C r o s s E n t r o p y L o s s = J ( θ ) = − ∑ i = 1 n y i l o g ( q i ( x , θ ) ) CrossEntropy Loss = J(\theta)=-\sum_{i=1}^ny_ilog(q_i(x,\theta)) CrossEntropyLoss=J(θ)=i=1nyilog(qi(x,θ))
q i ( x , θ ) q_i(x,\theta) qi(x,θ)是模型预测并且经过softmax的结果,n是类别数

2.2.2 交叉熵损失

2.1 说了交叉熵的优化结果不能使交叉熵的值为0,但是能够使预测值趋向真实值,也做了推导。而交叉熵损失函数在多分类优化结果是怎样的呢。我们想得到预测值跟真实值一样,过来一个样本,假如真实值标签是5,因此我们希望预测概率 q 5 ( x , θ ) = 1 q_5(x,\theta)=1 q5(x,θ)=1,其他为0,而我们损失函数必然为0,因此我们所用的交叉熵损失函数在分类任务最终理想结果是为0这不同于交叉熵,交叉熵一定会大于0。
为什么不用KL散度? 对于分类任务来说,真实值分布P(x),习惯上叫先验分布是难以确定的,比如说一张图片是猫是狗还是牛马,满足什么分布呢?很难说吧!而在生成模型中,KL散度却被广泛应用,原因是因为生成模型中假定了其分布为正态分布。后续有时间会写VQ-VAE一些生成模型,在介绍吧。

3.相对熵( KL散度)

公式: D K L ( P ∣ ∣ Q ) = − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) P ( x i ) ) D_{KL}(P||Q) = -\sum_{i=1}^nP(x_i)log(\frac{Q(x_i)}{P(x_i)}) DKL(P∣∣Q)=i=1nP(xi)log(P(xi)Q(xi))
在2.1中已经隐藏的介绍了KL散度,这其实完全是用来衡量两个概率分布之间的相似性。KL=0,则完全表明Q(x)=P(x),预测值跟真实值一样。其在生成模型中应用较为广泛

4.极大释然估计

释然函数:
L ( θ ) = ∏ i = 0 n Q ( x i , θ ) L (\theta)= \prod_{i = 0}^{n}Q(x_i,\theta) L(θ)=i=0nQ(xi,θ)
优化释然函数,当所有随机变量概率相乘得到最大L时,此时的 θ \theta θ为最优解
等价于优化取对数最大值结果 l o g ( L ( θ ) ) = ∑ i = 0 n Q ( x i , θ ) log(L (\theta))= \sum_{i = 0}^{n}Q(x_i,\theta) log(L(θ))=i=0nQ(xi,θ)
等价于优化取相反数最小结果 − l o g ( L ( θ ) ) = − ∑ i = 0 n l o g ( Q ( x i , θ ) ) -log(L (\theta))=- \sum_{i = 0}^{n}log(Q(x_i,\theta)) log(L(θ))=i=0nlog(Q(xi,θ))
等价于优化取均值最小结果 E ( . . . ) = − E x ∼ Q ∑ i = 0 n l o g ( Q ( x i , θ ) ) E(...)=- E_{x\sim Q}\sum_{i = 0}^{n}log(Q(x_i,\theta)) E(...)=ExQi=0nlog(Q(xi,θ)),
由于Q分布最终预测是近似P分布,所以 E ( . . . ) ≈ E x ∼ P ∑ i = 0 n l o g ( Q ( x i , θ ) ) E(...)\approx E_{x\sim P}\sum_{i = 0}^{n}log(Q(x_i,\theta)) E(...)ExPi=0nlog(Q(xi,θ)),
上式就是交叉熵的公式H(P,Q)。
因此最终我们得到以下结论:
优化极大释然函数=优化最小值交叉熵=优化最小值KL散度

5.备注参考说明

备注:文中所有真实分布为p或P,预测分布为q或Q。
参考:
https://zhuanlan.zhihu.com/p/35423404
https://blog.csdn.net/SongGu1996/article/details/99056721
https://zhuanlan.zhihu.com/p/38853901


http://www.mrgr.cn/p/22524588

相关文章

npm、yarn与pnpm详解

🔥 npm、yarn与pnpm详解 🔖 一、npm 🔍 简介: npm是随Node.js一起安装的官方包管理工具,它为开发者搭建了一个庞大的资源库,允许他们在这个平台上搜索、安装和管理项目所必需的各种代码库或模块。 &#…

面向对象三大特征(python)

目录 1. 封装 为什么使用封装? 如何实现封装? 一个简单的封装示例 二.继承 为什么使用继承? 如何实现继承? 一个简单的继承示例 使用继承的好处 三.多态 为什么使用多态? 如何实现多态? 一个简…

Django模型继承之多表继承

在Django模型继承中,支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表,并且可以被独立查询和创建。在继承关系中,子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

4.26日学习记录

[湖湘杯 2021 final]Penetratable SUID提权 SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限 SUID具有一定的限制: 1.仅对于二进制有效; 2.执行者在程序中有可以执行的权限; 3.权限仅在程序…

公开课学习——基于索引B+树精准建立高性能索引

文章目录 遇到慢查询怎么办?—— 创建索引联合索引的底层的数据存储结构长什么样? mysql脑图 阿里开发手册 遇到慢查询怎么办?—— 创建索引 不用索引的话一个一个找太慢了,用索引就快的多。 假如使用树这样的结构建立索引&#x…

[Algorithm][前缀和][和为K的子数组][和可被K整除的子数组][连续数组][矩阵区域和]详细讲解

目录 1.和为 K 的子数组1.题目链接2.算法原理详解3.代码实现 2.和可被 K 整除的子数组1.题目链接2.算法原理详解3.代码实现 3.连续数组1.题目链接2.算法原理详解3.代码实现 4.矩阵区域和1.题目链接2.算法原理详解3.代码实现 1.和为 K 的子数组 1.题目链接 和为 K 的子数组 2.…

数据可视化-ECharts Html项目实战(14)

在之前的文章中,我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Html项目实战(…

【蓝桥杯2025备赛】素数判断:从O(n^2)到O(n)学习之路

素数判断:从O( n 2 n^2 n2)到O(n)学习之路 背景:每一个初学计算机的人肯定避免不了碰到素数,素数是什么,怎么判断? 素数的概念不难理解:素数即质数,指的是在大于1的自然数中,除了1和它本身不再有其他因数的自然数。 …

动手写sql 《牛客网80道sql》

第1章:SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件,用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…

mac安装nvm详细教程

0. 前提 清除电脑上原有的node (没有装过的可以忽略)1、首先查看电脑上是否安装的有node,查看node版本node -v2、如果有node就彻底删除nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}2、保证自己的电脑上有安装git,不然下载n…

Unity之OpenXR+XR Interaction Toolkit快速监听手柄任意按键事件

前言 当我们开发一个VR时,有时希望监听一个手柄按键的点击事件,或者一个按钮的Value值等。但是每次有可能监听的按钮有不一样,有可能监听的值不一样,那么每次这么折腾,有点累了,难道就没有一个万能的方法,让我可以直接监听我想要的某个按钮的事件么? 答案是肯定的,今…

Docker基本管理和虚拟化

一、docker的发展历史 https://www.cnblogs.com/rongba/articles/14782624.htmlhttps://www.cnblogs.com/rongba/articles/14782624.html 二、docker的概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行…

URL地址解析至页面展示全过程(面试详细解答)

目录 1、解析URL 2、缓存判断 ​3、DNS解析 ​4、获取MAC地址 5、TCP三次握手 6、HTTP请求 7、服务器处理请求,返回HTTP响应 8、页面渲染 9、TCP四次挥手 10、浏览器解析HTML 11、浏览器布局渲染 1、解析URL 首先会对 URL 进行解析,分析所需…

SpringMVC基础篇(二)

文章目录 1.Postman1.基本介绍Postman是什么? 2.Postman快速入门1.Postman下载点击安装自动安装在系统盘 2.基本操作1.修改字体大小2.ctrl “” 放大页面3.进入创建请求界面 2.需求分析3.具体操作4.保存请求到文件夹中1.点击保存2.创建新的文件夹3.保存成功 3.使用…

【注释和反射】获取class类实例的方法

目录 一、获取一个类的Class对象的几种方法 代码 二、哪些类型可以有Class对象? 代码 一、获取一个类的Class对象的几种方法 Class对象是访问类元数据的入口,通过它可以获取类的名称、方法、字段、构造器、注解等信息,还可以创建类的实例…

xgp怎么注册阿根廷账号 微软商店xgp阿根廷账号注册教程

xgp怎么注册阿根廷账号 微软商店xgp阿根廷账号注册教程 xgp游戏平台是微软公司针对pc用户开发的一款游戏平台,在平台内有着知名的月包服务,玩家们只需每个月支付固定的费用,即可免费玩到不同的游戏大作,xgp平台也正是由月包服务…

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动 {%- for article in blog.articles -%}<div class"blog-articles__article article">{%- render article-card,article: article,media_height: section.settings.image_height,media_aspect_ratio: a…

基于K-prototype算法聚类

k-prototype聚类是一种用于混合数据类型聚类的算法&#xff0c;由Jain和Dubes在1988年提出。它主要用于同时包含连续属性和离散属性的数据集。k-prototype算法可以看作是k-means算法的扩展&#xff0c;它将k-means算法的思想应用于混合数据类型&#xff0c;通过为连续属性和离散…

屏幕状态自动检测+鼠标自动操作

目录 一、写在前面 1.1适用场景 1.2涉及到的库 二、函数库 2.1pyautogui-屏幕截图&鼠标操作 2.1.1屏幕截图screenshot函数 2.1.2鼠标移动及单击 2.2Opencv-模板匹配 2.2.1matchTemplate函数 2.2.2minMaxLoc函数 2.2.3相关代码 2.3base64-图片转base64 2.3.1在线…

[Linux_IMX6ULL驱动开发]-设备树简述

目录 设备树的引入 设备树具体框架 设备树的属性 label address-cells和size-cells compatible model status reg 设备树的编译 内核对设备树的处理 plateform_device如何对应plateform_driver 设备树的引入 之前已经学习了解过了总线驱动模型的概念&#xff0c;也…