熵与交叉熵:从不确定性角度理解 KL 散度

从不确定性减少视角理解KL散度

【 Transformer 系列,故事从 d k \sqrt{d_k} dk 说起

LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看!

它长这个样子: 深入浅出 Transformer

看完后,想起了老生常谈 d k \sqrt{d_k} dk 问题,必须一探究竟:Transformer 中缩放点积注意力机制探讨:除以根号 dk 理由及其影响

感觉不够清楚,还是再Review下考研概率论,有了:基于考研概率论知识解读 Transformer:为何自注意力机制要除以根号 dk,中间会涉及初始化、标准化、Sofrmax函数,于是继续

【初始化相关】:深度学习中的常见初始化方法:原理、应用与比较
【标准化系列】: 数据为什么要进行标准化:Z-标准化的神奇蜕变,带出了关联知识点: 深度 “炼丹” 术之 Batch Normalization 与 Z - 标准化:开启数据的神秘转换
【Softmax复习】:Softmax 层反向传播梯度计算实例解析,中间想到了经常配套使用的交叉熵,于是梳理了交叉熵的前世今生

KL 散度:多维度解读概率分布间的隐秘 “距离”
熵与交叉熵:从不确定性角度理解 KL 散度
机器学习、深度学习关于熵你所需要知道的一切

本文核心

  • 由于熵表征不确定性大小,且基于真实分布 P P P 本身编码是最“有效”的方式(即不确定性最小),所以当使用其他分布 Q Q Q 来近似 P P P 进行编码时,必然会引入更多的不确定性,也就意味着交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 肯定会比熵 H ( P ) H(P) H(P)
  • D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=H(P, Q)-H(P) DKL(P∣∣Q)=H(P,Q)H(P),即:KL散度 = 交叉熵[H(P, Q)]-熵[H(Q)],鉴于交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 大于等于熵 H ( P ) H(P) H(P),KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 必然是非负的。
  • 由于真实分布 其熵 H ( P ) H(P) H(P) 是一个固定值,所以最小化 KL 散度等价于最小化交叉熵 H ( P , Q ) H(P, Q) H(P,Q),即
    min ⁡ Q D K L ( P ∣ ∣ Q ) = min ⁡ Q ( H ( P , Q ) − H ( P ) ) = min ⁡ Q H ( P , Q ) \min_{Q} D_{KL}(P||Q)=\min_{Q}(H(P, Q)-H(P))=\min_{Q} H(P, Q) QminDKL(P∣∣Q)=Qmin(H(P,Q)H(P))=QminH(P,Q)这就解释了为何机器/深度学习领域将交叉熵作为损失函数。

引言

在信息论与概率统计的交融领域,KL散度(Kullback - Leibler Divergence)扮演着举足轻重的角色。从不确定性减少的独特视角深入探究KL散度,不仅能揭示其本质内涵,还能为诸多实际应用提供清晰的理论支撑。而在这个过程中,理解熵、交叉熵以及它们之间的关系至关重要,尤其要明确熵是表达不确定性大小的量,并且交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 必然大于等于熵 H ( P ) H(P) H(P)

在这里插入图片描述


一、信息熵:不确定性的精准度量

(一)信息熵的定义与本质

信息熵 H ( P ) H(P) H(P) 作为衡量概率分布 P P P 不确定性程度的核心指标,其数学表达式为: H ( P ) = − ∑ i P ( x i ) log ⁡ P ( x i ) H(P)=-\sum_{i}P(x_i)\log P(x_i) H(P)=iP(xi)logP(xi)其中, x i x_i xi 涵盖了随机变量所有可能的取值, P ( x i ) P(x_i) P(xi) 则代表取值 x i x_i xi 出现的概率。信息熵本质上量化了从分布 P P P 中随机抽取一个事件时,平均所蕴含的信息量。由于熵是表达不确定性大小的,分布的不确定性程度越高,对应的信息熵数值越大。

例如,考虑一个均匀的六面骰子,每个面向上的概率均为 1 6 \frac{1}{6} 61。在此情形下,每次掷骰子的结果都具有较高的不确定性,其信息熵也相对较大。这是因为在掷骰子之前,我们难以准确预测哪个面会朝上,每个结果都带来了较多的“意外”信息。反之,若骰子经过特殊处理,使得某一面出现的概率为1,而其他面为0,此时该骰子的结果几乎没有不确定性,信息熵也就趋近于0。

(二)信息熵的直观理解

可以将信息熵看作是对随机事件结果“混乱程度”或“不可预测性”的一种度量。以抛硬币为例,一枚标准的硬币,正面和反面出现的概率各为 0.5 0.5 0.5,其信息熵相对较高,因为在抛硬币之前,我们无法确切知晓结果是正面还是反面。而如果硬币被做了手脚,总是正面朝上,那么它的信息熵就为0,因为结果完全确定,没有任何不确定性。

二、交叉熵:近似分布下的不确定性测度

(一)交叉熵的定义与作用

当我们尝试使用另一个概率分布 Q Q Q 来近似真实的概率分布 P P P 时,交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 便成为了衡量这种近似效果的重要工具。其计算公式为: H ( P , Q ) = − ∑ i P ( x i ) log ⁡ Q ( x i ) H(P, Q)=-\sum_{i}P(x_i)\log Q(x_i) H(P,Q)=iP(xi)logQ(xi)交叉熵的意义在于,它反映了在采用分布 Q Q Q 对源于分布 P P P 的事件进行编码、预测或描述时,平均所需要的信息量。

