当前位置: 首页 > news >正文

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

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

损失函数相关文章(置顶)

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

本文核心

  • 由于熵表征不确定性大小,且基于真实分布 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散度及其应用的关键所在。

相关文章:

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

从不确定性减少视角理解KL散度 损失函数相关文章(置顶) 1. KL 散度:多维度解读概率分布间的隐秘 “距离” 2. 熵与交叉熵:从不确定性角度理解 KL 散度 3. 机器学习、深度学习关于熵你所需要知道的一切 本文核心 由于熵表征不确定…...

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中,阅读了官方文档,在之前做flutter时候,经常使用overlay,使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…...

KG-CoT:基于知识图谱的大语言模型问答的思维链提示

一些符号定义 知识图谱实体数量: n n n 知识图谱中关系类型数量: m m m 三元组矩阵: M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm, M i j k 1 M_{ij}^k 1 Mijk​1则说明实体 i i i和实…...

(2024,影响 LLaVA 性能的因素,LLM 模型规模,视觉输入配置(网格/token 数),AnyRes,数据量/质量)

LLaVA-NeXT: What Else Influences Visual Instruction Tuning Beyond Data? 目录 0. 简介 1. 架构 1.1 语言模型 1.2 视觉编码器 2. 视觉表示 2.1 训练时分辨率和 token 数量配置 2.2 LLM 扩展的有效性 2.3 放大原始图像 2.4 推理时分辨率和 token 数量配置 2.5 池…...

Vue3 网络请求

文章目录 Vue3 网络请求CORS问题ajaxfetchaxios Vue3 网络请求 CORS问题 同源:指的是当前用户所在的URL与被请求的URL的协议名、域名、端口必须完全相同。一旦有一个或多个不同,就是非同源请求,也就是我们经常说的跨域请求,简称…...

全方位解读消息队列:原理、优势、实例与实践要点

全方位解读消息队列:原理、优势、实例与实践要点 一、消息队列基础认知 在数字化转型浪潮下,分布式系统架构愈发复杂,消息队列成为其中关键一环。不妨把消息队列想象成一个超级“信息驿站”,在古代,各地的信件、物资运…...

Java-数据结构-栈与队列(StackQueue)

一、栈(Stack) ① 栈的概念 栈是一种特殊的线性表,它只允许固定一端进行"插入元素"和"删除元素"的操作,这固定的一端被称作"栈顶",对应的另一端就被称做"栈底"。 📚 栈中的元素遵循后…...

Transformer入门教程全解析(一)

一、开篇:走进Transformer的奇妙世界 在当今深度学习领域,Transformer 无疑是一颗璀璨的明星,它如同一股强大的变革力量,席卷了自然语言处理(NLP)乃至更多领域。从机器翻译到文本生成,从问答系…...

拼音读音基础

文章目录 一、音节1、结构2、声母3、韵母 二、声调 拼音读音往往被认为跟应试考试相关,学会正常交流口语以后不再进行关注,其实还是有必要了解细节、查漏补缺。 一、音节 1、结构 音节 声母 韵母;一个音节基本等于一个汉字; 2、…...

Qt 坐标系统和坐标变换

一、概述:1、QPainter在QPaintDevice上绘图的默认坐标系统是,原点(0,0)在左上角,x轴正方向水平向右,y轴正方向竖直向下的坐标系。 2、为了绘图的方便,QPainter提供了一些坐标变换的功能,通过平移、旋转、缩放等坐标变…...

【redis】ubuntu18安装redis7

在Ubuntu 18下安装Redis7可以通过以下两种方法实现:手动编译安装和使用APT进行安装。 Ubuntu 18系统的环境和版本: $ cat /proc/version Linux version 4.15.0-213-generic (builddlcy02-amd64-079) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)…...

Outlook 网页版一直提示:检测到重复的重定向

Outlook 网页版提示“检测到重复的重定向”通常是由于浏览器缓存、Cookie问题或浏览器插件引发的。可以按照以下步骤进行排查和解决: 1. 清除浏览器缓存和 Cookie 在浏览器设置中找到清除浏览数据的选项。勾选“缓存文件”和“Cookies”相关选项,然后清…...

初级前端面试题 - js

前言:众所周知,HTML,CSS,JS是学习前端所必备的。js的基础学好了,框架类的vue,react等都会接受的很快,因此js是前端很总要的一个部分,这篇文章将会结合面试题,对js的知识点进行总结 号外号外,这是…...

