熵与交叉熵:从不确定性角度理解 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)=−i∑P(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)=−i∑P(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)=−i∑P(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.4086−0.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.4816−0.2408−0.4828−0.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) 大
-
二分类例子
- 定义概率分布:
假设在一个判断用户是否点击广告的场景中,真实的点击与未点击的概率分布 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.1785≈0.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.2854≈0.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.5262−0.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散度值越小,说明预测分布与真实分布越接近,模型的预测效果相对越好。在此例中,模型还有优化空间,以减小与真实分布的差异。
- 定义概率分布:
-
多分类例子
- 定义概率分布:
假设在一个水果分类任务中,要区分苹果、香蕉、橙子和梨,真实的概率分布 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)=−i∑P(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.2303≈1.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.1897≈1.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.3028−1.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
-
二分类例子
- 定义概率分布:
在判断用户是否点击广告的场景中,真实分布 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)=i∑P(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散度值越小,模型预测分布与真实分布越接近,模型预测效果相对越好。在此例中,模型仍有优化空间以减小与真实分布的差异。
- 定义概率分布:
-
多分类例子
- 定义概率分布:
在水果分类任务中,真实分布 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)=i∑P(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.0547−0.0446+0.0534−0.0405≈0.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)=−i∑P(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)=−i∑P(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散度 【 Transformer 系列,故事从 d k \sqrt{d_k} dk 说起】 LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看! 它长这个样子: 深入浅出 Transformer 看完后ÿ…...
Redis:数据类型
1. 字符串(String) 简介 概念:这是最简单的数据类型,可以存储字符串、整数或浮点数。特点:支持原子操作,如递增和递减数值。 示例 # 设置一个键值对 SET mykey "Hello, Redis!"# 获取该键的值…...
搭建Node.js后端
从头开始搭建一个Node.js后端,并实现查询历史数据的功能,下面是详细的步骤说明,包括环境配置、项目初始化、代码编写、以及服务器启动。 1. 环境配置 1.1 安装 Node.js 和 npm 首先,你需要在你的电脑上安装 Node.js 和 npm&…...
集合——数据结构
数据结构 就是计算机存储数据的方式。 不同情况下采取不同数据结构会让数据查找,存储更加有效率。 栈...
从CentOS到龙蜥:企业级Linux迁移实践记录(系统安装)
引言: 随着CentOS项目宣布停止维护CentOS 8并转向CentOS Stream,许多企业和组织面临着寻找可靠替代方案的挑战。在这个背景下,龙蜥操作系统(OpenAnolis)作为一个稳定、高性能且完全兼容的企业级Linux发行版࿰…...
《机器学习》——支持向量机(SVM)
文章目录 什么是支持向量机?基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例(1)实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例(2)实例步骤导入数据…...
【PPTist】公式编辑、插入音视频、添加动画
一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…...
LeetCode - #186 翻转字符串里的单词 II(会员题)
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
Kafka核心参数与使用02
一、从基础的客户端说起 Kafka 提供了非常简单的生产者(Producer)和消费者(Consumer)API。通过引入相应依赖后,可以快速上手编写生产者和消费者的示例。 1. 消息发送者主流程 一个最基础的 Producer 发送消息的步骤…...
Three.js 渲染技术:打造逼真3D体验的幕后功臣
文章目录 前言一、着色器(Shaders)二、后处理(Post-processing)三、抗锯齿(Anti-aliasing)四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射(Environment Mapping)七、纹理…...
QTcpSocket 如何统计在线时长
基本原理 QTcpSocket是 Qt 库中用于 TCP 通信的类。要统计在线时长,关键思路是记录连接建立的时间和当前时间,通过计算两者的差值来得到在线时长。实现步骤 记录连接建立时间: 在连接成功的信号槽函数中记录开始时间。例如,当QTcpSocket成功连接到服务器时,会发出connecte…...
【Altium】AD使用智能粘贴功能把多个网络标签改成端口
1、 文档目标 使用智能粘贴功能把多个网络标签(net lable)改成端口(port) 2、 问题场景 客户有一份原理图,网络用的是net label,没用Port,然后创建一个sheet symbol,但是sheet sy…...
.NET 终止或结束进程
如何使用 C# 终止进程。 使用简单的方法终止.NET中的现有进程Process.Kill()。有一个可选参数 true 或 false,用于结束与要结束的进程相关的所有子进程。 了解如何创建流程。 结束当前进程: System.Diagnostics.Process.GetCurrentProcess().Kill(tru…...
R.swift库的详细用法
R.swift 是一个 Swift 工具库,它提供了一个自动生成的类 R,使得你可以通过类型安全的方式访问项目中的资源,例如图片、字体、颜色、XIB 文件等。通过 R.swift,你可以避免字符串类型的错误,提升代码的可维护性。 以下是 R.swift 库的详细用法: 1. 安装 R.swift 使用 Sw…...
Js的回调函数
一、什么是回调函数(Callback)? 回调函数(Callback Function)是指一个函数被作为参数传递给另一个函数,并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中࿰…...
flutter 独立开发之笔记
1、# use: - [flutter_launcher_icons:] 每次修改完icon后,都需要执行一遍 dart run flutter_launcher_icons 2、开启混淆并打包apk flutter build apk --obfuscate --split-debug-info./out/android/app.android-arm64.symbols 3、开启windows支持 flutter con…...
PHP的扩展Imagick的安装
windows下的安装 下载:Imagick扩展 PECL :: Package :: imagick 3.7.0 for Windows 下载:ghostscript(PDF提取图片时用到,不处理PDF可以不安装) Ghostscript : Downloads 安装扩展 Imagick解压后&…...
【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想
以下问题应该都可以通过设置custom/conf/app.ini来解决 配置文档参考地址:https://www.bookstack.cn/read/gogs_zh/advanced-configuration_cheat_sheet.md domain显示的事localhost,实际上应该是一个IP地址。 关键字: DOMAIN ROOT_URL 因为是docker…...
多台PC共用同一套鼠标键盘
当环境中有多个桌面 pc 需要操作的时候,在 多台 pc 之间切换会造成很多的不方便 可以通过远程进行连接,但是有一个更好的方案是让多台机器之间共用同一套键盘鼠标 常用的解决方案 synergy 和 sharemouse,通过移动光标在不同的 pc 间切换 s…...
大语言模型是如何训练出来的?
近期听了不少与AI相关的播客,有理想转型AI的分享,有Character.ai出来同事的分享等,结合对Transformer架构的理解尝试大致还原大语言模型的训练过程。不过,当我这样的“中国大妈”也能够大致琢磨明白大语言模型是如何训练出来的时候…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