由于熵表征不确定性大小,且基于真实分布 P P P 本身编码是最“有效”的方式(即不确定性最小),所以当使用其他分布 Q Q Q 来近似 P P P 进行编码时,必然会引入更多的不确定性,也就意味着交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 肯定会比熵 H ( P ) H(P) H(P)

例如,假设我们正在预测明天的天气状况,真实的天气概率分布 P P P 为晴天 60 % 60\% 60%、多云 30 % 30\% 30%、下雨 10 % 10\% 10%。然而,由于某些原因,我们错误地认为概率分布 Q Q Q 是晴天 30 % 30\% 30%、多云 30 % 30\% 30%、下雨 40 % 40\% 40%。在这种情况下,基于错误的分布 Q Q Q 来预测明天天气,相较于基于真实分布 P P P 预测,必然会带来更多的不确定性,即交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 大于熵 H ( P ) H(P) H(P)。这表明使用不恰当的分布 Q Q Q 进行预测时,我们对预测结果更加不确定,需要更多的信息量来描述这种预测情况。

(二)交叉熵与信息熵的关系

交叉熵与信息熵密切相关,信息熵 H ( P ) H(P) H(P) 可以视为交叉熵 H ( P , P ) H(P, P) H(P,P) 的特殊情况,即当我们使用真实分布 P P P 自身来对事件进行编码或预测时的平均信息量。而交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 则衡量了使用近似分布 Q Q Q 替代真实分布 P P P 时,信息量的变化情况。由于熵代表了基于真实分布的最小不确定性,所以交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 总是大于等于 H ( P ) H(P) H(P)

(三)举个🌰

二分类例子

假设我们要判断一封邮件是垃圾邮件还是正常邮件。真实情况中,邮件是垃圾邮件的概率为 P ( 垃圾邮件 ) = 0.8 P(\text{垃圾邮件}) = 0.8 P(垃圾邮件)=0.8,是正常邮件的概率为 P ( 正常邮件 ) = 0.2 P(\text{正常邮件}) = 0.2 P(正常邮件)=0.2,即真实分布 P P P 为: P = [ 0.8 , 0.2 ] P = [0.8, 0.2] P=[0.8,0.2]

某邮件分类模型对邮件类别的预测概率分布 Q Q Q 为:认为是垃圾邮件的概率 Q ( 垃圾邮件 ) = 0.6 Q(\text{垃圾邮件}) = 0.6 Q(垃圾邮件)=0.6,是正常邮件的概率 Q ( 正常邮件 ) = 0.4 Q(\text{正常邮件}) = 0.4 Q(正常邮件)=0.4,即 Q = [ 0.6 , 0.4 ] Q = [0.6, 0.4] Q=[0.6,0.4]

根据交叉熵公式 H ( P , Q ) = − ∑ i P ( x i ) log ⁡ Q ( x i ) H(P, Q)=-\sum_{i}P(x_i)\log Q(x_i) H(P,Q)=iP(xi)logQ(xi),计算过程如下:

H ( P , Q ) = − ( P ( 垃圾邮件 ) log ⁡ Q ( 垃圾邮件 ) + P ( 正常邮件 ) log ⁡ Q ( 正常邮件 ) ) = − ( 0.8 × log ⁡ ( 0.6 ) + 0.2 × log ⁡ ( 0.4 ) ) \begin{align*} H(P, Q)&= - (P(\text{垃圾邮件})\log Q(\text{垃圾邮件}) + P(\text{正常邮件})\log Q(\text{正常邮件}))\\ &= - (0.8\times\log(0.6) + 0.2\times\log(0.4)) \end{align*} H(P,Q)=(P(垃圾邮件)logQ(垃圾邮件)+P(正常邮件)logQ(正常邮件))=(0.8×log(0.6)+0.2×log(0.4))

以自然常数 e e e 为底计算对数(实际应用中也可根据需求选择以2为底等):

H ( P , Q ) ≈ − ( 0.8 × ( − 0.5108 ) + 0.2 × ( − 0.9163 ) ) = − ( − 0.4086 − 0.1833 ) = − ( − 0.5919 ) = 0.5919 \begin{align*} H(P, Q)&\approx - (0.8\times(-0.5108) + 0.2\times(-0.9163))\\ &= - (-0.4086 - 0.1833)\\ &= - (-0.5919)\\ &= 0.5919 \end{align*} H(P,Q)(0.8×(0.5108)+0.2×(0.9163))=(0.40860.1833)=(0.5919)=0.5919

多分类例子

假设我们要对一幅图像进行分类,判断它是汽车、飞机、轮船、火车这四类交通工具中的哪一类。真实分布 P P P 如下:

  • P ( 汽车 ) = 0.4 P(\text{汽车}) = 0.4 P(汽车)=0.4
  • P ( 飞机 ) = 0.2 P(\text{飞机}) = 0.2 P(飞机)=0.2
  • P ( 轮船 ) = 0.3 P(\text{轮船}) = 0.3 P(轮船)=0.3
  • P ( 火车 ) = 0.1 P(\text{火车}) = 0.1 P(火车)=0.1

某图像分类模型给出的预测概率分布 Q Q Q 为:

  • Q ( 汽车 ) = 0.3 Q(\text{汽车}) = 0.3 Q(汽车)=0.3
  • Q ( 飞机 ) = 0.3 Q(\text{飞机}) = 0.3 Q(飞机)=0.3
  • Q ( 轮船 ) = 0.2 Q(\text{轮船}) = 0.2 Q(轮船)=0.2
  • Q ( 火车 ) = 0.2 Q(\text{火车}) = 0.2 Q(火车)=0.2

