香农信息量/自信息、信息熵、相对熵/KL散度/信息散度、交叉熵
香农信息量/自信息、信息熵、相对熵/KL散度/信息散度、交叉熵
信息熵是信息论中的一个核心概念,用于量化信息的不确定性。本文将从香农信息量开始,逐步介绍信息熵、相对熵(KL散度)和交叉熵等重要概念,并探讨它们在深度学习中的应用。
1. 引言
在学习深度学习和信息论的过程中,我们经常会遇到一个名词——“信息熵”。对于初学者来说,这个概念可能有些抽象,甚至有点让人困惑。本文将从零开始,为大家详细解释什么是信息熵,以及它在计算机和信息论中的重要作用。
2. 什么是熵?
熵(Entropy)最初是一个热力学概念,用来描述系统的混乱程度。后来,这个概念被引入信息论,用来量化信息的“不确定性”。
3. 香农信息量/自信息
在理解信息熵之前,我们需要先了解另一个重要概念——香农信息量。
香农信息量的定义
香农信息量(Shannon Information Content)是指一个事件发生时所携带的信息量。对于一个事件 $x_i$,其香农信息量的计算公式为:
$$
I(x_i) = -\log_2 P(x_i)
$$
其中:
- $I(x_i)$ 表示事件 $x_i$ 的信息量。
- $P(x_i)$ 表示事件 $x_i$ 发生的概率。对于连续性随机变量 $X$,$P$ 为其概率分布,$P(x)$ 为 $X$ 在 $X = x$ 处的概率密度函数值。
这时香农信息量的单位为比特。如果对数以 $e$ 为底,单位就是纳特(nat)。
香农信息量的含义
已知事件发生的概率为 $P(x)$,则需要用多少个比特来描述(唯一标识)这个事件?
在二进制系统中,一个比特可以表示两种状态(0 或 1)。如果我们需要 $n$ 个比特来表示一个事件,这意味着我们可以区分 $2^n$ 种不同的状态,每个状态的概率是 $\frac{1}{2^n}$。
$$
P(x) = \frac{1}{2^n} \
n = -\log_2 \frac{1}{P(x)} = -\log_2 P(x)
$$
概率越低,事件越罕见,所需的比特数越多,信息量也就越大。通过这个公式,我们能够量化事件发生时的信息量,并且这个量化结果在二进制系统中有直接的实际意义。
直观理解:数据 aaBaaaVaaaaa
,三个字母出现的概率分别为:$P(a) = \frac{10}{12}, P(B) = \frac{1}{12}, P(V) = \frac{1}{12}$
香农信息量分别为:$I(a) = 0.263, I(B) = 3.585, I(V) = 3.585$
由于比特数向上取整,所以我们分别需要 1、4、4 个比特来代表这 3 个字母,比如把 $a$ 编码为 0,把 $B$ 编码为 1000,把 $V$ 编码为 1001,数据编码结果就成了:001000000100100000
但这时我们可能会想,在这种情况下用 4 个比特是不是有点浪费了?直接把 $a$ 编码为 0,把 $B$ 编码为 10,把 $V$ 编码为 11,也可以实现无损编码,压缩更大。但是如果对于另一组数据:abBcdeVfhgim
,这时 $B$ 和 $V$ 的香农信息量仍然是 3.585 个比特,但是 2 个比特就不能区分这 12 个字母了,4 个比特才能保证可以编码 $B$ 和 $V$。香农信息量就是保证能编码事件时所用的比特数。
香农信息量计算示例
如果一个事件 $A$ 的发生概率为 0.1,那么其香农信息量为:
$$
I(A) = -\log_2 0.1 \approx 3.32
$$
这表示事件 $A$ 发生时,它携带了约 3.32 bits 的信息量。
香农信息量与信息熵的关系
信息熵是所有可能事件的香农信息量的期望值。换句话说,信息熵是香农信息量的加权平均值,权重为每个事件发生的概率。因此,信息熵可以看作是整个信息源的不确定性的度量。
4. 信息熵
信息熵的定义
信息熵是由克劳德·香农(Claude Shannon)在 1948 年提出的一个概念。它用于衡量信息源产生的信息量。简单来说,信息熵表示的是在一个信息源中,每个符号出现的平均不确定性。
信息熵的计算公式
用期望评估整体系统的信息量:“事件香农信息量×事件概率”的累加
$$
H(p) = E[I(x)] = E[-\log(p(x))]
$$
信息熵公式
(对于连续型随机变量):
$$
H(p) = H(X) = E_{x \sim p(x)}[-\log p(x)] = -\int p(x) \log p(x) dx
$$
(对于离散型随机变量):
$$
H(p) = H(X) = E_{x \sim p(x)}[-\log p(x)] = -\sum_{i=1}^n p(x_i) \log p(x_i)
$$
其中:
- $H(X)$ 表示随机变量 $X$ 的熵。
- $P(x_i)$ 表示随机变量 $X$ 取值 $x_i$ 的概率。
一般情况下在神经网络中,默认以 $e$ 为底,这样算出来的香农信息量虽然不是最小的可用于完整表示事件的比特数,但对于信息熵的含义来说是区别不大的。其实只要这个底数是大于 1 的,都能用来表达信息熵的大小。
信息熵计算示例
为了更好地理解这个公式,我们来看一个具体的例子。假设我们有一个信息源,它只会产生四个符号 $A, B, C, D$,它们出现的概率分别是 0.1, 0.2, 0.4 和 0.3。那么,这个信息源的熵可以计算如下:
$$
H(X) = -(0.1 \log_2 0.1 + 0.2 \log_2 0.2 + 0.4 \log_2 0.4 + 0.3 \log_2 0.3)
$$
通过计算我们可以得到:
$$
H(X) \approx 1.846
$$
这个结果表明,在这个信息源中,每个符号平均包含约 1.846 bits 的信息。
5. 衡量两个分布间的差异:相对熵/KL散度/信息散度 & 交叉熵
相对熵
两个概率分布间差异的非对称性度量。在信息论中,相对熵等价于两个概率分布的信息熵的差值,若其中一个概率分布为真实分布($p(x_i)$),另一个为理论(拟合)分布($q(x_i)$),则此时相对熵等于交叉熵 1 与真实分布的信息熵之差,表示使用理论分布拟合真实分布时产生的信息损耗:
$$
D_{KL}(p \parallel q) = \sum_{i=1}^N \Big[p(x_i) \log p(x_i) - p(x_i) \log q(x_i)\Big]
$$
其中:
- $P(x_i)$ 是真实分布 $P$ 中事件 $x_i$ 的概率。
- $Q(x_i)$ 是近似分布 $Q$ 中事件 $x_i$ 的概率。
有一种理解是:信息量变成了 $-\log(q)$,但事件概率还是原先的 $p$,所以会变成那个公式
假设理论拟合出来的事件概率分布跟真实的一模一样,那么这玩意就等于真实事件的信息熵,这一点显而易见。假设拟合的不是特别好,那么这个玩意会比真实事件的信息熵大(这个在相对熵(KL散度)__寒潭雁影的博客-CSDN博客_kl三都一文中有证明,感觉还是比较好证的)。
也就是在理论拟合出来的事件概率分布跟真实的一模一样的时候,相对熵等于 0。而拟合出来不太一样的时候,相对熵大于 0。这个性质很关键,因为它正是深度学习梯度下降法需要的特性。假设神经网络拟合完美了,那么它就不再梯度下降,而不完美则因为它大于 0 而继续下降。
(相对熵(KL散度)__寒潭雁影的博客-CSDN博客_kl三都一文中还介绍了为什么用相对熵衍生出的交叉熵而不是均方差作为损失函数来训练神经网络,主要是关心梯度消失问题。相关的分析博文还可以参考,我只浏览过一遍还没有细看:
- 深度学习 1—最简单的全连接神经网络__寒潭雁影的博客-CSDN 博客_全连接神经网络实例
- 一文弄懂神经网络中的反向传播法——BackPropagation - Charlotte77 - 博客园
- 神经网络中 $w, b$ 参数的作用(为何需要偏置 $b$ 的解释)_AI_盲的博客-CSDN 博客_神经元 为什么要有偏置)
交叉熵:
$$
H_q(p) = \sum_x p(x) \log \frac{1}{q(x)}
$$
KL 散度 = 交叉熵 - 信息熵
$$
\begin{aligned}
D_{KL}(p \parallel q) &= H_q(p) - H(p) \
&= \sum_x p(x) \log \frac{1}{q(x)} - \left(-\sum_x p(x) \log p(x)\right) \
&= \sum_{i=1}^N \Big[p(x_i) \log p(x_i) - p(x_i) \log q(x_i)\Big]
\end{aligned}
$$
第一行表示 $p$ 所含的信息量/平均编码长度 $H(p)$;
第二行是 cross-entropy,即用 $q$ 来编码 $p$ 所含的信息量/平均编码长度|或者称之为 $q$ 对 $p$ 的 cross-entropy;
第三行是上面两者之间的差值,即 $q$ 对 $p$ 的 KL 距离,KL 距离越大说明差值越大,说明两个分布的差异越大。
(注意这三者都是非负的。上面说的 KL 和 cross-entropy 是两个不同分布之间的距离度量,因此用 $H(p)$ 来表示熵。如果是测量同一分布中两个变量相互影响的关系,则一般用 $H(X)$ 来表示熵,如联合信息熵和条件信息熵 - 简书(我还没看))
这一部分我还没看的参考资料:
- 【机器学习】信息量,信息熵,交叉熵,KL 散度和互信息(信息增益)_哈乐笑的博客-CSDN 博客(这一篇公式符号似乎有问题)
- 熵 (信息论) - 维基百科,自由的百科全书
6. 信息熵在深度学习中的应用
在深度学习中,信息熵有许多重要的应用,以下是几个主要的方面:
交叉熵损失函数
在分类问题中,我们通常使用交叉熵损失函数(Cross-Entropy Loss)来衡量模型预测结果与真实结果之间的差异。交叉熵损失函数基于信息熵定义,用于衡量两个概率分布之间的距离。
交叉熵损失函数的公式为:
$$
L = -\sum_{i=1}^{n} y_i \log p(y_i)
$$
其中:
- $y_i$ 是真实标签的独热编码(one-hot encoding)。
- $p(y_i)$ 是模型对类别 $i$ 的预测概率。
信息增益
在决策树算法中,信息增益是用来选择最佳分割特征的标准。信息增益表示在某一特征的条件下,信息熵的减少量。信息增益越大,表示特征对分类效果越好。
信息增益的公式为:
$$
\text{信息增益} = H(D) - \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i)
$$
其中:
- $H(D)$ 是数据集 $D$ 的熵。
- $|D_i|$ 是数据集 $D$ 中第 $i$ 个子集的大小。
总结
通过本文的介绍,希望大家对信息熵有了一个初步的了解。信息熵是一个非常重要的概念,在信息论和深度学习中都有广泛的应用。掌握信息熵的概念和计算方法,对于深入理解许多机器学习和深度学习算法至关重要。