机器学习中的熵、信息量、交叉熵和 KL 散度:从入门到严谨

机器学习中的熵、信息量、交叉熵和 KL 散度:从入门到严谨

本文用 4 个难度层级,从"聊天版直觉"出发,一步步走到"比较严谨的数学表述",帮助你系统理解:

  • 熵(Entropy)
  • 信息量(Information)
  • 交叉熵(Cross Entropy)
  • KL 散度(KL Divergence)

Level 1:猜谜游戏版直觉

先想象一个场景:你在玩猜谜游戏

熵:猜之前的"不确定程度"

  • 只有 2 个选项:A 或 B,而且你几乎确定是 A(比如 A 的概率 0.99,B 的概率 0.01)
    → 你心里"八九不离十",不怎么不确定,熵很小
  • 有 4 个选项:A/B/C/D,每个 25%
    → 完全不知道会是哪一个,很不确定,熵大

先记一句话:熵 = 系统的不确定程度。越难猜,熵越大。


信息量:看到结果时"有多惊讶"

  • 一件事本来几乎肯定会发生(比如"明天早上太阳会升起"),结果真的发生了:
    → 一点也不惊讶,信息量很小
  • 一件事本来极不可能发生(比如"你中了 500 万大奖"),结果真发生了:
    → "卧槽!" → 信息量巨大

直觉上:

  • 越不可能的事情,一旦发生,携带的信息量越大。

交叉熵:用"错误认知"来猜的平均难度