根据交叉熵公式 H ( P , Q ) = − ∑ i P ( x i ) log ⁡ Q ( x i ) H(P, Q)=-\sum_{i}P(x_i)\log Q(x_i) H(P,Q)=iP(xi)logQ(xi),计算过程如下:

H ( P , Q ) = − ( P ( 汽车 ) log ⁡ Q ( 汽车 ) + P ( 飞机 ) log ⁡ Q ( 飞机 ) + P ( 轮船 ) log ⁡ Q ( 轮船 ) + P ( 火车 ) log ⁡ Q ( 火车 ) ) = − ( 0.4 × log ⁡ ( 0.3 ) + 0.2 × log ⁡ ( 0.3 ) + 0.3 × log ⁡ ( 0.2 ) + 0.1 × log ⁡ ( 0.2 ) ) \begin{align*} H(P, Q)&= - (P(\text{汽车})\log Q(\text{汽车}) + P(\text{飞机})\log Q(\text{飞机}) + P(\text{轮船})\log Q(\text{轮船}) + P(\text{火车})\log Q(\text{火车}))\\ &= - (0.4\times\log(0.3) + 0.2\times\log(0.3) + 0.3\times\log(0.2) + 0.1\times\log(0.2)) \end{align*} H(P,Q)=(P(汽车)logQ(汽车)+P(飞机)logQ(飞机)+P(轮船)logQ(轮船)+P(火车)logQ(火车))=(0.4×log(0.3)+0.2×log(0.3)+0.3×log(0.2)+0.1×log(0.2))

以自然常数 e e e 为底计算对数:

H ( P , Q ) ≈ − ( 0.4 × ( − 1.2040 ) + 0.2 × ( − 1.2040 ) + 0.3 × ( − 1.6094 ) + 0.1 × ( − 1.6094 ) ) = − ( − 0.4816 − 0.2408 − 0.4828 − 0.1609 ) = − ( − 1.3661 ) = 1.3661 \begin{align*} H(P, Q)&\approx - (0.4\times(-1.2040) + 0.2\times(-1.2040) + 0.3\times(-1.6094) + 0.1\times(-1.6094))\\ &= - (-0.4816 - 0.2408 - 0.4828 - 0.1609)\\ &= - (-1.3661)\\ &= 1.3661 \end{align*} H(P,Q)(0.4×(1.2040)+0.2×(1.2040)+0.3×(1.6094)+0.1×(1.6094))=(0.48160.24080.48280.1609)=(1.3661)=1.3661

在上述两个例子中,交叉熵的值反映了模型预测分布与真实分布之间的差异程度。值越小,说明模型预测分布与真实分布越接近,模型性能相对越好;值越大,则表明两者差异越大,模型可能需要进一步优化。

三、KL散度:不确定性变化的量化桥梁

(一)KL散度的定义推导

KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 通过信息熵和交叉熵的关系来定义,即: D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=H(P, Q)-H(P) DKL(P∣∣Q)=H(P,Q)H(P)
即:KL散度 = 交叉熵[H(P, Q)]-熵[H(Q)],鉴于交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 大于等于熵 H ( P ) H(P) H(P),KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 必然是非负的。从不确定性减少的角度深入剖析,KL散度精准地刻画了在使用分布 Q Q Q 近似分布 P P P 的过程中,相较于分布 P P P 本身所具有的不确定性,所额外增加的不确定性量(当 D K L ( P ∣ ∣ Q ) = 0 D_{KL}(P||Q)=0 DKL(P∣∣Q)=0 时,表示 Q Q Q P P P 完全相同,没有额外增加不确定性)。

(二)KL散度的数值含义

D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 的值较大,这明确表明使用分布 Q Q Q 近似分布 P P P 时,引入了大量额外的不确定性。以之前的天气预测为例,如果我们基于错误的分布 Q Q Q 来做预测,会发现预测结果的不确定性比基于真实分布 P P P 时更高,即我们对预测结果的把握程度降低。这清晰地反映出分布 Q Q Q 与真实分布 P P P 之间存在较大的差异。

反之,若 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 接近0,这意味着使用分布 Q Q Q 近似分布 P P P 时,几乎没有引入额外的不确定性。这表明分布 Q Q Q 与分布 P P P 非常接近,在实际应用中,例如在文本分类任务里,若真实文本类别分布为 P P P,模型预测的类别分布为 Q Q Q,当 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 趋近于0时,说明模型预测分布与真实分布高度吻合,模型对文本类别的预测不确定性与真实情况相近,也就意味着模型性能良好。

(三)举个🌰

交叉熵H(P,Q)- 熵H(P)计算 show case

