深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵)
信息论
- [深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵)](#深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵))
-
- 一、自信息(Self-Information)
-
- [1. 符号取负](#1. 符号取负)
- [2. 对数的性质](#2. 对数的性质)
- [3. 信息的度量](#3. 信息的度量)
- 数学推导与例子
- 二、熵(Entropy)的定义
- [三、KL 散度](#三、KL 散度)
- 四、交叉熵
- 五、交叉熵作为损失函数
-
- 交叉熵损失函数的具体计算
- [计算香农熵 H ( P ) H(P) H(P)](#计算香农熵 H ( P ) H(P) H(P))
- [计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q)](#计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q))
- [计算 KL 散度 D KL ( P ∥ Q ) D_{\text{KL}}(P \| Q) DKL(P∥Q)](#计算 KL 散度 D KL ( P ∥ Q ) D_{\text{KL}}(P | Q) DKL(P∥Q))
- 验证
- 六、总结
一、自信息(Self-Information)
- 定义:自信息量是衡量一个特定事件发生时所带来的信息量。对于一个事件 x x x ,其自信息量定义为:
I ( x ) = − log P ( x ) I(x) = -\log P(x) I(x)=−logP(x)
其中, P ( x ) P(x) P(x) 是事件 x x x 发生的概率,通常以2为底数(即比特)。
事件越不可能发生,其自信息量越大。
自信息(Self-Information)用 − log P ( x ) -\log P(x) −logP(x) 来表示的原因主要基于以下几点:
使用 − log P ( x ) -\log P(x) −logP(x) 来表示自信息的选择,符合数学性质和直观理解。通过对数的单调递减性和可加性,能够很好地衡量信息量并且满足累加的性质。此外,负号确保了信息量的非负性,使得自信息的度量更具逻辑性和实用性。
1. 符号取负
自信息量的公式为 I ( x ) = − log P ( x ) I(x) = -\log P(x) I(x)=−logP(x) 中的负号是为了确保信息量是非负的。概率 P ( x ) P(x) P(x) 的取值范围是 [ 0 , 1 ] [0, 1] [0,1],所以 log P ( x ) \log P(x) logP(x) 是一个负数或零(对于 P ( x ) = 1 P(x) = 1 P(x)=1 的情况),取负号后,得到的自信息量 I ( x ) I(x) I(x) 是一个非负数。我们希望信息量是正值,因为信息量不能是负的。
2. 对数的性质
对数函数具有几个重要的性质,使其非常适合用来衡量信息量:
- 单调递减性 :对数函数是单调递减的,即 P ( x ) P(x) P(x) 越大, log P ( x ) \log P(x) logP(x) 越小。这与直觉相符:一个事件越不可能发生(概率越小),其信息量应当越大。
- 可加性 :对数函数的一个重要性质是可加性。即对于两个独立事件 x x x 和 y y y,它们同时发生的概率为 P ( x ∩ y ) = P ( x ) P ( y ) P(x \cap y) = P(x)P(y) P(x∩y)=P(x)P(y),则其自信息量为:
I ( x ∩ y ) = − log ( P ( x ) P ( y ) ) = − log P ( x ) − log P ( y ) = I ( x ) + I ( y ) I(x \cap y) = -\log(P(x)P(y)) = -\log P(x) - \log P(y) = I(x) + I(y) I(x∩y)=−log(P(x)P(y))=−logP(x)−logP(y)=I(x)+I(y)
这意味着两个独立事件的自信息量之和等于各自自信息量的和,满足信息累积的直觉。
3. 信息的度量
对数函数用于度量信息量,符合信息的基本特性:
- 零信息量 :当事件确定发生(即 P ( x ) = 1 P(x) = 1 P(x)=1)时, log 1 = 0 \log 1 = 0 log1=0,所以 I ( x ) = 0 I(x) = 0 I(x)=0。这符合我们的直觉:一个确定的事件不带来任何新的信息。
- 信息量的增长:当事件的概率降低时,信息量增加。例如,对于稀有事件(概率非常小),其自信息量会非常大,因为稀有事件发生带来的信息量是巨大的。
数学推导与例子
假设我们有一个随机变量 X X X ,其取值集合为 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3},并且对应的概率分布为 { P ( x 1 ) = 0.5 , P ( x 2 ) = 0.3 , P ( x 3 ) = 0.2 } \{P(x_1) = 0.5, P(x_2) = 0.3, P(x_3) = 0.2\} {P(x1)=0.5,P(x2)=0.3,P(x3)=0.2}。计算各个取值的自信息量:
- I ( x 1 ) = − log ( 0.5 ) = 1 I(x_1) = -\log(0.5) = 1 I(x1)=−log(0.5)=1 比特
- I ( x 2 ) = − log ( 0.3 ) ≈ 1.737 I(x_2) = -\log(0.3) \approx 1.737 I(x2)=−log(0.3)≈1.737 比特
- I ( x 3 ) = − log ( 0.2 ) = 2.322 I(x_3) = -\log(0.2) = 2.322 I(x3)=−log(0.2)=2.322 比特
从这里可以看出,概率较小的事件(如 x 3 x_3 x3)其自信息量较大,而概率较大的事件(如 x 1 x_1 x1)其自信息量较小。这符合我们对信息量的直觉:罕见事件发生带来的信息更多,而常见事件带来的信息较少。
二、熵(Entropy)的定义
香农(Claude Shannon)在他的开创性论文《通信的数学理论》中首次引入了熵的概念,用于量化信息的不确定性或信息量。香农熵的定义是基于概率论和信息论的基本原理。
熵的其他名字包括 香农熵、信息熵、信源熵、平均自信息量
熵 H H H 是度量一个离散随机变量 X X X 的不确定性。假设 X X X 有 n n n 个可能的取值,每个取值 x i x_i xi 的概率为 p ( x i ) p(x_i) p(xi),则香农熵定义为:
H ( X ) = − ∑ i = 1 n p ( x i ) log p ( x i ) H(X) = -\sum_{i=1}^{n} p(x_i) \log p(x_i) H(X)=−i=1∑np(xi)logp(xi)
这里的对数通常是以 2 为底(即 log 2 \log_2 log2),因此单位是比特(bits)。但是,对数的底也可以是自然对数(单位为纳特,nats)或其他底。
熵衡量的是一个随机变量的平均不确定性,即所有可能事件的自信息量的期望值。
自信息和熵之间的关系可以通过以下步骤来计算和理解:
- 计算自信息量:
- 对于随机变量 X X X 的每个可能取值 x x x ,计算其自信息量 I ( x ) = − log P ( x ) I(x) = -\log P(x) I(x)=−logP(x)
- 计算熵:
- 熵是所有可能取值的自信息量的期望值,因此熵 H ( X ) H(X) H(X) 是每个取值的自信息量 I ( x ) I(x) I(x) 和其概率 P ( x ) P(x) P(x) 的乘积之和,即:
H ( X ) = ∑ x ∈ X P ( x ) ⋅ I ( x ) H(X) = \sum_{x \in X} P(x) \cdot I(x) H(X)=x∈X∑P(x)⋅I(x) - 结合自信息量的定义,熵可以表示为:
H ( X ) = ∑ x ∈ X P ( x ) ⋅ ( − log P ( x ) ) = − ∑ x ∈ X P ( x ) log P ( x ) H(X) = \sum_{x \in X} P(x) \cdot (-\log P(x)) = -\sum_{x \in X} P(x) \log P(x) H(X)=x∈X∑P(x)⋅(−logP(x))=−x∈X∑P(x)logP(x)
例子
假设我们有一个离散随机变量 X X X ,其取值集合为 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3},并且对应的概率分布为 { P ( x 1 ) = 0.5 , P ( x 2 ) = 0.3 , P ( x 3 ) = 0.2 } \{P(x_1) = 0.5, P(x_2) = 0.3, P(x_3) = 0.2\} {P(x1)=0.5,P(x2)=0.3,P(x3)=0.2}。
- 计算每个取值的自信息量:
- I ( x 1 ) = − log ( 0.5 ) = 1 I(x_1) = -\log(0.5) = 1 I(x1)=−log(0.5)=1 比特
- I ( x 2 ) = − log ( 0.3 ) ≈ 1.737 I(x_2) = -\log(0.3) \approx 1.737 I(x2)=−log(0.3)≈1.737 比特
- I ( x 3 ) = − log ( 0.2 ) = 2.322 I(x_3) = -\log(0.2) = 2.322 I(x3)=−log(0.2)=2.322 比特
- 计算熵:
- 熵 H ( X ) = 0.5 ⋅ 1 + 0.3 ⋅ 1.737 + 0.2 ⋅ 2.322 H(X) = 0.5 \cdot 1 + 0.3 \cdot 1.737 + 0.2 \cdot 2.322 H(X)=0.5⋅1+0.3⋅1.737+0.2⋅2.322
- 熵 H ( X ) = 0.5 + 0.5211 + 0.4644 H(X) = 0.5 + 0.5211 + 0.4644 H(X)=0.5+0.5211+0.4644
- 熵 H ( X ) ≈ 1.4855 H(X) \approx 1.4855 H(X)≈1.4855 比特
通过以上计算,我们可以看到,自信息量是单个事件的信息量,而熵是所有可能事件自信息量的加权平均,即整个随机变量的平均不确定性。
直观理解
香农熵度量的是一个随机变量的平均信息量,或从概率分布中选择一个随机事件时所需要的最小编码长度。
- 高熵:如果一个随机变量的熵很高,意味着这个变量的值具有很大的不确定性。分布越均匀,熵越高。例如,如果所有事件的概率相等(均匀分布),熵最大。
- 低熵:如果一个随机变量的熵很低,意味着这个变量的值具有很低的不确定性。分布越偏向某些事件,熵越低。例如,如果某个事件的概率接近 1,熵最小。
熵的性质
- 非负性 :熵总是非负的,即 H ( X ) ≥ 0 H(X) \geq 0 H(X)≥0。
- 最大值 :对于一个有 n n n 个可能取值且均匀分布的随机变量,熵达到最大值 log n \log n logn。
- 加法性 :对于两个独立的随机变量 X X X 和 Y Y Y,它们的联合熵等于各自熵的和,即 H ( X , Y ) = H ( X ) + H ( Y ) H(X, Y) = H(X) + H(Y) H(X,Y)=H(X)+H(Y)。
例子
假设我们有一个公平的二元随机变量 X X X,它可以取值 0 或 1,每个值的概率均为 0.5。则其熵为:
H ( X ) = − ( 0.5 log 2 0.5 + 0.5 log 2 0.5 ) = − 2 × 0.5 log 2 0.5 = 1 bit H(X) = -\left(0.5 \log_2 0.5 + 0.5 \log_2 0.5\right) = -2 \times 0.5 \log_2 0.5 = 1 \text{ bit} H(X)=−(0.5log20.5+0.5log20.5)=−2×0.5log20.5=1 bit
这个结果意味着,从这个变量中提取的信息量平均为 1 比特。
三、KL 散度
Kullback-Leibler 散度 ,简称 KL 散度,是以美国数学家和统计学家 Solomon Kullback 和 Richard A. Leibler 的名字命名的。它们在 1951 年发表的一篇重要论文《On Information and Sufficiency》中首次提出了这个概念【KL散度】。
由来和意义
在他们的论文中,Kullback 和 Leibler 讨论了如何量化两个概率分布之间的差异,提出了用信息理论的方法来比较两个概率分布的距离。这种度量方法后来被称为 Kullback-Leibler 散度或相对熵。
名字的由来
- Kullback: Solomon Kullback (1907-1994),是一位美国数学家和密码学家,对信息理论和统计学有着重要贡献。
- Leibler: Richard A. Leibler (1914-2003),是一位美国数学家和信息理论学家,与 Kullback 一起合作提出了 KL 散度的概念。KL 散度不仅用于衡量两个概率分布之间的差异,还用于各种优化算法和模型评估。
KL 散度的定义
KL 散度衡量的是从分布 P P P 到分布 Q Q Q 的额外信息量或不确定性,定义如下:
D KL ( P ∥ Q ) = ∑ x ∈ X P ( x ) log P ( x ) Q ( x ) D_{\text{KL}}(P \| Q) = \sum_{x \in X} P(x) \log \frac{P(x)}{Q(x)} DKL(P∥Q)=x∈X∑P(x)logQ(x)P(x)
其中 P P P 是真实分布, Q Q Q 是预测分布。
直观理解
KL 散度提供了一种定量方法,描述了如果我们用分布 Q Q Q 来近似分布 P P P,我们会损失多少信息。KL 散度值越大,说明 Q Q Q 相较于 P P P 的近似越差。KL 散度为零时表示 P P P 和 Q Q Q 完全相同。
实际应用
在实际应用中,KL 散度广泛用于各种机器学习和统计模型中,例如:
- 模型评估:衡量模型预测的分布与真实分布之间的差异。
- 信息理论:在数据压缩和通信系统中,用于测量信息损失。
- 变分推断:在贝叶斯推断中,用于优化后验分布的近似。
四、交叉熵
交叉熵是用于衡量两个概率分布之间差异的度量。在分类任务中,交叉熵损失函数常用于衡量模型预测概率分布与真实标签分布之间的差异。
假设有两个概率分布 P P P 和 Q Q Q,其中 P P P 是真实分布, Q Q Q 是模型预测的分布。
交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 就是衡量一个实际分布 P P P 和一个估计分布 Q Q Q 之间的差异。假设两个分布 P P P 和 Q Q Q 定义在同一个随机变量 X X X 上,交叉熵定义为:
H ( P , Q ) = − ∑ i = 1 n p ( x i ) log q ( x i ) H(P, Q) = -\sum_{i=1}^{n} p(x_i) \log q(x_i) H(P,Q)=−i=1∑np(xi)logq(xi)
交叉熵的名字反映了其计算方法和目的:
- 交叉 :指两个概率分布 P P P 和 Q Q Q 的交互。这种交互体现在公式中使用实际分布 P P P 的概率加权预测分布 Q Q Q 的对数值。
- 熵 :表示度量分布不确定性的一种方式。交叉熵结合了两个分布的熵,反映了从实际分布 P P P 到预测分布 Q Q Q 的不确定性。
交叉熵的解释
交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 可以分解为香农熵 H ( P ) H(P) H(P) 和相对熵(即 KL 散度) D KL ( P ∥ Q ) D_{\text{KL}}(P \| Q) DKL(P∥Q) 的和:
H ( P , Q ) = H ( P ) + D KL ( P ∥ Q ) H(P, Q) = H(P) + D_{\text{KL}}(P \| Q) H(P,Q)=H(P)+DKL(P∥Q)
其中,KL 散度定义为:
D KL ( P ∥ Q ) = ∑ i = 1 n p ( x i ) log p ( x i ) q ( x i ) = ∑ i = 1 n p ( x i ) log p ( x i ) − ∑ i = 1 n p ( x i ) log q ( x i ) D_{\text{KL}}(P \| Q) = \sum_{i=1}^{n} p(x_i) \log \frac{p(x_i)}{q(x_i)} = \sum_{i=1}^{n} p(x_i) \log p(x_i) - \sum_{i=1}^{n} p(x_i) \log q(x_i) DKL(P∥Q)=i=1∑np(xi)logq(xi)p(xi)=i=1∑np(xi)logp(xi)−i=1∑np(xi)logq(xi)
这表明,交叉熵是香农熵与分布 P P P 和 Q Q Q 之间的差异之和。当 P P P 和 Q Q Q 完全相同时,KL 散度为零,交叉熵等于香农熵。
五、交叉熵作为损失函数
在分类任务中,真实分布 P P P 通常由真实标签决定,通常为 one-hot 编码形式,而 Q Q Q 是模型的输出经过 softmax 处理后的概率分布。
在机器学习,特别是分类任务中,交叉熵常被用作损失函数。目标是最小化实际标签分布 P P P 和预测标签分布 Q Q Q 之间的差异。
假设我们有一个分类任务,实际的标签是 y y y,预测的概率分布是 y ^ \hat{y} y^。交叉熵损失函数定义为:
Loss = H ( P , Q ) = − ∑ i = 1 n y i log y ^ i \text{Loss} = H(P, Q) = -\sum_{i=1}^{n} y_i \log \hat{y}_i Loss=H(P,Q)=−i=1∑nyilogy^i
其中:
- y i y_i yi 是实际标签的分布(通常是 one-hot 编码)。
- y ^ i \hat{y}_i y^i 是模型预测的概率分布。
交叉熵损失函数的具体计算
对于一个单个样本的分类问题,假设真实标签是 y y y(one-hot 编码),预测的概率分布是 y ^ \hat{y} y^,则交叉熵损失函数为:
Loss = − ∑ i = 1 n y i log y ^ i \text{Loss} = -\sum_{i=1}^{n} y_i \log \hat{y}_i Loss=−i=1∑nyilogy^i
对于批量样本,交叉熵损失函数是所有样本损失的平均值:
Loss batch = − 1 m ∑ j = 1 m ∑ i = 1 n y i j log y ^ i j \text{Loss}{\text{batch}} = -\frac{1}{m} \sum{j=1}^{m} \sum_{i=1}^{n} y_{ij} \log \hat{y}_{ij} Lossbatch=−m1j=1∑mi=1∑nyijlogy^ij
其中 m m m 是批量大小, n n n 是类别数, y i j y_{ij} yij 是第 j j j 个样本的第 i i i 类实际标签(one-hot 编码), y ^ i j \hat{y}_{ij} y^ij 是第 j j j 个样本的第 i i i 类预测概率。
假设我们有一个分类问题,有3个类别 A A A、 B B B 和 C C C,实际分布 P P P 和模型预测分布 Q Q Q 如下:
-
实际分布 P P P:
P ( A ) = 0.7 P(A) = 0.7 P(A)=0.7,
P ( B ) = 0.2 P(B) = 0.2 P(B)=0.2,
P ( C ) = 0.1 P(C) = 0.1 P(C)=0.1 -
预测分布 Q Q Q:
Q ( A ) = 0.6 Q(A) = 0.6 Q(A)=0.6,
Q ( B ) = 0.3 Q(B) = 0.3 Q(B)=0.3,
Q ( C ) = 0.1 Q(C) = 0.1 Q(C)=0.1
计算香农熵 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)
计算:
H ( P ) = − ( 0.7 log 0.7 + 0.2 log 0.2 + 0.1 log 0.1 ) H(P) = -(0.7 \log 0.7 + 0.2 \log 0.2 + 0.1 \log 0.1) H(P)=−(0.7log0.7+0.2log0.2+0.1log0.1)
使用自然对数 ln \ln ln 或者以2为底的对数 log 2 \log_2 log2,结果相同,只是单位不同。这里我们使用以2为底的对数:
H ( P ) ≈ − ( 0.7 ⋅ ( − 0.514 ) + 0.2 ⋅ ( − 2.322 ) + 0.1 ⋅ ( − 3.322 ) ) H(P) \approx -(0.7 \cdot (-0.514) + 0.2 \cdot (-2.322) + 0.1 \cdot (-3.322)) H(P)≈−(0.7⋅(−0.514)+0.2⋅(−2.322)+0.1⋅(−3.322))
H ( P ) ≈ − ( 0.7 ⋅ − 0.514 + 0.2 ⋅ − 2.322 + 0.1 ⋅ − 3.322 ) H(P) \approx -(0.7 \cdot -0.514 + 0.2 \cdot -2.322 + 0.1 \cdot -3.322) H(P)≈−(0.7⋅−0.514+0.2⋅−2.322+0.1⋅−3.322)
H ( P ) ≈ 0.7 ⋅ 0.514 + 0.2 ⋅ 2.322 + 0.1 ⋅ 3.322 H(P) \approx 0.7 \cdot 0.514 + 0.2 \cdot 2.322 + 0.1 \cdot 3.322 H(P)≈0.7⋅0.514+0.2⋅2.322+0.1⋅3.322
H ( P ) ≈ 0.3598 + 0.4644 + 0.3322 H(P) \approx 0.3598 + 0.4644 + 0.3322 H(P)≈0.3598+0.4644+0.3322
H ( P ) ≈ 1.1564 H(P) \approx 1.1564 H(P)≈1.1564
计算交叉熵 H ( P , Q ) H(P, Q) H(P,Q)
交叉熵度量的是使用预测分布 Q Q Q 来编码实际分布 P P P 的平均编码长度:
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 ) = − ( 0.7 log 0.6 + 0.2 log 0.3 + 0.1 log 0.1 ) H(P, Q) = -(0.7 \log 0.6 + 0.2 \log 0.3 + 0.1 \log 0.1) H(P,Q)=−(0.7log0.6+0.2log0.3+0.1log0.1)
同样使用以2为底的对数:
H ( P , Q ) ≈ − ( 0.7 ⋅ − 0.737 + 0.2 ⋅ − 1.737 + 0.1 ⋅ − 3.322 ) H(P, Q) \approx -(0.7 \cdot -0.737 + 0.2 \cdot -1.737 + 0.1 \cdot -3.322) H(P,Q)≈−(0.7⋅−0.737+0.2⋅−1.737+0.1⋅−3.322)
H ( P , Q ) ≈ 0.7 ⋅ 0.737 + 0.2 ⋅ 1.737 + 0.1 ⋅ 3.322 H(P, Q) \approx 0.7 \cdot 0.737 + 0.2 \cdot 1.737 + 0.1 \cdot 3.322 H(P,Q)≈0.7⋅0.737+0.2⋅1.737+0.1⋅3.322
H ( P , Q ) ≈ 0.5159 + 0.3474 + 0.3322 H(P, Q) \approx 0.5159 + 0.3474 + 0.3322 H(P,Q)≈0.5159+0.3474+0.3322
H ( P , Q ) ≈ 1.1955 H(P, Q) \approx 1.1955 H(P,Q)≈1.1955
计算 KL 散度 D KL ( P ∥ Q ) D_{\text{KL}}(P \| Q) DKL(P∥Q)
KL 散度度量的是预测分布 Q Q Q 相对于实际分布 P P P 的信息损失:
D KL ( P ∥ Q ) = ∑ i P ( x i ) log P ( x i ) Q ( x i ) D_{\text{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)
计算:
D KL ( P ∥ Q ) = 0.7 log 0.7 0.6 + 0.2 log 0.2 0.3 + 0.1 log 0.1 0.1 D_{\text{KL}}(P \| Q) = 0.7 \log \frac{0.7}{0.6} + 0.2 \log \frac{0.2}{0.3} + 0.1 \log \frac{0.1}{0.1} DKL(P∥Q)=0.7log0.60.7+0.2log0.30.2+0.1log0.10.1
D KL ( P ∥ Q ) = 0.7 log 7 6 + 0.2 log 2 3 + 0.1 log 1 D_{\text{KL}}(P \| Q) = 0.7 \log \frac{7}{6} + 0.2 \log \frac{2}{3} + 0.1 \log 1 DKL(P∥Q)=0.7log67+0.2log32+0.1log1
因为 log 1 = 0 \log 1 = 0 log1=0,所以下面的计算是:
D KL ( P ∥ Q ) = 0.7 log 7 6 + 0.2 log 2 3 D_{\text{KL}}(P \| Q) = 0.7 \log \frac{7}{6} + 0.2 \log \frac{2}{3} DKL(P∥Q)=0.7log67+0.2log32
使用以2为底的对数:
log 7 6 ≈ 0.152 \log \frac{7}{6} \approx 0.152 log67≈0.152
log 2 3 ≈ − 0.737 \log \frac{2}{3} \approx -0.737 log32≈−0.737
计算:
D KL ( P ∥ Q ) = 0.7 ⋅ 0.152 + 0.2 ⋅ ( − 0.737 ) D_{\text{KL}}(P \| Q) = 0.7 \cdot 0.152 + 0.2 \cdot (-0.737) DKL(P∥Q)=0.7⋅0.152+0.2⋅(−0.737)
D KL ( P ∥ Q ) = 0.1064 − 0.1474 D_{\text{KL}}(P \| Q) = 0.1064 - 0.1474 DKL(P∥Q)=0.1064−0.1474
D KL ( P ∥ Q ) = − 0.041 D_{\text{KL}}(P \| Q) = -0.041 DKL(P∥Q)=−0.041
验证
交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 是香农熵 H ( P ) H(P) H(P) 和 KL 散度 D KL ( P ∥ Q ) D_{\text{KL}}(P \| Q) DKL(P∥Q) 之和:
H ( P , Q ) = H ( P ) + D KL ( P ∥ Q ) H(P, Q) = H(P) + D_{\text{KL}}(P \| Q) H(P,Q)=H(P)+DKL(P∥Q)
验证:
1.1955 ≈ 1.1564 + 0.041 1.1955 \approx 1.1564 + 0.041 1.1955≈1.1564+0.041
六、总结
- 熵 :
计算单个分布的熵时(即香农熵),我们度量的是该分布的内在不确定性: 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 P P 本身不确定性的度量。 - 相对熵(KL 散度) :
KL 散度 D K L ( P ∥ Q ) D_{KL}(P \| Q) DKL(P∥Q) 是度量预测分布 Q Q Q 相对于实际分布 P P P 的差异: 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)KL 散度表示了从预测分布 Q Q Q 到实际分布 P P P 的信息损失。 - 交叉熵的定义 :
交叉熵 H ( P , Q ) H(P, Q) H(P,Q) 是实际分布 P P P 和预测分布 Q Q 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)其中, P ( x i ) P(x_i) P(xi) 是实际分布的概率, Q ( x i ) Q(x_i) Q(xi) 是预测分布的概率。
示例
假设有两个分布 P P P 和 Q Q Q,其中 P P P 是真实分布, Q Q Q 是模型预测的分布:
python
import numpy as np
# 定义分布 P 和 Q
P = np.array([0.1, 0.4, 0.5])
Q = np.array([0.3, 0.4, 0.3])
# 计算交叉熵 H(P, Q)
cross_entropy = -np.sum(P * np.log(Q))
# 计算 P 的熵 H(P)
entropy_P = -np.sum(P * np.log(P))
# 计算 KL 散度 D_KL(P || Q)
kl_divergence = np.sum(P * np.log(P / Q))
print("交叉熵 H(P, Q):", cross_entropy)
print("熵 H(P):", entropy_P)
print("KL 散度 D_KL(P || Q):", kl_divergence)
输出:
css
交叉熵 H(P, Q): 1.029653
熵 H(P): 0.9709506
KL 散度 D_KL(P || Q): 0.0587024