matlab的绘图的标题中(title)添加标量以及格式化输出

有时候我们需要在matlab绘制的图像的标题中添加一些变量,这样在修改某些参数后,标题会跟着一块儿变。可以采用如下的方法: x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信; 按照通信的数据同步方式,可分为异步通信和同步通信; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…...

mapbox基础,style样式汇总,持续更新

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀根属性2.1 so…...

用AI技术提升Flutter开发效率:ScriptEcho的力量

引言 在当今快速发展的技术时代,Flutter作为一种跨平台开发框架,正在越来越多的开发者中崭露头角。它不仅能够为开发者提供一套代码同时部署到iOS和Android平台的解决方案,还能帮助企业节省人力成本和开发时间。然而,对于新手开发…...

Java阶段四04

第4章-第4节 一、知识点 CSRF、token、JWT 二、目标 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验证和JWT验证的区别 学会使用JWT 三、内容分析 重点 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验…...

vivado 时钟指南

时钟指南 每个 FPGA 架构都为时钟提供有专用资源。掌握 FPGA 架构中的时钟资源,使您能够规划好自己的时钟,从而实现时钟 资源的最佳利用。大多数设计无需您了解这些细节。但如果您能够控制布局,同时对每个时钟域上的扇出有良好的思 路&a…...

git项目提交步骤(简洁版)

1.创建仓库 2.填写 信息 3.点击这个按钮 4.找到要上传的文件,在目录内右键点击 5.依次执行命令 在命令窗口中输入:git init 复制仓库地址: 在命令窗口中输入:git remote add origin 仓库地址 在命令窗口中输入:…...

Jmeter-压测时接口如何按照顺序执行

Jmeter-压测时接口如何按照顺序执行-临界部分控制器 在进行压力测试时,需要按照顺序进行压测,比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的,如果请求次数少,可能会按照顺序执行,但是随着次数增加…...

模式识别-Ch5-线性判别函数

Ch5 线性判别函数 文章目录 Ch5 线性判别函数引言:生成模型 vs判别模型生成模型 vs 判别模型判别模型分类 线性判别函数与决策面线性判别函数两类情况下的决策多类问题下决策 多类情形-线性机器线性决策面优缺点 广义线性判别函数例:二次判别函数例1: 1-…...

数据结构二叉树-C语言

数据结构二叉树-C语言 1.树1.1树的概念与结构1.2树的相关术语1.3树的表示1.4树形结构实际运用场景 2.二叉树2.1概念与结构2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3二叉树存储结构2.3.1顺序结构2.3.2链式结构 3.实现顺序结构的二叉树4.实现链式结构二叉树4.1前中后序遍…...

字节小米等后端岗位C++面试题

C 基础 引用和指针之间的区别?堆栈和堆中的内存分配有何区别?存在哪些类型的智能指针?unique_ptr 是如何实现的?我们如何强制在 unique_ptr 中仅存在一个对象所有者?shared_ptr 如何工作?对象之间如何同步…...

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备,然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置,只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑,设备需解…...

renben-openstack-使用操作

管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称:Centos7 VCPU数量:1 内存: 1024 根磁盘: 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…...

HOW - Form 表单确认校验两种模式(以 Modal 场景为例)

目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...

MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)

目录 前言 算法原理 相关概念 二值图像、灰度图像、彩色图像 邻接性、连通性 图像滤波 频率 滤波器 边缘检测算子:Sobel算子、Scharr算子、Laplacian算子、Canny算子 梯度计算 + 顶帽 + 黑帽 + 拉普拉斯金字塔 相位一致性(Phase Congruency,PC) 几种常见的算法…...

高考日语听力中常考2大类关键词

高考日语听力中,有些关键词的出现频率很高,同学们掌握这些关键词的读音和意思,可以提高听力答题的正确率,如时间类、地点类、天气类关键词……本文档为大家整理了干货,高考日语听力常考关键词,帮助同学们区分和积累常用词汇,记得要持续关注哦! 时间类关键词 1.星期 ∙…...

windows和linux的抓包方式

1.实验准备: 一台windows主机,一台linux主机 wireshark使用: 打开wireshark,这些有波动的就代表可以有流量经过该网卡,选择一张有流量经过的网卡 可以看到很多的流量,然后可以使用过滤器来过滤想要的流量…...