下面的计算过程中,也是对上面结论的一个验证,即:交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 肯定会比熵 H ( P ) H(P) H(P)

  1. 二分类例子

    • 定义概率分布
      假设在一个判断用户是否点击广告的场景中,真实的点击与未点击的概率分布 P P P 为:点击概率 P ( 点击 ) = 0.2 P(\text{点击}) = 0.2 P(点击)=0.2,未点击概率 P ( 未点击 ) = 0.8 P(\text{未点击}) = 0.8 P(未点击)=0.8
      某个预测模型给出的概率分布 Q Q Q 为:点击概率 Q ( 点击 ) = 0.3 Q(\text{点击}) = 0.3 Q(点击)=0.3,未点击概率 Q ( 未点击 ) = 0.7 Q(\text{未点击}) = 0.7 Q(未点击)=0.7
    • 计算熵 H ( P ) H(P) H(P)
      根据熵的公式 H ( P ) = − ∑ i P ( x i ) log ⁡ P ( x i ) H(P)=-\sum_{i}P(x_i)\log P(x_i) H(P)=iP(xi)logP(xi),对于这个二分类问题:
      H ( P ) = − P ( 点击 ) log ⁡ P ( 点击 ) − P ( 未点击 ) log ⁡ P ( 未点击 ) = − 0.2 × log ⁡ ( 0.2 ) − 0.8 × log ⁡ ( 0.8 ) \begin{align*} H(P)&=-P(\text{点击})\log P(\text{点击})-P(\text{未点击})\log P(\text{未点击})\\ &=-0.2\times\log(0.2)-0.8\times\log(0.8) \end{align*} H(P)=P(点击)logP(点击)P(未点击)logP(未点击)=0.2×log(0.2)0.8×log(0.8)
      以自然常数 e e e 为底计算:
      H ( P ) ≈ − 0.2 × ( − 1.6094 ) − 0.8 × ( − 0.2231 ) ≈ 0.3219 + 0.1785 ≈ 0.5004 \begin{align*} H(P)&\approx - 0.2\times(-1.6094)-0.8\times(-0.2231)\\ &\approx0.3219 + 0.1785\\ &\approx0.5004 \end{align*} H(P)0.2×(1.6094)0.8×(0.2231)0.3219+0.17850.5004
    • 计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q)
      根据交叉熵公式 H ( P , Q ) = − ∑ i P ( x i ) log ⁡ Q ( x i ) H(P, Q)=-\sum_{i}P(x_i)\log Q(x_i) H(P,Q)=iP(xi)logQ(xi)
      H ( P , Q ) = − P ( 点击 ) log ⁡ Q ( 点击 ) − P ( 未点击 ) log ⁡ Q ( 未点击 ) = − 0.2 × log ⁡ ( 0.3 ) − 0.8 × log ⁡ ( 0.7 ) \begin{align*} H(P, Q)&=-P(\text{点击})\log Q(\text{点击})-P(\text{未点击})\log Q(\text{未点击})\\ &=-0.2\times\log(0.3)-0.8\times\log(0.7) \end{align*} H(P,Q)=P(点击)logQ(点击)P(未点击)logQ(未点击)=0.2×log(0.3)0.8×log(0.7)
      以自然常数 e e e 为底计算:
      H ( P , Q ) ≈ − 0.2 × ( − 1.2040 ) − 0.8 × ( − 0.3567 ) ≈ 0.2408 + 0.2854 ≈ 0.5262 \begin{align*} H(P, Q)&\approx - 0.2\times(-1.2040)-0.8\times(-0.3567)\\ &\approx0.2408+0.2854\\ &\approx0.5262 \end{align*} H(P,Q)0.2×(1.2040)0.8×(0.3567)0.2408+0.28540.5262
    • 计算KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)
      D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=H(P, Q)-H(P) DKL(P∣∣Q)=H(P,Q)H(P),可得:
      D K L ( P ∣ ∣ Q ) = 0.5262 − 0.5004 = 0.0258 D_{KL}(P||Q)=0.5262 - 0.5004 = 0.0258 DKL(P∣∣Q)=0.52620.5004=0.0258
    • 结果分析
      计算得到的KL散度 D K L ( P ∣ ∣ Q ) = 0.0258 D_{KL}(P||Q)=0.0258 DKL(P∣∣Q)=0.0258,表明预测模型的分布 Q Q Q 与真实分布 P P P 存在一定差异。KL散度值越小,说明预测分布与真实分布越接近,模型的预测效果相对越好。在此例中,模型还有优化空间,以减小与真实分布的差异。
  2. 多分类例子

    • 定义概率分布
      假设在一个水果分类任务中,要区分苹果、香蕉、橙子和梨,真实的概率分布 P P P 为:
      P ( 苹果 ) = 0.3 P(\text{苹果}) = 0.3 P(苹果)=0.3 P ( 香蕉 ) = 0.2 P(\text{香蕉}) = 0.2 P(香蕉)=0.2 P ( 橙子 ) = 0.4 P(\text{橙子}) = 0.4 P(橙子)=0.4 P ( 梨 ) = 0.1 P(\text{梨}) = 0.1 P()=0.1
      某分类模型给出的预测概率分布 Q Q Q 为:
      Q ( 苹果 ) = 0.25 Q(\text{苹果}) = 0.25 Q(苹果)=0.25 Q ( 香蕉 ) = 0.25 Q(\text{香蕉}) = 0.25 Q(香蕉)=0.25 Q ( 橙子 ) = 0.35 Q(\text{橙子}) = 0.35 Q(橙子)=0.35 Q ( 梨 ) = 0.15 Q(\text{梨}) = 0.15 Q()=0.15
    • 计算熵 H ( P ) H(P) H(P)
      根据熵的公式 H ( P ) = − ∑ i P ( x i ) log ⁡ P ( x i ) H(P)=-\sum_{i}P(x_i)\log P(x_i) H(P)=iP(xi)logP(xi)
      H ( P ) = − P ( 苹果 ) log ⁡ P ( 苹果 ) − P ( 香蕉 ) log ⁡ P ( 香蕉 ) − P ( 橙子 ) log ⁡ P ( 橙子 ) − P ( 梨 ) log ⁡ P ( 梨 ) = − 0.3 × log ⁡ ( 0.3 ) − 0.2 × log ⁡ ( 0.2 ) − 0.4 × log ⁡ ( 0.4 ) − 0.1 × log ⁡ ( 0.1 ) \begin{align*} H(P)&=-P(\text{苹果})\log P(\text{苹果})-P(\text{香蕉})\log P(\text{香蕉})-P(\text{橙子})\log P(\text{橙子})-P(\text{梨})\log P(\text{梨})\\ &=-0.3\times\log(0.3)-0.2\times\log(0.2)-0.4\times\log(0.4)-0.1\times\log(0.1) \end{align*} H(P)=P(苹果)logP(苹果)P(香蕉)logP(香蕉)P(橙子)logP(橙子)P()logP()=0.3×log(0.3)0.2×log(0.2)0.4×log(0.4)0.1×log(0.1)
      以自然常数 e e e 为底计算:
      H ( P ) ≈ − 0.3 × ( − 1.2040 ) − 0.2 × ( − 1.6094 ) − 0.4 × ( − 0.9163 ) − 0.1 × ( − 2.3026 ) ≈ 0.3612 + 0.3219 + 0.3665 + 0.2303 ≈ 1.2799 \begin{align*} H(P)&\approx - 0.3\times(-1.2040)-0.2\times(-1.6094)-0.4\times(-0.9163)-0.1\times(-2.3026)\\ &\approx0.3612 + 0.3219+0.3665+0.2303\\ &\approx1.2799 \end{align*} H(P)0.3×(1.2040)0.2×(1.6094)0.4×(0.9163)0.1×(2.3026)0.3612+0.3219+0.3665+0.23031.2799
    • 计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q)
      根据交叉熵公式 H ( P , Q ) = − ∑ i P ( x i ) log ⁡ Q ( x i ) H(P, Q)=-\sum_{i}P(x_i)\log Q(x_i) H(P,Q)=iP(xi)logQ(xi)
      H ( P , Q ) = − P ( 苹果 ) log ⁡ Q ( 苹果 ) − P ( 香蕉 ) log ⁡ Q ( 香蕉 ) − P ( 橙子 ) log ⁡ Q ( 橙子 ) − P ( 梨 ) log ⁡ Q ( 梨 ) = − 0.3 × log ⁡ ( 0.25 ) − 0.2 × log ⁡ ( 0.25 ) − 0.4 × log ⁡ ( 0.35 ) − 0.1 × log ⁡ ( 0.15 ) \begin{align*} H(P, Q)&=-P(\text{苹果})\log Q(\text{苹果})-P(\text{香蕉})\log Q(\text{香蕉})-P(\text{橙子})\log Q(\text{橙子})-P(\text{梨})\log Q(\text{梨})\\ &=-0.3\times\log(0.25)-0.2\times\log(0.25)-0.4\times\log(0.35)-0.1\times\log(0.15) \end{align*} H(P,Q)=P(苹果)logQ(苹果)P(香蕉)logQ(香蕉)P(橙子)logQ(橙子)P()logQ()=0.3×log(0.25)0.2×log(0.25)0.4×log(0.35)0.1×log(0.15)
      以自然常数 e e e 为底计算:
      H ( P , Q ) ≈ − 0.3 × ( − 1.3863 ) − 0.2 × ( − 1.3863 ) − 0.4 × ( − 1.0498 ) − 0.1 × ( − 1.8971 ) ≈ 0.4159 + 0.2773 + 0.4199 + 0.1897 ≈ 1.3028 \begin{align*} H(P, Q)&\approx - 0.3\times(-1.3863)-0.2\times(-1.3863)-0.4\times(-1.0498)-0.1\times(-1.8971)\\ &\approx0.4159+0.2773+0.4199+0.1897\\ &\approx1.3028 \end{align*} H(P,Q)0.3×(1.3863)0.2×(1.3863)0.4×(1.0498)0.1×(1.8971)0.4159+0.2773+0.4199+0.18971.3028
    • 计算KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)
      D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=H(P, Q)-H(P) DKL(P∣∣Q)=H(P,Q)H(P),可得:
      D K L ( P ∣ ∣ Q ) = 1.3028 − 1.2799 = 0.0229 D_{KL}(P||Q)=1.3028 - 1.2799 = 0.0229 DKL(P∣∣Q)=1.30281.2799=0.0229
    • 结果分析
      计算得到的KL散度 D K L ( P ∣ ∣ Q ) = 0.0229 D_{KL}(P||Q)=0.0229 DKL(P∣∣Q)=0.0229,在多分类的水果分类任务中,该值反映了模型预测分布 Q Q Q 与真实分布 P P P 的差异程度。KL散度越小,说明模型预测分布与真实分布越接近,模型性能越好。此例中模型预测与真实分布有一定接近程度,但仍可通过优化提升模型性能,减小KL散度。
