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

news/2024/9/23 23:06:29/

熵的最初来源于热力学。在热力学中,熵代表了系统的无序程度或混乱程度,也可以理解为系统的热力学状态的一种度量。后来被广泛引用于各个领域中,如信息学、统计学、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.ppmy.cn/news/1439660.html

相关文章

Vue.js(Axios)

Axios 什么是: Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 何时: 主要用于创建请求在浏览器中,创建xhr请求; 在node.js中,创建普通http请求 为什么: 浏览器中创建xhr请求: 4种方案: (1)使用原生XHR对象—…

【目标检测】FPN特征金字塔完整流程详解

学习视频:1.1.2 FPN结构详解 对比 可以看到FPN是自上而下、自下而上并且可以进行多尺度特征融合的的层级结构。 具体结构 1x1 conv: 对通道数进行调整,不同大小的特征图通道数不同,越高层次的特征图通道数越大,论文中使用256个1…

uni-app中配置自定义条件编译

前提:官网提供的自定义编译不满足条件 package.json | uni-app官网 下文:不详细写,主要写关键思路 package.json文件 主要看scripts的执行命令,其他依赖就是用vue-cli方式创建uni-app项目生成的 {"name": "un…

每日一题:对比Vector、ArrayList、LinkedList有何区别❓

Vector🍑 线程安全:Vector 是同步的,因此它是线程安全的。但这也意味着它在单线程环境下的性能比非同步类 ArrayList 要低。数据增长:当需要增加容量时,Vector 默认增长为原来的两倍,这个增长率是可以自定…

Kafka 3.x.x 入门到精通(04)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通(04)——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.5 存储消息2.5.1 存储组件2.5.2 数据存储2.5.2.1 ACKS校验2.5.2.2 内部主题校验2.5.2.3 ACKS应答及副本数量关系校验2.5.2.4 日志文…

机器学习|决策树|Gini指数和熵的区别|简单示例

如是我闻: 在决策树模型中,Gini指数和熵(Entropy)是用来计算节点纯度的两种方法。它们都是评估分裂点的好坏,以选择最佳的属性来分裂。让我们先来了解一下这两种方法的定义,然后通过一个简单的例子来讨论它…

C#中对象类型转换

对象类型转换通常有两种情况: 一种是当需要转化对象的类型属于转换目标类型或者转换目标类型的派生类型两个对象没有关系,但属性和方法一样。 1. 针对第一种情况可以使用as进行对象转换 public class StudentInfo{public string Name;public int Age;…

【Linux】HTTP协议2

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:题目解析 🌎推荐文章:承接上文【Linux】HTTP协议1 目录 👉🏻HTTP方法👉🏻HTTP状态码&…