随笔 - 76  文章 - 0  评论 - 119  阅读 - 194万

深度学习中交叉熵和KL散度和最大似然估计之间的关系

机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的。

熵和交叉熵

提到交叉熵就需要了解下信息论中熵的定义。信息论认为:

确定的事件没有信息,随机事件包含最多的信息。

事件信息的定义为:I(x)=log(P(x));而熵就是描述信息量:H(x)=ExP[I(x)],也就是H(x)=ExP[log(P(x))]=ΣxP(x)log(P(x))。如果log的base是2,熵可以认为是衡量编码对应的信息需要的最少bits数;那么交叉熵就是来衡量用特定的编码方案Q来对分布为P的信息x进行编码时需要的最少的bits数。定义如下:
H(P,Q)=ΣxP(x)log(Q(x))
在深度学习中,P是gt label的真实分布;Q就是网络学习后输出的分布。

最大似然估计

机器学习中,通过最大似然估计方法使参数为Θ^的模型使预测值贴近真实数据的概率最大化,即Θ^=arg maxθΠi=1Np(xi|Θ)。实际操作中,连乘很容易出现最大值或最小值溢出,造成计算不稳定,由于log函数的单调性,所以将上式进行取对数取负,最小化负对数似然(NLL)的结果与原始式子是一样的,即Θ^=arg minΘΣi=1Nlog(p(xi|Θ)).

对模型的预测值进行最大似然估计,
Θ^=arg minΘΣi=1Nlog(q(xi|Θ))
=argminΘΣxXp(x)log(q(x|Θ))
=arg minΘH(p,q)

所以最小化NLL和最小化交叉熵最后达到的效果是一样的。

KL散度

在深度学习中,KL散度用来评估模型输出的预测值分布与真值分布之间的差异,定义如下:DKL(P||Q)=Exlog(P(x)/Q(x))
DKL(P||Q)=Σx=1NP(x)log(P(x)/Q(x))
=Σx=1NP(x)[logP(x)logQ(x)]

注意:KL散度不是标准的距离,因为不满足互换性,即DKL(P||Q)DKL(Q||P)
对于交叉熵:
H(P,Q)=ΣPlogQ
=ΣPlogP+ΣPlogPΣPlogQ
=H(P)+ΣPlogP/Q
=H(P)+DKL(P||Q)

也就是交叉熵就是真值分布的熵与KL散度的和,而真值的熵是确定的,与模型的参数Θ无关,所以梯度下降求导时 H(P,Q)=DKL(P||Q),也就是说最小化交叉熵与最小化KL散度是一样的。

总结

从优化模型参数角度来说,最小化交叉熵,NLL,KL散度这3种方式对模型参数的更新来说是一样的。从这点来看也解释了为什么在深度学习中交叉熵是非常常用的损失函数的原因了。

参考:

https://jhui.github.io/2017/01/05/Deep-learning-Information-theory/

posted on   Arkenstone  阅读(6842)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2018-03-13 利用opencv进行移动物体检测
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示