KL 散度原始公式计算 show case
  1. 二分类例子

    • 定义概率分布
      在判断用户是否点击广告的场景中,真实分布 P P P 为:点击概率 P ( 点击 ) = 0.2 P(\text{点击}) = 0.2 P(点击)=0.2,未点击概率 P ( 未点击 ) = 0.8 P(\text{未点击}) = 0.8 P(未点击)=0.8
      预测模型的分布 Q Q Q 为:点击概率 Q ( 点击 ) = 0.3 Q(\text{点击}) = 0.3 Q(点击)=0.3,未点击概率 Q ( 未点击 ) = 0.7 Q(\text{未点击}) = 0.7 Q(未点击)=0.7
    • 根据KL散度原始公式计算
      KL散度公式为 D K L ( P ∣ ∣ Q ) = ∑ i P ( x i ) log ⁡ P ( x i ) Q ( x i ) D_{KL}(P||Q)=\sum_{i}P(x_i)\log\frac{P(x_i)}{Q(x_i)} DKL(P∣∣Q)=iP(xi)logQ(xi)P(xi),对于此二分类问题, i i i 取值为“点击”和“未点击”。
      D K L ( P ∣ ∣ Q ) = P ( 点击 ) log ⁡ P ( 点击 ) Q ( 点击 ) + P ( 未点击 ) log ⁡ P ( 未点击 ) Q ( 未点击 ) = 0.2 × log ⁡ 0.2 0.3 + 0.8 × log ⁡ 0.8 0.7 \begin{align*} D_{KL}(P||Q)&=P(\text{点击})\log\frac{P(\text{点击})}{Q(\text{点击})}+P(\text{未点击})\log\frac{P(\text{未点击})}{Q(\text{未点击})}\\ &=0.2\times\log\frac{0.2}{0.3}+0.8\times\log\frac{0.8}{0.7} \end{align*} DKL(P∣∣Q)=P(点击)logQ(点击)P(点击)+P(未点击)logQ(未点击)P(未点击)=0.2×log0.30.2+0.8×log0.70.8
      以自然常数 e e e 为底进行计算:
      0.2 × log ⁡ 0.2 0.3 + 0.8 × log ⁡ 0.8 0.7 ≈ 0.2 × ( − 0.4055 ) + 0.8 × ( 0.1335 ) ≈ − 0.0811 + 0.1068 ≈ 0.0257 \begin{align*} &0.2\times\log\frac{0.2}{0.3}+0.8\times\log\frac{0.8}{0.7}\\ \approx&0.2\times(-0.4055)+0.8\times(0.1335)\\ \approx& - 0.0811 + 0.1068\\ \approx&0.0257 \end{align*} 0.2×log0.30.2+0.8×log0.70.80.2×(0.4055)+0.8×(0.1335)0.0811+0.10680.0257
    • 结果说明
      通过原始公式计算得到的KL散度 D K L ( P ∣ ∣ Q ) ≈ 0.0257 D_{KL}(P||Q)\approx0.0257 DKL(P∣∣Q)0.0257 ,与使用交叉熵和熵相减方法计算出的结果(之前计算为 0.0258 0.0258 0.0258 ,存在微小差异是因为计算过程中保留小数位数导致)相近。它表明预测模型的分布 Q Q Q 与真实分布 P P P 存在一定差异,KL散度值越小,模型预测分布与真实分布越接近,模型预测效果相对越好。在此例中,模型仍有优化空间以减小与真实分布的差异。
  2. 多分类例子

    • 定义概率分布
      在水果分类任务中,真实分布 P P P 为:
      P ( 苹果 ) = 0.3 P(\text{苹果}) = 0.3 P(苹果)=0.3 P ( 香蕉 ) = 0.2 P(\text{香蕉}) = 0.2 P(香蕉)=0.2 P ( 橙子 ) = 0.4 P(\text{橙子}) = 0.4 P(橙子)=0.4 P ( 梨 ) = 0.1 P(\text{梨}) = 0.1 P()=0.1
      预测模型的分布 Q Q Q 为:
      Q ( 苹果 ) = 0.25 Q(\text{苹果}) = 0.25 Q(苹果)=0.25 Q ( 香蕉 ) = 0.25 Q(\text{香蕉}) = 0.25 Q(香蕉)=0.25 Q ( 橙子 ) = 0.35 Q(\text{橙子}) = 0.35 Q(橙子)=0.35 Q ( 梨 ) = 0.15 Q(\text{梨}) = 0.15 Q()=0.15
    • 根据KL散度原始公式计算
      根据KL散度公式 D K L ( P ∣ ∣ Q ) = ∑ i P ( x i ) log ⁡ P ( x i ) Q ( x i ) D_{KL}(P||Q)=\sum_{i}P(x_i)\log\frac{P(x_i)}{Q(x_i)} DKL(P∣∣Q)=iP(xi)logQ(xi)P(xi),这里 i i i 取值为“苹果”“香蕉”“橙子”“梨”。
      D K L ( P ∣ ∣ Q ) = P ( 苹果 ) log ⁡ P ( 苹果 ) Q ( 苹果 ) + P ( 香蕉 ) log ⁡ P ( 香蕉 ) Q ( 香蕉 ) + P ( 橙子 ) log ⁡ P ( 橙子 ) Q ( 橙子 ) + P ( 梨 ) log ⁡ P ( 梨 ) Q ( 梨 ) = 0.3 × log ⁡ 0.3 0.25 + 0.2 × log ⁡ 0.2 0.25 + 0.4 × log ⁡ 0.4 0.35 + 0.1 × log ⁡ 0.1 0.15 \begin{align*} D_{KL}(P||Q)&=P(\text{苹果})\log\frac{P(\text{苹果})}{Q(\text{苹果})}+P(\text{香蕉})\log\frac{P(\text{香蕉})}{Q(\text{香蕉})}+P(\text{橙子})\log\frac{P(\text{橙子})}{Q(\text{橙子})}+P(\text{梨})\log\frac{P(\text{梨})}{Q(\text{梨})}\\ &=0.3\times\log\frac{0.3}{0.25}+0.2\times\log\frac{0.2}{0.25}+0.4\times\log\frac{0.4}{0.35}+0.1\times\log\frac{0.1}{0.15} \end{align*} DKL(P∣∣Q)=P(苹果)logQ(苹果)P(苹果)+P(香蕉)logQ(香蕉)P(香蕉)+P(橙子)logQ(橙子)P(橙子)+P()logQ()P()=0.3×log0.250.3+0.2×log0.250.2+0.4×log0.350.4+0.1×log0.150.1
      以自然常数 e e e 为底进行计算:
      ≈ 0.3 × ( 0.1823 ) + 0.2 × ( − 0.2231 ) + 0.4 × ( 0.1335 ) + 0.1 × ( − 0.4055 ) ≈ 0.0547 − 0.0446 + 0.0534 − 0.0405 ≈ 0.0230 \begin{align*} &\approx0.3\times(0.1823)+0.2\times(-0.2231)+0.4\times(0.1335)+0.1\times(-0.4055)\\ &\approx0.0547 - 0.0446 + 0.0534 - 0.0405\\ &\approx0.0230 \end{align*} 0.3×(0.1823)+0.2×(0.2231)+0.4×(0.1335)+0.1×(0.4055)0.05470.0446+0.05340.04050.0230
    • 结果说明
      通过原始公式计算得到的KL散度 D K L ( P ∣ ∣ Q ) ≈ 0.0230 D_{KL}(P||Q)\approx0.0230 DKL(P∣∣Q)0.0230 ,与之前使用交叉熵和熵相减方法计算出的结果(之前计算为 0.0229 0.0229 0.0229 ,存在微小差异是因为计算过程中保留小数位数导致)相近。该值反映了在多分类的水果分类任务中,模型预测分布 Q Q Q 与真实分布 P P P 的差异程度。KL散度越小,模型预测分布与真实分布越接近,模型性能越好。此例中模型虽有一定接近程度,但仍可优化以进一步减小KL散度,提升模型性能。

