数学

信息论

离散熵

对于一个离散型随机变量 X,设其概率质量函数为 p(x),其熵(entropy)定义为

H(X) := -\mathbb{E}[\log p(X)] = - \sum_i p(x_i) \log p(x_i);

对数的底数往往取 2 或者 \mathrm{e}。

例

退化分布的熵是 0。

熵与信息

熵的信息含义

当我们说离散变量 X 的信息熵是 H(X) 时,可以理解为,当 X 这个随机变量被独立重复观测了 n 次结果时,我们需要多长的编码来储存这些结果?

Hoffman 编码

Hoffman 编码 描述了 X 的最优编码长度。

微分熵

导入

对于连续型随机变量 X,其概率密度为 p(x),我们尝试定义其熵。模仿 Riemann 积分的推导过程,我们将其切分为许多个长为 \Delta x 的小区间,有

\begin{aligned} H(X) & \approx - \sum p(x_i) \Delta x \log [p(x_i) \Delta x] \\ & = - \sum p(x_i) \Delta x \log p(x_i) - \sum p(x_i) \Delta x \log \Delta x \\ & = - \underbrace{\sum [p(x_i) \log p(x_i)] \Delta x}_{\text{第一项}} - \underbrace{\log \Delta x \sum p(x_i) \Delta x}_{\text{第二项}}. \end{aligned}

当 \Delta x \to 0 时,第一项趋于一个 Riemann 积分 \int p(x) \log p(x) \mathrm{d} x,而第二项的求和号内趋于 \int p(x) \mathrm{d} x = 1,但 \log \Delta x 却趋于负无穷大。

为了避免引入无穷大带来的运算麻烦,我们舍弃掉上式的第二项带来的一个无穷大的背景常数,于是得到了连续型随机变量的熵:

H(X) = - \int p(x) \log p(x) \mathrm{d} x.

定义

参考:Entropy_for_continuous_random_variables - Entropy (information theory) - Wikipedia

对于一个连续型随机变量 X,设其概率密度函数为 p(x),其微分熵(differential entropy)定义为

H(X) := -\mathbb{E}[\log p(X)] = - \int p(x) \log p(x) \mathrm{d} x;

同样地,对数的底数往往取 2 或者 \mathrm{e}。

微分熵不同于离散熵,尽管它仍然某种意义上表征变量的信息含量或不确定程度,但它不再能表征随机变量的编码长度。它只是一个定距变量而不是定比变量,这是因为我们在推导中舍弃了一个无穷大。因此,比较 X 的微分熵是 Y 的几倍是没有意义的,但在某些时候,两个熵的差值仍有意义。

条件熵

定义:类比条件数学期望,我们可以定义

h(y) = H(X | Y = y) = - \mathbb{E}[\log p_{X | Y}(X | y)] = - \sum_{i} \log p_{X | Y}(x_i | y).

但是,条件熵不定义为 h(Y),而是定义为:

H(X|Y) := \mathbb{E}[h(Y)].

也就是说,不同于条件随机变量,条件熵是一个实数。

计算:

H(X|Y)=-\sum_{x,y}p_{X,Y}(x,y)\log {\frac {p_{X,Y}(x,y)}{p_{Y}(y)}}.

互信息

定义:

I(X, Y) = H(X) - H(X | Y).

意义:在已知变量 Y 的取值后

设两个随机变量 X, Y 的联合概率函数为 p,条件概率函数为 p_X。在离散情况下,互信息的定义为:

I(X, Y) = \sum_{x} \sum_{y} p_{X, Y}(x, y) \log \frac{p_{X, Y}(x, y)}{p_X(x) p_Y(y)}.

在连续情况下,互信息的定义为:

I(X, Y) = \iint p_{X, Y}(x, y) \log \frac{p_{X, Y}(x, y)}{p_X(x) p_Y(y)} \mathrm{d} x \mathrm{d} y.

交叉熵

引入

我们已经知道,对于离散分布 p_i,熵衡量了编码一个 i.i.d. 随机变量列 X_1, X_2, \dots 所需的平均编码长度。即,最终发送一个长为 n 的”随机变量结果列“时,在最优编码下,大致需要

nH(X_1)

个比特。

假设我们已经有一个离散随机分布 q_k,它可以给出一种编码方式 E_q,使得对于 i.i.d. 的 Y_i \sim q_k 列,其给出最优编码;现在,我们写好了针对 q_k 的编码,但是我们发现实际结果的出现频率变化了,新的频率应该由 p_k 描述。这时如果我们仍然用编码器 E_q 去编码 p_k 的结果列,会得到多大的长度呢?

根据熵的定义,对于概率为 q_k 的随机变量结果,我们需要使用 - \log_2 q_k 个比特来编码,但这种情况现在的频率是 p_k,所以平均编码长度变为

- \sum_k p_k \log q_k.

上式已经给出了交叉熵的定义。

定义

当两个离散概率分布 p 和 q 的取值集合相同时,定义真实分布为 p、编码分布为 q 时的交叉熵为

H(p, q) = - \sum_i p_i \log_2 q_i.

这个交叉熵表征了使用 q 的最优编码,去编码 p 的结果列时的平均编码长度。

警告

这里存在术语约定的严重模糊现象,3Blue1Brown 称真实分布 p、编码分布 q 的情况为”q 相对于 p 的交叉熵“ (cross-entropy of q relative to p),并记作 H(p, q),但注意不同教材存在不同的记号。

BEYOND THE ARTICLE

读完了,有什么想法?

阅读已保存的问答示例,并循着引用回到原文。

查看公开问答示例
— 本文完 — 返回文章列表