深入理解机器学习中的信息熵、KL散度、交叉熵

通用的说,熵(Entropy)被用于描述一个系统中的不确定性(the uncertainty of a system)。在不同领域熵有不同的解释,比如热力学的定义和信息论也不大相同。要想明白交叉熵(Cross Entropy)的意义,可以从熵(Entropy) -> KL散度(Kullback-Leibler Divergence) -> 交叉熵这个顺序入手。

先给出一个“接地气但不严谨”的概念表述:

  • 熵:可以表示一个事件A的自信息量,也就是A包含多少信息。
  • KL散度:可以用来表示从事件A的角度来看,事件B有多大不同。
  • 交叉熵:可以用来表示从事件A的角度来看,如何描述事件B。

一句话总结的话:KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价。

信息量

任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同。如昨天下雨这个已知事件,因为已经发生,既定事实,那么它的信息量就为0。如明天会下雨这个事件,因为未有发生,那么这个事件的信息量就大。从上面例子可以看出信息量是一个与事件发生概率相关的概念,而且可以得出,事件发生的概率越小,其信息量越大。这也很好理解,狗咬人不算信息,人咬狗才叫信息嘛。

我们已知某个事件的信息量是与它发生的概率有关,那我们可以通过如下公式计算信息量:

h(x)=−log⁡2p(x)h(x)=-\log _{2} p(x)h(x)=log2p(x)

熵(Entropy)

我们知道:当一个事件发生的概率为 p(x),p(x),p(x), 那么它的信息量是 −log⁡2p(x)-\log_2p(x)log2p(x) ,那么如果我们把这个事件的所有可能性罗列出来, 就可以求得该事件信息量的期望,即信息量的期望就是熵, 所以熵的公式为:

假设事件 XXX 共有n种可能, 发生 xix_{i}xi 的概率为 p(xi),p\left(x_{i}\right),p(xi), 那么该事件的熵 H(X)H(X)H(X) 为:
H(X)=−∑i=1np(xi)log⁡(p(xi))H(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)H(X)=i=1np(xi)log(p(xi))

KL散度

我们上面说的是对于一个随机变量x的事件A的自信息量,如果我们有另一个独立的随机变量x相关的事件B,该怎么计算它们之间的区别?

此处我们介绍默认的计算方法:KL散度,有时候也叫KL距离,一般被用于计算两个分布之间的不同。看名字似乎跟计算两个点之间的距离也很像,但实则不然,因为KL散度不具备有对称性。在距离上的对称性指的是A到B的距离等于B到A的距离。

举个不恰当的例子,事件A:张三今天买了2个土鸡蛋,事件B:李四今天买了6个土鸡蛋。我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了"坐标系"的问题。换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。选取的参照物不同,那么得到的结果也不同。更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。

KL散度的数学定义:

对于离散事件我们可以定义事件A和B的差别为:
DKL(A∥B)=∑iPA(xi)log⁡(PA(xi)PB(xi))=∑iPA(xi)log⁡(PA(xi))−PA(xi)log⁡(PB(xi))D_{K L}(A \| B)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(\frac{P_{A}\left(x_{i}\right)}{P_{B}\left(x_{i}\right)}\right)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{A}\left(x_{i}\right)\right)-P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)DKL(AB)=iPA(xi)log(PB(xi)PA(xi))=iPA(xi)log(PA(xi))PA(xi)log(PB(xi))
对于连续事件,那么我们只是把求和改为求积分而已
DKL(A∥B)=∫a(x)log⁡(a(x)b(x))D_{K L}(A \| B)=\int a(x) \log \left(\frac{a(x)}{b(x)}\right)DKL(AB)=a(x)log(b(x)a(x))

从公式中可以看出:

  • 如果 PA=PBP_{A}=P_{B}PA=PB ,即两个事件分布完全相同, 那么KL散度等于0。
  • 减号左边的就是事件A的熵,请记住这个发现。 如果颠倒一下顺序求 DKL(B∣∣A),D_{K L}(B|| A),DKL(BA), 那么就需要使用B的熵, 答案就不一样了。所以KL散度来计算两个分布A与B的时候是不是对称的,有 “坐标系" 的问题, DKL(A∥B)≠DKL(B∥A)D_{K L}(A \| B) \neq D_{K L}(B \| A)DKL(AB)=DKL(BA)

在机器学习中,A往往用来表示样本的真实分布,B用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss损失值。

交叉熵

先上结论: KL散度 = 交叉熵 - 熵(注意正负号)DKL(A∥B)=−S(A)+H(A,B)D_{K L}(A \| B)=-S(A)+H(A, B)DKL(AB)=S(A)+H(A,B)