四、最小化 KL 散度等价于最小化交叉熵

已知KL散度的计算公式为 D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=H(P, Q)-H(P) DKL(P∣∣Q)=H(P,Q)H(P),其中 H ( P ) H(P) H(P) 是分布 P P P 的熵, H ( P , Q ) H(P, Q) H(P,Q) 是分布 P P P Q Q Q 的交叉熵 。

因为 H ( P ) = − ∑ i P ( x i ) log ⁡ P ( x i ) H(P)=-\sum_{i}P(x_i)\log P(x_i) H(P)=iP(xi)logP(xi),这里 P ( x i ) P(x_i) P(xi) 是分布 P P P 中事件 x i x_i xi 发生的概率,且对于给定的分布 P P P,其熵 H ( P ) H(P) H(P) 是一个固定值(因为分布 P P P 确定后, P ( x i ) P(x_i) P(xi) 就确定了, H ( P ) H(P) H(P) 的计算结果也就确定了)。所以最小化 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 就等价于最小化 H ( P , Q ) − H ( P ) H(P, Q)-H(P) H(P,Q)H(P) 。由于 H ( P ) H(P) H(P) 为常数,设 C = H ( P ) C = H(P) C=H(P),那么最小化 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 可表示为:

min ⁡ Q D K L ( P ∣ ∣ Q ) = min ⁡ Q ( H ( P , Q ) − C ) \min_{Q} D_{KL}(P||Q)=\min_{Q}(H(P, Q)-C) QminDKL(P∣∣Q)=Qmin(H(P,Q)C)

