熵、相对熵、互信息、交叉熵

2019-07-05  本文已影响0人  单调不减

西瓜书、花书第二部分以及李航的《统计学习方法》已经大概翻看了一遍,感觉算是有了一定的机器学习理论基础。当然,以上书籍在内容方面各有侧重,根据朋友的建议,在以上几本书中没搞懂或者一知半解的部分,大多可以在PRML这本经典之作中找到答案。

本文记录关于机器学习中涉及的几个信息论的重要概念。多数内容摘自PRML。

1、熵

考虑⼀个离散的随机变量x。当我们观察到这个变量的⼀个具体值的时候,我们接收到了多少信息呢?信息量可以被看成在学习x的值时“出乎意料的程度”。如果有人告诉我们⼀个相当不可能的事件(取值)发生了,我们收到的信息要多于我们被告知某个很可能发生的事件(取值)发生时收到的信息。如果我们知道某件事情⼀定会发生,那么我们就不会接收到信息。比如我告诉你“明天太阳从东方升起”,就没有任何信息量。

于是,我们对于信息的度量将依赖于概率分布p(x),因此我们想要寻找⼀个表达了信息多少的函数h(x),它是概率p(x)的单调函数。h(·)形式可以这样寻找:如果我们有两个不相关的事件xy ,那么我们观察到两事件同时发生时获得的信息应该等于观察到事件各自发生时获得的信息之和,即h(x, y) = h(x) + h(y)。两个不相关事件是统计独立的,因此p(x, y) = p(x)p(y)根据这两个关系,很容易看出h(x)一定与p(x)对数有关。因此,我们有:

h(x)=-\log _{2} p(x)

其中,负号确保了信息⼀定是正数或者是零。注意,低概率事件应于高 的信息量。对数的底的选择是任意的。现在我们将遵循信息论的普遍传统,使用2作为对数的底。在这种情形下,h(x)单位是比特(bit)。

现在假设⼀个发送者想传输⼀个随机变量的值给接收者。这个过程中,他们传输的平均信息量通可以通过求h(x)关于概率分布p(x)的期望得到。这个期望值为:

H[x]=-\sum_{x} p(x) \log _{2} p(x)

这个重要的量被叫做随机变量的熵(entrop)。注意,\lim _{p \rightarrow 0} p \log _{2} p=0,因此对p(x) = 0我们令p(x) \log _{2} p(x)=0

有了熵的定义,接下来我们从另一个角度来看待熵的含义。

考虑⼀个随机变量x,这个随机变量有8种可能的状态,每个状态都是等可能的。为了把x的值传给接收者,我们需要传输⼀个3比特的消息。这个变量的熵由下式给出:

H[x]=-8 \times \frac{1}{8} \log _{2} \frac{1}{8}=3

若8种状态各自的概率为\left(\frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \frac{1}{16}, \frac{1}{64}, \frac{1}{64}, \frac{1}{64}, \frac{1}{64}\right),则熵为:

H[x]=-\frac{1}{2} \log _{2} \frac{1}{2}-\frac{1}{4} \log _{2} \frac{1}{4}-\frac{1}{8} \log _{2} \frac{1}{8}-\frac{1}{16} \log _{2} \frac{1}{16}-\frac{4}{64} \log _{2} \frac{1}{64}=2

我们看到,非均匀分布比均匀分布的熵要小。

与之前⼀样,我们可以使用⼀个3比特的数字来完成这件事情。然而,我们可以利用非均匀分布这个特点,使用更短的编码来描述更可能的事件,使用更长的编码来描述不太可能的事件。我们希望这样做能够得到⼀个更短的平均编码长度。我们可以使⽤下⾯的编码串:0、10、110、1110、111100、111101、111110、111111来表示8个状态,传输的编码的平均长度就是:

\frac{1}{2} \times 1+\frac{1}{4} \times 2+\frac{1}{8} \times 3+\frac{1}{16} \times 4+4 \times \frac{1}{64} \times 6=2

这个值又⼀次与随机变量的熵相等。注意,我们不能使用更短的编码串,因为必须能够从多个这种字符串的拼接中分割出各个独立的字符串。

熵和最短编码长度的这种关系是⼀种普遍的情形。无噪声编码定理(Shannon, 1948)表明,熵是传输⼀个随机变量状态值所需的比特位的下界。

假设我们有⼀个联合概率分布p(x, y)我们从这个概率分布中抽取了⼀对xy。如果x的值已知,那么需要确定对应的y值所需的附加的信息就是−\ln p(y | x)。因此,用来确定y值的平均附加信息可以写成:

\begin{aligned} H(Y | X) &=\sum_{x} p(x) H(Y | X=x) \\ &=-\sum_{x} p(x) \sum_{y} p(y | x) \log p(y | x) \\ &=-\sum_{x} \sum_{y} p(x, y) \log p(y | x) \end{aligned}

这被称为给定x的情况下,y条件熵

现在开始,我们会把熵的定义中的对数变成自然对数,这种情况下,熵的度量的单位是nat而不是bit,两者的差别是⼀个\ln 2的因子。

2、相对熵和互信息