对比一下这是KL散度的公式:
DKL(A∥B)=∑iPA(xi)log⁡(PA(xi)PB(xi))=∑iPA(xi)log⁡(PA(xi))−PA(xi)log⁡(PB(xi))D_{K L}(A \| B)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(\frac{P_{A}\left(x_{i}\right)}{P_{B}\left(x_{i}\right)}\right)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{A}\left(x_{i}\right)\right)-P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)DKL(AB)=iPA(xi)log(PB(xi)PA(xi))=iPA(xi)log(PA(xi))PA(xi)log(PB(xi))这是熵的公式:
S(A)=−∑iPA(xi)log⁡PA(xi)S(A)=-\sum_{i} P_{A}\left(x_{i}\right) \log P_{A}\left(x_{i}\right)S(A)=iPA(xi)logPA(xi)这是交叉熵公式:
H(A,B)=−∑iPA(xi)log⁡(PB(xi))H(A, B)=-\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)H(A,B)=iPA(xi)log(PB(xi))

如果 S(A)S(A)S(A) 是一个常量, 那么 KL散度和交叉熵是等价的。在机器学习中, 为了让学到的模型分布更贴近真实数据分布, 我们最小化 模型数据分布 与 训练 数据之间的KL散度,而因为训练数据的分布是固定的,即S是常数,因此最小化KL散度等价于最小化交叉熵。

reference
https://www.zhihu.com/question/65288314/answer/230209104
https://www.zhihu.com/question/65288314/answer/244557337

### 信息熵 信息熵是一种衡量随机变量不确定性的指标。对于离型随机变量 \(X\),其概率质量函数为 \(P(X)\),则信息熵定义如下: \[ H(X) = - \sum_{i=1}^{n} P(x_i) \log_2(P(x_i)) \] 其中,\(P(x_i)\) 表示事件 \(x_i\) 发生的概率[^1]。 信息熵越高,则系统的不确定性越大;反之亦然。 --- ### 交叉熵 交叉熵是用来衡量两个概率分布之间差异的一种方法,在机器学习中广泛应用于分类任务中的损失计算。假设真实分布为 \(P\),预测分布为 \(Q\),那么交叉熵可以表示为: \[ H(P, Q) = - \sum_{i=1}^{n} P(x_i) \log(Q(x_i)) \] 这里需要注意的是,交叉熵不仅依赖于真实的概率分布 \(P\),还取决于模型预测概率分布 \(Q\)。因此,它是评估模型性能的重要工具之一[^2]。 --- ### KL KL (Kullback-Leibler divergence),也称为相对熵,用于量化两个概率分布之间的差异程。给定两个概率分布 \(P\) \(Q\),KL 的公式为: \[ D_{KL}(P || Q) = \sum_{i=1}^{n} P(x_i) \log{\frac{P(x_i)}{Q(x_i)}} \] 值得注意的是,KL 具有 **非对称性** **非负性** 的特点。即通常情况下 \(D_{KL}(P || Q) \neq D_{KL}(Q || P)\)[^3]。 --- ### JS JS (Jensen-Shannon divergence)是对称版本的 KL ,解决了 KL 不对称的问题。它通过引入中间分布来实现这一点。设 \(M = \frac{1}{2}(P + Q)\),则 JS 可写成: \[ D_{JS}(P || Q) = \frac{1}{2} D_{KL}(P || M) + \frac{1}{2} D_{KL}(Q || M) \] 由于 JS 基于 KL 构建,所以它的取值范围在 \([0, 1]\) 内,并且满足对称性有限性条件。 --- ### 定义区别与联系 | 指标 | 描述 | |------------|------------------------------------------------------------------------------------------| | **信息熵** | 测量单个随机变量本身的不确定性 | | **交叉熵** | 量两个概率分布间的差异,主要用于监督学习中的目标优化 | | **KL ** | 计算一个分布相对于另一个分布的信息增益或“距离”,是非对称的 | | **JS ** | 基于 KL 改进而来,解决非对称问题并提供更稳定的数值表现 | 这些概念都属于信息论范畴,但在实际应用中有不同的侧重点。例如,交叉熵被频繁用作神经网络训练的目标函数,而 KL 更多地出现在变分推断等领域。 --- ### 在机器学习深度学习中的作用 - **信息熵**:帮助理解数据集内部结构以及特征的重要性。 - **交叉熵**:作为分类任务的核心损失函数,指导模型参数调整以最小化误差。 - **KL **:适用于生成对抗网络 (GANs) 或变分自编码器 (VAEs) 中隐空间分布匹配的任务。 - **JS **:相比 KL 更加稳定可靠,尤其适合处理不平衡样本情况下的相似比较场景。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值