又因为常数 C C C 不影响求最小值的过程(对于函数 f ( Q ) = H ( P , Q ) − C f(Q)=H(P, Q)-C f(Q)=H(P,Q)C min ⁡ Q f ( Q ) \min_{Q} f(Q) minQf(Q) min ⁡ Q ( H ( P , Q ) ) \min_{Q}(H(P, Q)) minQ(H(P,Q)) 的解是相同的),所以:

min ⁡ Q D K L ( P ∣ ∣ Q ) = min ⁡ Q H ( P , Q ) \min_{Q} D_{KL}(P||Q)=\min_{Q} H(P, Q) QminDKL(P∣∣Q)=QminH(P,Q)

这就说明了最小化 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q) 等价于最小化交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 。用数学语言完整表述为:

已知 D K L ( P ∣ ∣ Q ) = H ( P , Q ) − H ( P ) D_{KL}(P||Q)=H(P, Q)-H(P) DKL(P∣∣Q)=H(P,Q)H(P)其中 H ( P ) = − ∑ i P ( x i ) log ⁡ P ( x i ) H(P)=-\sum_{i}P(x_i)\log P(x_i) H(P)=iP(xi)logP(xi) 为定值,那么 min ⁡ Q D K L ( P ∣ ∣ Q ) = min ⁡ Q ( H ( P , Q ) − H ( P ) ) = min ⁡ Q H ( P , Q ) \min_{Q} D_{KL}(P||Q)=\min_{Q}(H(P, Q)-H(P))=\min_{Q} H(P, Q) QminDKL(P∣∣Q)=Qmin(H(P,Q)H(P))=QminH(P,Q)

五、实际应用

(一)机器学习领域

在机器学习中,模型训练的核心目标之一是使模型的预测分布 Q Q Q 尽可能逼近真实数据分布 P P P。通过最小化KL散度,例如在变分自编码器(VAE)等模型中,能够有效降低模型预测的不确定性,从而提高模型的准确性和可靠性。由于交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 大于等于 H ( P ) H(P) H(P),在训练过程中,模型不断调整参数,使得预测分布 Q Q Q 逐渐接近真实分布 P P P,KL散度随之减小,模型对数据的拟合能力和预测能力不断增强,同时也意味着模型预测所引入的额外不确定性在不断减少。

(二)信号处理领域

在信号处理领域,信号在传输过程中可能会受到噪声干扰等因素的影响,导致接收端接收到的信号特征分布 Q Q Q 偏离真实发送信号的分布 P P P。通过计算KL散度,可以精确衡量这种偏离所导致的额外不确定性增加程度,进而准确评估信号的失真程度。基于此,我们能够为信号的恢复和优化提供关键依据,采取相应的处理措施来减少信号失真,提高信号质量。因为交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 大于 H ( P ) H(P) H(P),所以KL散度能够准确反映出由于信号特征分布的改变所带来的不确定性增加,帮助我们更好地理解信号的变化情况。

