深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵)

2024-06-09 11:36

本文主要是介绍深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵)

信息论

一、自信息(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(xy)=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(xy)=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=1np(xi)logp(xi)

这里的对数通常是以 2 为底(即 log ⁡ 2 \log_2 log2),因此单位是比特(bits)。但是,对数的底也可以是自然对数(单位为纳特,nats)或其他底。

熵衡量的是一个随机变量的平均不确定性,即所有可能事件的自信息量的期望值。
自信息和熵之间的关系可以通过以下步骤来计算和理解:

  1. 计算自信息量
  • 对于随机变量 X X X 的每个可能取值 x x x ,计算其自信息量 I ( x ) = − log ⁡ P ( x ) I(x) = -\log P(x) I(x)=logP(x)
  1. 计算熵
  • 熵是所有可能取值的自信息量的期望值,因此熵 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)=xXP(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)=xXP(x)(logP(x))=xXP(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}

  1. 计算每个取值的自信息量
  • 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 比特
  1. 计算熵
  • 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.51+0.31.737+0.22.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,熵最小。

熵的性质

  1. 非负性:熵总是非负的,即 H ( X ) ≥ 0 H(X) \geq 0 H(X)0
  2. 最大值:对于一个有 n n n 个可能取值且均匀分布的随机变量,熵达到最大值 log ⁡ n \log n logn
  3. 加法性:对于两个独立的随机变量 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(PQ)=xXP(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=1np(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(PQ) 的和:

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(PQ)

其中,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(PQ)=i=1np(xi)logq(xi)p(xi)=i=1np(xi)logp(xi)i=1np(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=1nyilogy^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=1nyilogy^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=1mi=1nyijlogy^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)=iP(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.70.514+0.22.322+0.13.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.70.514+0.22.322+0.13.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.70.737+0.21.737+0.13.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.70.737+0.21.737+0.13.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(PQ)

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(PQ)=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(PQ)=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(PQ)=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(PQ)=0.7log67+0.2log32

使用以2为底的对数:

log ⁡ 7 6 ≈ 0.152 \log \frac{7}{6} \approx 0.152 log670.152
log ⁡ 2 3 ≈ − 0.737 \log \frac{2}{3} \approx -0.737 log320.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(PQ)=0.70.152+0.2(0.737)
D KL ( P ∥ Q ) = 0.1064 − 0.1474 D_{\text{KL}}(P \| Q) = 0.1064 - 0.1474 DKL(PQ)=0.10640.1474
D KL ( P ∥ Q ) = − 0.041 D_{\text{KL}}(P \| Q) = -0.041 DKL(PQ)=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(PQ) 之和:

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(PQ)

验证:

1.1955 ≈ 1.1564 + 0.041 1.1955 \approx 1.1564 + 0.041 1.19551.1564+0.041

六、总结


  1. 计算单个分布的熵时(即香农熵),我们度量的是该分布的内在不确定性: 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 本身不确定性的度量。
  2. 相对熵(KL 散度)
    KL 散度 D K L ( P ∥ Q ) D_{KL}(P \| Q) DKL(PQ) 是度量预测分布 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(PQ)=iP(xi)logQ(xi)P(xi)KL 散度表示了从预测分布 Q Q Q 到实际分布 P P P 的信息损失。
  3. 交叉熵的定义
    交叉熵 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 是模型预测的分布:

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)

输出:

交叉熵 H(P, Q): 1.029653
熵 H(P): 0.9709506
KL 散度 D_KL(P || Q): 0.0587024

这篇关于深入理解交叉熵损失CrossEntropyLoss - 信息论(交叉熵)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045066

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。