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

信息量、熵、KL散度和交叉熵

信息量与熵

大家都说,熵是用于衡量信息量的多少。那么信息量又是什么呢?一种解释是:信息量更多,代表消除了更多的不确定性

对于某个事件 xxx,如果它的概率 p(x)p(x)p(x) 很大(例如“明天太阳会升起”,概率几乎为 1),那么即使它发生了,由于它发生的概率很大,本身几乎没有不确定性,所以消除的不确定性也特别小,因此它的信息量就更少。反之,如果一个事件非常罕见(如“明天下陨石”),一旦发生,就会极大地改变我们的认知,带来巨大的“信息冲击”,因此它的信息量就非常大。

由此,我们认为:概率越大,信息量越少;概率越小,信息量越大。因此,事件 xxx 的信息量 I(x)I(x)I(x) 应该是其概率 p(x)p(x)p(x)减函数。香农指出,最符合直觉和数学性质的函数形式是对数的负值

I(x)=−log⁡2p(x) I(x) = -\log_2 p(x) I(x)=log2p(x)

这里的对数底数通常取 2,单位是比特 (bit)。这个定义完美契合了我们的直觉:

  • p(x)=1p(x) = 1p(x)=1I(x)=−log⁡21=0I(x) = -\log_2 1 = 0I(x)=log21=0,确定事件不带来新信息。
  • p(x)→0p(x) \to 0p(x)0I(x)→∞I(x) \to \inftyI(x),极小概率事件蕴含巨大信息量。

那么,对于一个随机变量 XXX(代表一个信源,有多个可能的取值 x∈Xx \in \mathcal{X}xX),我们如何衡量它平均包含多少信息量呢?我们可以对每个可能事件的信息量 I(x)I(x)I(x) 按其发生概率 p(x)p(x)p(x) 进行加权平均,这就是香农熵 (Shannon Entropy)

H(X)=Ex∼p(x)[I(x)]=−∑x∈Xp(x)log⁡2p(x) H(X) = \mathbb{E}_{x \sim p(x)}[I(x)] = -\sum_{x \in \mathcal{X}} p(x) \log_2 p(x) H(X)=Exp(x)[I(x)]=xXp(x)log2p(x)

这个表达式 H(X)H(X)H(X) 衡量了信源 XXX平均不确定性平均信息量。熵越大,说明信源越“混乱”,越难预测,平均每次观测带来的信息越多。

有趣的是,这个表达式恰好是最佳编码长度的理论下限。在数据压缩中(如哈夫曼编码),我们为高频事件分配短码,为低频事件分配长码。最优编码的平均码长趋近于香农熵 H(X)H(X)H(X)。这可以理解为:我们为每个事件 xxx 分配的比特数应尽可能接近其信息量 I(x)=−log⁡p(x)I(x) = -\log p(x)I(x)=logp(x)这样编码最紧凑,没有浪费信息量


KL 散度:衡量分布之间的“信息距离”

在机器学习中,我们通常假设数据背后存在一个真实的概率分布 P(X)P(X)P(X)(“金科玉律”)。我们的目标是训练一个模型 Q(X)Q(X)Q(X),使其预测的概率分布尽可能接近 P(X)P(X)P(X)。那么,如何量化 QQQ 到底有多“接近” PPP 呢?

KL 散度(Kullback-Leibler Divergence)正是这样一个衡量两个概率分布差异的标量指标

我们从编码的代价角度来理解 KL 散度。

  • 假设真实分布是 P(X)P(X)P(X)。如果我们知道 PPP,我们可以设计一个最优编码方案,其平均编码长度就是 PPP 的熵:
    H(P)=−∑xp(x)log⁡2p(x) H(P) = -\sum_x p(x) \log_2 p(x) H(P)=xp(x)log2p(x)

  • 但现在,我们错误地认为数据的真实分布是 Q(X)Q(X)Q(X),并基于 QQQ 来设计编码。那么,为事件 xxx 分配的最优码长应为 −log⁡2q(x)-\log_2 q(x)log2q(x)

  • 当我们用基于 QQQ 的编码来传输服从 PPP 分布的数据时,实际的平均编码长度为:
    H(P,Q)=−∑xp(x)log⁡2q(x) H(P, Q) = -\sum_x p(x) \log_2 q(x) H(P,Q)=xp(x)log2q(x)
    这被称为交叉熵 (Cross-Entropy),记作 H(P,Q)H(P, Q)H(P,Q)

  • 显然,由于我们用错了分布 QQQ,这个平均长度 H(P,Q)H(P, Q)H(P,Q) 通常会比使用正确分布 PPP 的最优长度 H(P)H(P)H(P) 更长。
    证明如下:
    根据ln⁡x≤x−1\ln x \le x - 1lnxx1有:
    ∑p(x)log⁡2q(x)p(x)≤1ln⁡2∑p(x)(q(x)p(x)−1)=1ln⁡2(∑p(x)−∑q(x))=0\sum p(x) \log_2 \frac{q(x)}{p(x)} \le \frac{1}{\ln 2}\sum p(x) (\frac{q(x)}{p(x)}-1)= \frac{1}{\ln 2} (\sum p(x) - \sum q(x))=0 p(x)log2p(x)q(x)ln21p(x)(p(x)q(x)1)=ln21(p(x)q(x))=0
    也就是:
    ∑p(x)log⁡2q(x)≤∑p(x)log⁡2p(x)−∑p(x)log⁡2q(x)≥−∑p(x)log⁡2p(x) \sum p(x) \log_2 q(x) \le \sum p(x) \log_2 p(x) \\ -\sum p(x) \log_2 q(x) \ge - \sum p(x) \log_2 p(x) p(x)log2q(x)p(x)log2p(x)p(x)log2q(x)p(x)log2p(x)
    当且仅当p(x)==q(x)p(x)==q(x)p(x)==q(x)时取等

  • 这个额外付出的平均编码代价,就是 KL 散度:
    DKL(P∥Q)=H(P,Q)−H(P)=(−∑xp(x)log⁡2q(x))−(−∑xp(x)log⁡2p(x)) D_{\text{KL}}(P \parallel Q) = H(P, Q) - H(P) = \left( -\sum_x p(x) \log_2 q(x) \right) - \left( -\sum_x p(x) \log_2 p(x) \right) DKL(PQ)=H(P,Q)H(P)=(xp(x)log2q(x))(xp(x)log2p(x))
    DKL(P∥Q)=∑xp(x)log⁡2p(x)q(x) \boxed{D_{\text{KL}}(P \parallel Q) = \sum_x p(x) \log_2 \frac{p(x)}{q(x)}} DKL(PQ)=xp(x)log2q(x)p(x)