考虑某个未知的分布p(x)。假定我们使用⼀个近似的分布q(x)对它进行了建模。如果我们使用q(x)建立一个编码体系,用来把x的值传给接收者,那么,由于我们使用q(x)而不是真实分布p(x),因此在具体化x的值(假定我们选择了⼀个高效的编码系统)时,我们需要⼀些附加的信息。我们需要的平均附加信息量(单位是nat)为:

\begin{aligned} \mathrm{KL}(p || q) &=-\int p(\boldsymbol{x}) \ln q(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}-\left(-\int p(\boldsymbol{x}) \ln p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}\right) \\ &=-\int p(\boldsymbol{x}) \ln \left\{\frac{q(\boldsymbol{x})}{p(\boldsymbol{x})}\right\} \mathrm{d} \boldsymbol{x} \end{aligned}

这被称为分布p(x)和分布q(x)间的相对熵或者KL散度\mathrm{KL}(p \| q) \geq 0,并且当且仅当p(x) = q(x)等号成立。我们可以把KL散度看做两个分布p(x)q(x)间不相似程度的度量。

现在考虑由p(x, y)出的两个变量xy组成的数据集。如果变量的集合是独立的,那么他们的联合分布可以分解为边缘分布的乘积p(x, y) = p(x)p(y);如果变量不是独立的,那么我们可以通过考察联合概率分布与边缘概率分布乘积之间的KL散度来判断它们是否“接近”于相互独立。此时,KL散度为:

\begin{aligned} I[\boldsymbol{x}, \boldsymbol{y}] & \equiv \mathrm{KL}(p(\boldsymbol{x}, \boldsymbol{y}) \| p(\boldsymbol{x}) p(\boldsymbol{y})) \\ &=-\iint p(\boldsymbol{x}, \boldsymbol{y}) \ln \left(\frac{p(\boldsymbol{x}) p(\boldsymbol{y})}{p(\boldsymbol{x}, \boldsymbol{y})}\right) \mathrm{d} \boldsymbol{x} \mathrm{d} \boldsymbol{y} \end{aligned}

这被称为变量x和变量y之间的互信息(mutual information)。根据KL散度的性质,我们看到I[x, y] ≥ 0,当且仅当xy相互独立时等号成立。使用概率的加和规则和乘积规则,我们看到互信息和条件熵之间的关系为:

I[\boldsymbol{x}, \boldsymbol{y}]=H[\boldsymbol{x}]-H[\boldsymbol{x} | \boldsymbol{y}]=H[\boldsymbol{y}]-H[\boldsymbol{y} | \boldsymbol{x}]

因此我们可以把互信息看成由于知道y值而造成的x的不确定性的减小(反之亦然)。从贝叶斯的观点来看,我们可以把p(x)x的先验概率分布,把p(x | y)成我们观察到新数据y之后的后验概率分布。因此互信息表示⼀个新的观测y造成的x的不确定性的减小。

3、交叉熵

本节并非来自于PRML,而是后来复习Logistic回归看到交叉熵的概念时补充的。

首先给出交叉熵的公式:

H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)

其中p(x_i)是真实的概率分布,q(x_i)是分类器得出的预测概率分布。

毫无疑问,p(x_i)q(x_i)越接近说明分类器的性能越好。但用交叉熵来衡量两者的接近程度靠谱吗?这件事我一直没有仔细思考。

wait,衡量两个概率分布接近程度的不就是上面提到的KL散度吗?我们看一下KL散度的表达式:

\mathrm{KL}(p \| q)=-\int p(\boldsymbol{x}) \ln q(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}-\left(-\int p(\boldsymbol{x}) \ln p(\boldsymbol{x}) \mathrm{d} \boldsymbol{x}\right)

不难看出,第一项就是我们的交叉熵!而第二项,是数据真实概率分布的熵,对于给定问题是定值。因此在衡量p(x_i)q(x_i)接近程度的时候只需使交叉熵越小越好。

我们回过头看一下KL散度的定义:

考虑某个未知的分布p(x)。假定我们使用⼀个近似的分布q(x)对它进行了建模。如果我们使用q(x)建立一个编码体系,用来把x的值传给接收者,那么,由于我们使用q(x)而不是真实分布p(x),因此在具体化x的值(假定我们选择了⼀个高效的编码系统)时,我们需要⼀些附加的信息。我们需要的平均附加信息量(单位是nat)为KL散度。

这个定义套用在分类器模型上就是:

假定数据的真实概率分布为p(x)。我们使用⼀个分类器得到概率分布q(x)p(x)进行了拟合。如果我们使用q(x)建立一个编码体系,用来把x的值传给接收者,那么,由于我们使用q(x)而不是真实分布p(x),因此在具体化x的值(假定我们选择了⼀个高效的编码系统)时,我们需要⼀些附加的信息。我们需要的平均附加信息量(单位是nat)为KL散度。

这也就是说,从编码角度来说,交叉熵衡量的是分类器得到的对整个数据集的期望最短编码长度与实际的期望最短编码长度的差。因此交叉熵越好,分类器在数据上的表现就越好。

上一篇下一篇

猜你喜欢

热点阅读