标准回答
三者定义
信息熵 (H(p)=-\sum_x p(x)\log p(x)),刻画分布 p 自身的不确定性,越均匀越大。
交叉熵 (H(p,q)=-\sum_x p(x)\log q(x)),表示用 q 设计的编码去描述真实分布 p 的平均比特数。
KL 散度 (KL(p|q)=\sum_x p(x)\log\dfrac{p(x)}{q(x)}),度量 q 相对 p 的差异。
核心恒等式
三者由一条等式串联:
(H(p,q)=H(p)+KL(p|q))
即交叉熵 = 真实分布的熵 + KL 散度。因此 KL 是交叉熵中“因为用了错的分布 q 而多付的代价”。
重要性质
- 非负性:(KL(p|q)\ge 0),等号当且仅当 (p=q)(由 Jensen 不等式得出)。
- 非对称:(KL(p|q)\ne KL(q|p)),所以它不是距离度量。
在分类任务里标签 p 是 one-hot,(H(p)=0),于是最小化交叉熵就等于最小化 KL 散度。
常见误区
⚠️ 常见踩坑
KL 散度不是对称的、也不满足三角不等式,因此不是真正的“距离”;混用 KL(p||q) 与 KL(q||p) 会导致优化目标含义完全不同(前者覆盖、后者寻模)。
追问
追问 1:为什么训练分类模型常用交叉熵而不是直接用 KL 散度?
因为标签分布 p 固定,其熵 (H(p)) 是与模型参数无关的常数(one-hot 时还恒为 0)。由 (H(p,q)=H(p)+KL(p|q)),对参数求导时 (H(p)) 项消失,最小化交叉熵与最小化 KL 散度完全等价,而交叉熵形式更简单、数值上直接对接 softmax 输出,故工程上直接用交叉熵。
追问 2:KL(p||q) 与 KL(q||p) 在实践中有什么不同效果?
(KL(p|q))(前向/矩匹配)惩罚 q 在 p 有质量处取 0,倾向让 q “覆盖”p 的所有模式,结果偏宽;(KL(q|p))(反向/寻模)惩罚 q 在 p 几乎为 0 处放质量,倾向让 q 聚到 p 的某一个高概率模式上,结果偏窄。变分推断常用反向 KL,因此 VI 容易出现 mode-seeking、低估方差。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。