你对世界有一套自己的主观认知:

  • 以为 :A 的概率是 0.7、B 是 0.3(这是你的分布 q
  • 真实世界:A 的概率是 0.3、B 是 0.7(真实分布是 p

你始终按照自己的"错误认知" q 去猜、去压缩信息。

那么你平均要付出的"猜测成本",就是 交叉熵 H(p,q)H(p, q)H(p,q)。

可以先记住:
交叉熵 = 用错误认知去处理真实世界时的平均猜测难度(平均信息开销)。

在机器学习里:

  • 模型给出的预测分布是 qqq
  • 标签的真实分布是 ppp
  • 交叉熵就是常见的 cross-entropy loss,衡量模型预测和真实分布差距有多大。

KL 散度:因为"想错了"多浪费的力气

既然有:

  • 熵 H(p)H(p)H(p):在你知道真实概率的情况下,理论上最省力(最小平均 bit 数)
  • 交叉熵 H(p,q)H(p, q)H(p,q):你用错误认知 qqq 来处理真实分布 ppp 时,实际平均付出的 bit 数

那么两者之差:

KL(p ∥ q)=H(p,q)−H(p) \mathrm{KL}(p \,\|\, q) = H(p, q) - H(p) KL(p∥q)=H(p,q)−H(p)

KL(p‖q) = 交叉熵 − 熵 = 你因为 "想错了" 多付出的额外代价

它就像是:

  • 两个概率分布之间的一种"差异度量"
  • 虽然不是对称的、也不满足三角不等式,但可以衡量分布的差异

Level 2:工程师版 + 简单公式

这一层面向"会写代码的工程师",在直觉基础上加几个核心公式。

下面的 log⁡\loglog 默认是以 222 为底,单位就是 bit(你也可以理解为换底后差一个常数因子)。

信息量(自信息)

一个具体结果 xxx 发生的概率是 p(x)p(x)p(x),它的"信息量"定义为

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

  • 如果 p(x)=12p(x)=\tfrac{1}{2}p(x)=21,那么 I(x)=1I(x)=1I(x)=1 bit
  • 如果 p(x)=14p(x)=\tfrac{1}{4}p(x)=41,那么 I(x)=2I(x)=2I(x)=2 bit
    → 更不可能的事:信息量更大

熵:平均信息量

随机变量 XXX 的熵 = 在这个分布下结果出现时的 平均信息量

H(X)=H(p)=−∑xp(x)log⁡2p(x) H(X) = H(p) = - \sum_x p(x) \log_2 p(x) H(X)=H(p)=−x∑p(x)log2p(x)

观察:

  • 分布越均匀,熵越大(越难猜);
  • 分布越偏(一边倒),熵越小。

交叉熵:在真实分布下,用 qqq 的 log⁡\loglog 取期望

真实分布是 p(x)p(x)p(x),你用来"解释/预测"的分布是 q(x)q(x)q(x),
交叉熵定义为:

H(p,q)=−∑xp(x)log⁡2q(x) H(p, q) = - \sum_x p(x) \log_2 q(x) H(p,q)=−x∑p(x)log2q(x)

注意:

  • 求和权重是 真实 p(x)p(x)p(x)
  • log⁡\loglog 的对象是 你假设的 q(x)q(x)q(x)

在深度学习分类任务中:

  • 真实标签 one-hot,比如:
    • 真实类别是 3 → p=(0,0,1,0,... )p = (0,0,1,0,\dots)p=(0,0,1,0,...)
  • 模型预测分布 q=(q1,q2,...,qk)q = (q_1, q_2, \dots, q_k)q=(q1,q2,...,qk)

此时交叉熵:

H(p,q)=−log⁡2qtrue class H(p, q) = -\log_2 q_{\text{true class}} H(p,q)=−log2qtrue class

这正是各种框架里 cross_entropy(pred, target) 的本质含义。


KL 散度:ppp 相对 qqq 的"额外损失"

KL 散度定义:

DKL(p ∥ q)=∑xp(x)log⁡2p(x)q(x) D_{\mathrm{KL}}(p \,\|\, q) = \sum_x p(x) \log_2 \frac{p(x)}{q(x)} DKL(p∥q)=x∑p(x)log2q(x)p(x)

它和熵、交叉熵有一个重要关系式:

H(p,q)=H(p)+DKL(p ∥ q) H(p, q) = H(p) + D_{\mathrm{KL}}(p \,\|\, q) H(p,q)=H(p)+DKL(p∥q)

解释:

  • H(p)H(p)H(p):理想最省的平均 bit 数
  • H(p,q)H(p, q)H(p,q):你用 qqq 这套"错认知"实际花的平均 bit 数
  • 差值 DKLD_{\mathrm{KL}}DKL:额外浪费的 bit,也就是分布不匹配带来的损失

在深度学习中:最小化交叉熵 ⇔ 最小化 KL(p∥q)\mathrm{KL}(p\|q)KL(p∥q)

也就是让模型分布 qqq 逼近真实数据分布 ppp。


Level 3:离散情况的严格定义与性质

这一层更偏"教材风",但仍然聚焦离散情形,公式更严谨。

假设:

  • 随机变量 XXX 在有限或可数集合 X\mathcal{X}X 上取值;
  • 概率质量函数为 p(x)=P(X=x)p(x) = \mathbb{P}(X = x)p(x)=P(X=x)。

自信息 & 熵

自信息:

I(x)=−log⁡p(x) I(x) = -\log p(x) I(x)=−logp(x)

熵:

H(X)=H(p)=Ep[−log⁡p(X)]=−∑x∈Xp(x)log⁡p(x) H(X) = H(p) = \mathbb{E}p[-\log p(X)] = -\sum{x \in \mathcal{X}} p(x) \log p(x) H(X)=H(p)=Ep[−logp(X)]=−x∈X∑p(x)logp(x)

经典性质:

  1. 非负性:H(p)≥0H(p) \ge 0H(p)≥0
  2. 对于给定的状态数 nnn,在所有分布中,均匀分布的熵最大
  3. 独立可加性:若 X,YX, YX,Y 独立,则
    H(X,Y)=H(X)+H(Y) H(X, Y) = H(X) + H(Y) H(X,Y)=H(X)+H(Y)

信息度量的合理性(Shannon 公理)

如果你期望"熵"满足以下直觉化要求:

  1. 连续性:概率变化很小,熵也只小幅变化;
  2. 单调性:对于给定状态数,当分布更均匀时,不确定性更大;
  3. 可加性:独立系统的联合熵等于各自熵的和;

可以证明,此类"信息度量"一般都必须形如:

H(p)=−K∑xp(x)log⁡p(x) H(p) = -K \sum_x p(x) \log p(x) H(p)=−Kx∑p(x)logp(x)

其中 KKK 为常数,决定单位是 bit 还是 nat。


交叉熵

给定两个分布 p,qp, qp,q,定义:

H(p,q)=−∑xp(x)log⁡q(x) H(p, q) = -\sum_x p(x) \log q(x) H(p,q)=−x∑p(x)logq(x)

你可以把它视作:在真实分布 ppp 下,对 "log⁡q(x)\log q(x)logq(x)" 的期望的相反数。

在统计学习中:

  • 最小化经验交叉熵
    ≈ 最小化真实分布与模型分布之间的 KL 散度
    ≈ 做最大似然估计(MLE)的近似。

KL 散度(相对熵)

定义:

DKL(p ∥ q)=∑xp(x)log⁡p(x)q(x) D_{\mathrm{KL}}(p \,\|\, q) = \sum_x p(x) \log \frac{p(x)}{q(x)} DKL(p∥q)=x∑p(x)logq(x)p(x)

基本性质:

  1. 非负性
    DKL(p ∥ q)≥0 D_{\mathrm{KL}}(p \,\|\, q) \ge 0 DKL(p∥q)≥0
    且等号当且仅当 p=qp = qp=q(几乎处处)。
  2. 非对称性 :一般
    DKL(p∥q)≠DKL(q∥p) D_{\mathrm{KL}}(p\|q) \ne D_{\mathrm{KL}}(q\|p) DKL(p∥q)=DKL(q∥p)
  3. 与熵和交叉熵的关系:
    DKL(p ∥ q)=H(p,q)−H(p) D_{\mathrm{KL}}(p \,\|\, q) = H(p, q) - H(p) DKL(p∥q)=H(p,q)−H(p)

换句话说:KL 散度就是"错误模型"带来的额外信息开销。


Level 4:连续情形 & 与最大似然/深度学习的关系

这一层更偏"进阶阅读",涉及连续变量和统计学习的统一视角。


连续型随机变量:微分熵、交叉熵与 KL

若随机变量 XXX 在连续空间上取值,密度为 p(x)p(x)p(x),则:

  • 微分熵(differential entropy)
    h(X)=−∫p(x)log⁡p(x) dx h(X) = - \int p(x) \log p(x) \, dx h(X)=−∫p(x)logp(x)dx

    与离散熵不同,它可以为负数。

  • 交叉熵
    H(p,q)=−∫p(x)log⁡q(x) dx H(p, q) = -\int p(x) \log q(x) \, dx H(p,q)=−∫p(x)logq(x)dx

  • KL 散度
    DKL(p ∥ q)=∫p(x)log⁡p(x)q(x) dx D_{\mathrm{KL}}(p \,\|\, q) = \int p(x) \log \frac{p(x)}{q(x)} \, dx DKL(p∥q)=∫p(x)logq(x)p(x)dx

这些定义在高斯分布、连续密度估计、变分推断等场景下广泛使用。


最大似然、交叉熵与 KL:深度学习损失函数的统一理解

设:

  • 数据来自某个真实分布 pdata(x)p_{\text{data}}(x)pdata(x)(未知解析形式);
  • 模型族为 qθ(x)q_\theta(x)qθ(x)(参数为 θ\thetaθ);
  • 观测到样本 x1,...,xnx_1, \dots, x_nx1,...,xn。

最大似然估计(MLE):

θ^MLE=arg⁡max⁡θ1n∑i=1nlog⁡qθ(xi) \hat{\theta}{\text{MLE}} = \arg\max\theta \frac{1}{n} \sum_{i=1}^n \log q_\theta(x_i) θ^MLE=argθmaxn1i=1∑nlogqθ(xi)

等价于最小化负对数似然:

θ^MLE=arg⁡min⁡θ(−1n∑i=1nlog⁡qθ(xi)) \hat{\theta}{\text{MLE}} = \arg\min\theta \left( -\frac{1}{n}\sum_{i=1}^n \log q_\theta(x_i) \right) θ^MLE=argθmin(−n1i=1∑nlogqθ(xi))

当 n→∞n \to \inftyn→∞ 时,有近似:

−1n∑i=1nlog⁡qθ(xi)≈Epdata[−log⁡qθ(X)]=H(pdata,qθ) -\frac{1}{n}\sum_{i=1}^n \log q_\theta(x_i) \approx \mathbb{E}{p{\text{data}}}[-\log q_\theta(X)] = H(p_{\text{data}}, q_\theta) −n1i=1∑nlogqθ(xi)≈Epdata[−logqθ(X)]=H(pdata,qθ)

而又有:

H(p_{\\text{data}}, q_\\theta) = H(p_{\\text{data}}) * D_{\\mathrm{KL}}(p_{\\text{data}} ,\|, q_\\theta)

其中 H(pdata)H(p_{\text{data}})H(pdata) 与 θ\thetaθ 无关,于是:

最小化交叉熵 ⇔ 最小化 KL(pdata∥qθ)\mathrm{KL}(p_{\text{data}}\|q_\theta)KL(pdata∥qθ) ⇔ 最大似然估计。

这给了我们一个统一视角:

  • 分类任务里的 cross entropy loss
  • 语言模型的 next-token negative log-likelihood
  • 各种分布拟合问题

本质上都在做同一件事:
让模型分布尽可能贴近真实数据分布。


小结

  • :刻画系统整体的不确定性,等于平均信息量。
  • 信息量:单个结果"有多出乎意料",概率越小、信息量越大。
  • 交叉熵 :在真实分布下,使用"假设分布" qqq 来编码/预测时的平均信息代价。
  • KL 散度 :交叉熵与真实熵的差值,表示用 qqq 描述 ppp 多付出的代价,是一种分布差异度量。
相关推荐
逻极31 分钟前
从“炼丹”到“炼钢”:我们如何将机器学习推理服务吞吐量提升300%
机器学习·ai·scikit-learn
serve the people31 分钟前
TensorFlow 模型的 “完整保存与跨环境共享” 方案
人工智能·tensorflow·neo4j
Mr数据杨33 分钟前
企划部绩效考核关键指标与评估体系设计
人工智能·aigc
xcLeigh33 分钟前
openEuler 在 AI 与云原生场景下的性能评测与实践
人工智能·云原生·openeuler
know__ledge34 分钟前
吴恩达机器学习2022 -- Course1 -- Week3(分类问题)
人工智能·算法·目标检测·机器学习·分类
爱笑的源码基地35 分钟前
智慧工地云平台源码,采用Java+SpringCloud+UniApp+MySql技术,支持多端展示,具备集团级多级权限管理。
人工智能·后端·spring·spring cloud·源码·智慧工地·工地智能管理
Aevget35 分钟前
DevExtreme JS & ASP.NET Core v25.2新功能预览 - 提升AI扩展功能
javascript·人工智能·ui·asp.net·界面控件·devextreme
乱世军军36 分钟前
AI 三大学习类型(监督/无监督/强化)的分类图
人工智能·学习
双翌视觉36 分钟前
机器视觉之眼:彩色相机的成像效果与预处理技术解析
人工智能·数码相机·机器学习