KL 散度的性质

  1. 非负性DKL(P∥Q)≥0D_{\text{KL}}(P \parallel Q) \geq 0DKL(PQ)0,当且仅当 P=QP = QP=Q 时取等号。
  2. 非对称性DKL(P∥Q)≠DKL(Q∥P)D_{\text{KL}}(P \parallel Q) \neq D_{\text{KL}}(Q \parallel P)DKL(PQ)=DKL(QP)。这表示 KL 散度不是传统意义上的“距离”(不满足对称性)。
  3. 信息解释:KL 散度衡量了由于使用 QQQ 来近似 PPP损失的信息量增加的编码冗余

KL散度的简易理解:在所有可能的编码方案中,基于真实分布 PPP 的编码是最优的(平均长度最短,H(P)H(P)H(P) 最小),任何其他基于 Q≠PQ \neq PQ=P 的编码都会导致更长的平均长度,其差值就是 KL 散度。

在机器学习中的应用

在分类任务中,我们通常最小化交叉熵损失
L=−∑xp(x)log⁡q(x) \mathcal{L} = -\sum_x p(x) \log q(x) L=xp(x)logq(x)
这等价于最小化 DKL(P∥Q)+H(P)D_{\text{KL}}(P \parallel Q) + H(P)DKL(PQ)+H(P)。由于 H(P)H(P)H(P) 是固定的(数据本身的熵,无法改变),最小化交叉熵就等价于最小化 DKL(P∥Q)D_{\text{KL}}(P \parallel Q)DKL(PQ),即让模型分布 QQQ 尽可能接近真实分布 PPP


总结

  • 信息量 I(x)I(x)I(x):衡量单个事件带来的“惊喜度”,I(x)=−log⁡p(x)I(x) = -\log p(x)I(x)=logp(x)
  • H(X)H(X)H(X):衡量一个分布的平均不确定性,H(X)=E[I(x)]H(X) = \mathbb{E}[I(x)]H(X)=E[I(x)]
  • 交叉熵 H(P,Q)H(P,Q)H(P,Q):用错误分布 QQQ 编码服从真实分布 PPP 的数据所带来的平均代价。
  • KL 散度 DKL(P∥Q)D_{\text{KL}}(P \parallel Q)DKL(PQ):衡量用 QQQ 近似 PPP 时的额外信息代价,DKL=H(P,Q)−H(P)D_{\text{KL}} = H(P,Q) - H(P)DKL=H(P,Q)H(P)
http://www.dtcms.com/a/394076.html

相关文章:

  • 使用Python一站式提取Word、Excel、PDF 和PPT文档内容v1.0
  • 线性代数 | REF / RREF
  • TLCP的一些内容
  • dock容器网络存储相关练习
  • 鸿蒙Next ArkTS卡片提供方开发指南:从入门到实战
  • Netty LengthFieldBasedFrameDecoder
  • 后端_HTTP 接口签名防篡改实战指南
  • 区块链论文速读 CCF A--WWW 2025(5)
  • 机器学习周报十四
  • 如何解决stun服务无法打洞建立p2p连接的问题
  • 解决项目实践中 java.lang.NoSuchMethodError:的问题
  • JavaSE-多线程(5.2)- ReentrantLock (源码解析,公平模式)
  • 2025华为杯A题B题C题D题E题F题选题建议思路数学建模研研究生数学建模思路代码文章成品
  • 【记录】Docker|Docker中git克隆私有库的安全方法
  • Web之防XSS(跨站脚本攻击)
  • 使用 AI 对 QT应用程序进行翻译
  • Windows下游戏闪退?软件崩溃?游戏环境缺失?软件运行缺少依赖?这个免费工具一键帮您自动修复(DLL文件/DirectX/运行库等问题一键搞定)
  • 【从入门到精通Spring Cloud】统一服务入口Spring Cloud Gateway
  • setfacl 命令
  • Photoshop - Photoshop 分享作品和设计
  • 【Agent 设计模式与工程化】如何做出好一个可持续发展的agent需要考虑的架构
  • 【Camera开发】疑难杂症记录
  • 如何提高自己的Java并发编程能力?
  • Polkadot - ELVES Protocol详解
  • springBoot图片本地存储
  • 蝉镜-AI数字人视频创作平台
  • Linux入门(五)
  • MySqL-day4_03(索引)
  • Vue 深度选择器(:deep)完全指北:从“能用”到“用好”
  • [Nodejs+LangChain+Ollama] 1.第一个案例