工业 4G 路由器赋能远程医疗,守护生命线

在医疗领域,尤其是偏远地区的医疗救治场景中,工业 4G 路由器正发挥着无可替代的关键作用,宛如一条坚韧的 “生命线”,为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏,常常面临着专业医生短缺、诊疗设备有限等困境…...

《太阳之子》Build16524106官方中文学习版

《太阳之子》官方中文版https://pan.xunlei.com/s/VODabFuJ5gA7rCUACMulT5YGA1?pwdc47e# 集战术狙击、解谜与轻度潜行要素于一身,呈现独一无二的第三人称射击游戏体验。每关你只有一发子弹,但你可以进行在命中时重新瞄准、绕过障碍物、加速击穿护甲等操…...

shell-条件判断

目录 一、条件判断 1.按照文件类型进行判断 2.按照文件权限进行判断 3.两个文件之间进行比较 4.两个整数之间进行比较 5.字符串的判断 6.多重条件判断 二、if条件判断 1.单分支if条件语句 2.双分支if条件语句 (1)判断某文件是否存在 &#x…...

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集

【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…...

20250110_ PyTorch中的张量操作

文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…...

unity rb.velocity和transform.position

rb.velocity和transform.position是用来控制物体位置的两种方式,前者通常用来控制人物的移动,它们的主要区别和适用场景如下 一,rb.velocity(控制刚体的速度) 它可以直接控制物体的速度,而不是物体的位置…...

景芯SOC设计实战

终身辅导、一对一辅导,手把手教您完成SoC全流程设计,从入门到进阶,带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程!直播视频不定期升级!让您快速超越同龄人! 景芯团队主打文档服务器实战…...

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...

Mysql快速列出来所有列信息

文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来&#xff0c;以备注中的中文名为列名。 实现思路 最终展示效果&#xff0c;即拼接出可执行执行…...

spring boot发送邮箱,java实现邮箱发送(邮件带附件)3中方式【保姆级教程一,代码直接用】

文章目录 Java发送邮箱的方式1. 基于 Javax.mail 实现关于附件上传的方法 2. 基于 org.apache.commons.mail 实现常见报错 3. 基于 spring-boot-starter-mail 实现&#xff08;推荐&#xff09; 实际开发时需要实现邮件发送&#xff0c;本文章实现如何从零实现邮件发送。也就是…...

数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall

数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” 贵在坚持&#xff01; …...

Zstandard压缩算法

简介 Zstandard(缩写为zstd)是一种开源的无损数据压缩算法,主要设计目标是提供高比率的压缩和快速的解压缩速度。它由Yann Collet开发,并于2015年首次发布。 特点 高比率的压缩(通常比gzip更好)。快速的解压缩速度(通常比gzip更快)。支持流式解压缩。可以选择不同的压…...

npm i 报错

nodejs中 使用npm install命令时报错 npm err! file C: \user\admin\package.json_package.json 里缺少 description 和 repository 两个n字段。-CSDN博客...

【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)

目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …...

EFCore HasDefaultValueSql

今天小伙伴在代码中遇到了有关 HasDefaultValue 的疑问&#xff0c;这里整理澄清下... 在使用 Entity Framework Core (EFCore) 配置实体时&#xff0c;HasDefaultValue 方法会为数据库列设置一个默认值。该默认值的行为取决于以下条件&#xff1a; 1. 配置 HasDefaultValue 的…...

【数据结构】栈

目录 1.1 什么是栈 1.2 顺序栈 1.2.1 特性 1.3 链式栈 1.3.1 特性 总结&#xff1a; 1.1 什么是栈 栈是只能在一端进行插入和删除操作的线性表(又称为堆栈)&#xff0c;进行插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。 特点&#xff1a;栈是先进后出FILO…...

C++初阶—CC++内存管理

第一章&#xff1a;C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(si…...

【机器视觉】OpenCV 图像基本变换

文章目录 介绍机器视觉的核心组成部分机器视觉的关键技术和趋势 4. 图像的基本变换4.1 图像的放大与缩小4.2 图像的翻转4.3 图像的旋转4.4 仿射变换之图像平移4.5 仿射变换之获取变换矩阵4.6 透视变换 介绍 机器视觉&#xff08;Machine Vision&#xff09;是一门跨学科的领域…...

【数据库】四、数据库管理与维护

文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库&#xff0c;以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证&#xff1a; 服务器级别…...