从不确定性减少的视角深入理解KL散度,为我们提供了一种直观且强大的方式来衡量不同概率分布之间的差异,以及评估基于近似分布所做决策或预测的质量。其在信息论、机器学习、信号处理等众多领域的广泛应用,充分彰显了其在现代科学技术中的重要地位和价值。而明确熵与交叉熵的大小关系,更是深入理解KL散度及其应用的关键所在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952022.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D】导出Android项目以及Java混淆

Android Studio 下载文件归档 | Android Developers Android--混淆配置(比较详细的混淆规则)_android 混淆规则-CSDN博客 Unity版本:2019.4.0f1 Gradle版本:5.6.4(或5.1.1) Gradle Plugin版本&#xff…

vue3 + ts + element-plus(el-upload + vuedraggable实现上传OSS并排序)

这里创建项目就不多说了 安装element-plus npm install element-plus 安装vuedraggable npm install vuedraggable 安装ali-oss npm install ali-oss 这里是封装一下:在components创建文件夹jc-upload>jc-upload.vue 在封装的过程中遇到了一个问题就是dr…

如何在 Linux系统用中挂载和管理磁盘分区

在 Linux 系统中,挂载和管理磁盘分区是系统管理的基本任务之一。以下是详细步骤,帮助你完成这一过程。 1. 查看现有磁盘和分区 首先,使用以下命令来查看系统中的磁盘和分区: bash 复制 lsblk或者使用: bash 复制…

Opencv图片的旋转和图片的模板匹配

图片的旋转和图片的模板匹配 目录 图片的旋转和图片的模板匹配1 图片的旋转1.1 numpy旋转1.1.1 函数1.1.2 测试 1.2 opencv旋转1.2.1 函数1.2.2 测试 2 图片的模板匹配2.1 函数2.2 实际测试 1 图片的旋转 1.1 numpy旋转 1.1.1 函数 np.rot90(kl,k1),k1逆时针旋转9…

【YOLOv8杂草作物目标检测】

YOLOv8杂草目标检测 算法介绍模型和数据集下载 算法介绍 YOLOv8在禾本科杂草目标检测方面有显著的应用和效果。以下是一些关键信息的总结: 农作物幼苗与杂草检测系统:基于YOLOv8深度学习框架,通过2822张图片训练了一个目标检测模型&#xff…

vue3 react使用高德离线地图,最新解决内网情况首次不能加载离线地图2025年1月10日

下载离线资源 下载地址 https://download.csdn.net/download/u010843503/90234612 2、部署私有化瓦片资源 ngxin中配置如下 server{listen 18082;server_name localhost;location / {root D:/GisMap/_alllayers;#try_files $uri $uri/ /index.html;#index index.html;} }下载…

Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录

1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件,此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…

Unity中 Xlua使用整理(二)

1.Xlua的配置应用 xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。配置要求: 列表方式均必须是static的字段/属性 列表方式均必须放到一个static类 建议不用标签方式 建议列表方式配置放Editor目录(如果是H…

【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现

实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…

【数据结构:前缀树Trie】

目录 前言前缀树介绍和应用一、前缀树的定义前缀树的问题和思考前缀树的映射思想前缀树三大性质 二.前缀树节点结构三. 前缀树接口介绍和实现四个接口API1. insert(String word)2. search(String word)3. startsWith(String pre)4. delete(String word) API实现1. 查询操作sear…

Jenkins触发器--在其他项目执行后构建

前言: jenkins中有多种触发器可用,可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释: Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…

Linux(18)——提高命令行运行效率

目录 一、创建和执行 shell 脚本: 1、命令解释器: 2、执行 Bash Shell 脚本: 3、从 shell 脚本提供输出: 二、对特殊字符加引号: 1、反斜杠 (\): 2、单引号 ( &…

软件系统安全逆向分析-混淆对抗

1. 概述 在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子从无从下手到攻破目标。 花指令对抗虚函数表RC4 2. 实战-donntyousee 题目载体为具有漏洞的小型软…

计算机网络 (33)传输控制协议TCP概述

一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同&…

【从0带做】基于Springboot3+Vue3的高校食堂点餐系统

大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的高校食堂点餐系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 详细介绍 https://www.javaxm.c…

一文说清dockerfile编写

docker用的时间比较久了,关于怎样把jar打成镜像,怎样基于已有mysql镜像添加额外初始化后封装成新的镜像,进行简单的说明。 1.jar封装镜像 from centos # 设置本地为中文,解决中文乱码问题 RUN localedef -i zh_CN -f UTF-8 zh_CN…

基于Python实现的通用小规模搜索引擎

基于Python实现的通用小规模搜索引擎 1.项目简介 1.1背景 《信息内容安全》网络信息内容获取技术课程项目设计 一个至少能支持10个以上网站的爬虫程序,且支持增量式数据采集;并至少采集10000个实际网页;针对采集回来的网页内容, 能够实现网页文本的分…

ssm旅游攻略网站设计+jsp

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 需要源码或者定制看文章最下面或看我的主页 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框架介绍 3 2.2 B/S结构介绍 3 …

算法提高 图形输出

时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 512MB,其他语言 1024MB 难度:困难 分数:100 OI排行榜得分:14(0.1*分数2*难度) 描述 编写一程序,在屏幕上输出如下内容&#xff1…

[程序设计]—代理模式

[程序设计]—代理模式👳 本文章记录学习于——52.面向切面:AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事,在学习Spring的源码: 后面慢慢更新源码系列blog,希望多多关注🙏🙏 目前已经总结的b…