信息论是应用数学的一个分支,主要研究的是对一个信号包含信息的多少进行量化。它最初被发明是用来研究在一个含有噪声的信道上用离散的字母表来发送消息,例如通过无线电传输来通信。信息熵在 AI 或机器学习中也具有十分广泛的应用,一般在机器学习中,我们可以将信息论应用在连续型变量上,并使用信息论的一些关键思想来描述概率分布或者量化概率分布之间的相似性。
因此在机器学习中,通常要把与随机事件相关信息的期望值进行量化,此外还要量化不同概率分布之间的相似性。在这两种情况下,香农熵都被用来衡量概率分布中的信息内容。香农熵是以信息论之父 Claude Shannon 的名字命名的,也称为信息熵或微分熵(连续)。
自信息
香农熵的基本概念就是所谓的一个事件背后的自信息(self-information),有时候也叫做不确定性。自信息的直觉解释如下,当某个事件(随机变量)的一个不可能的结果出现时,我们就认为它提供了大量的信息。相反地,当观察到一个经常出现的结果时,我们就认为它具有或提供少量的信息。将自信息与一个事件的意外性联系起来是很有帮助的。例如,一个极其偏畸的硬币,每一次抛掷总是正面朝上。任何一次硬币抛掷的结果都是可以完全预测的,这样的话我们就永远不会对某次结果感到惊奇,也就意味着我们从这个实验中得到的信息是 0。换言之,它的自信息是 0。如果硬币的偏畸程度稍微小一些,这样的话,尽管看到正面朝上的概率超过了 50%,每次抛掷还会有一些信息。因此,它的自信息大于 0。如果硬币的偏畸程度是导致反面朝上的结果,我们得到的自信息还是 0。在使用一个没有偏畸的硬币做实验时,每次抛掷得到正面朝上和反面朝上的概率都是 50%,我们会得到最大的意外性,因为在这种情况下硬币抛掷的结果的可预测性是最小的。我们也可以说,均匀分布的熵最大,确定事件的熵最小。
基于以上的非正式需求,我们可以找到一个合适的函数来描述自信息。对于一个可能取值为
的离散随机变量 ,它的概率质量函数 ,以及任何正的取值在 0 到 1 之间的单调递减函数 都可以作为信息的度量。此外,还有另外一个关键的属性就是独立事件的可加性;两次连续硬币抛掷的信息应该是一次单独抛掷的 2 倍。这对独立变量而言是有意义的,因为在这种情况下意外性或者不可预测性会增大为之前的两倍。形式上,对于独立事件 和 而言,我们需要 。满足所有这些要求的函数就是负对数,因此我们可以使用负对数表示自信息:
熵
通常,香农熵是随机变量 X 的所有可能结果的自信息期望值。
其中 b 是对数的底数。上面我们使用的是 b=2,其他常见的选择还有 b=10,以及 e。其实这个影响不大,因为不同底数的对数之间存在一个常数的关系。我们这里仍然假设底数为 2,所以我们将省略下面公式中的 b。
交叉熵
交叉熵是一个用来比较两个概率分布 p 和 q 的数学工具。它和熵是类似的,我们计算 log(q) 在概率 p 下的期望,而不是反过来:
KL 散度
与交叉熵紧密相关,KL 散度是另一个在机器学习中用来衡量相似度的量:从 q 到 p 的 KL 散度如下:。在贝叶斯推理中, 衡量当你修改了从先验分布 q 到后验分布 p 的信念之后带来的信息增益,或者换句话说,就是用后验分布 q 来近似先验分布 p 的时候造成的信息损失。例如,在训练一个变分自编码器的隐藏空间表征时就使用了 KL 散度。KL 散度可以用熵和交叉熵表示:
交叉熵衡量的是用编码方案 q 对服从 p 的事件进行编码时所需 bit 数的平均值,而 KL 散度给出的是使用编码方案 q 而不是最优编码方案 p 时带来的额外 bit 数。从这里我们可以看到,在机器学习中,p 是固定的,交叉熵和 KL 散度之间只相差一个常数可加项,所以从优化的目标来考虑,二者是等价的。而从理论角度而言,考虑 KL 散度仍然是有意义的,KL 散度的一个属性就是,当 p 和 q 相等的时候,它的值为 0。
KL 散度有很多有用的性质,最重要的是它是非负的。KL 散度为 0 当且仅当 P 和 Q 在离散型变量的情况下是相同的分布,或者在连续型变量的情况下是 『几乎 处处』 相同的。因为 KL 散度是非负的并且衡量的是两个分布之间的差异,它经常 被用作分布之间的某种距离。然而,它并不是真的距离因为它不是对称的:对于某 些 P 和 Q,D_KL(P||Q) 不等于 D_KL(Q||P)。这种非对称性意味着选择 D_KL(P||Q) 还是 D_KL(Q||P) 影响很大。
在李弘毅的讲解中,KL 散度可以从极大似然估计中推导而出。若给定一个样本数据的分布 和生成的数据分布 ,那么 GAN 希望能找到一组参数 使分布 和 之间的距离最短,也就是找到一组生成器参数而使得生成器能生成十分逼真的图片。
现在我们可以从训练集抽取一组真实图片来训练 P_G(x;θ) 分布中的参数θ使其能逼近于真实分布。因此,现在从 P_data(x) 中抽取 m 个真实样本 {𝑥1,𝑥2,…,𝑥𝑚},其中符号「」代表上标,即 x 中的第 i 个样本。对于每一个真实样本,我们可以计算 P_G(xi;θ),即在由θ确定的生成分布中,xi 样本所出现的概率。因此,我们就可以构建似然函数:
其中「∏」代表累乘、P_G(x^i;θ) 代表第 i 个样本在生成分布出现的概率。从该似然函数可知,我们抽取的 m 个真实样本在 P_G(x;θ) 分布中全部出现的概率值可以表达为 L。又因为若 P_G(x;θ) 分布和 P_data(x) 分布相似,那么真实数据很可能就会出现在 P_G(x;θ) 分布中,因此 m 个样本都出现在 P_G(x;θ) 分布中的概率就会十分大。
下面我们就可以最大化似然函数 L 而求得离真实分布最近的生成分布(即最优的参数θ):
决策树学习
在决策树的学习算法中,一般包含了特征选择、决策树的生成与决策树的剪枝过程。决策树的特征选择在于选取对训练数据有分类能力的特征,而通常特征选择的准则是「信息增益」或「信息增益比」。
在李航的统计学习方法中,一般熵 H(Y) 与条件熵 H(Y|X) 之差可以称为互信息(Mutual Information),决策树学习中的信息增益等价于训练数据中类与特征的互信息。若给定训练数据集 D 和特征 A,经验熵 H(D) 表示对数据集 D 进行分类的不确定性。而经验条件熵 H(D|A) 表示在特征 A 给定的条件下对数据集 D 进行分类的不确定性。那么它们的差,即信息增益,就表示由于特征 A 而使得对数据集 D 的分类的不确定性减少的程度。显然,对于数据集 D 而言,信息增益依赖于特征,不同的特征往往具有不同的信息增益。信息增益大的特征具有更强的分类能力。
根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
因此在决策树学习中,熵被用来构建树。通过将数据集 S 根据可能的「最佳」属性分成一些子数据集,从根节点开始构建决策树,「最佳」属性也就是能够将得到的子数据集的熵最小化的属性。这个过程被递归地重复,直到没有更多的属性来分割。此过程被称为 ID3 算法,由此可见 ID3 算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。
分类
不管是在二分类问题还是多分类问题中,交叉熵是 logistic 回归和神经网络中的标准损失函数。通常,p 是真实分布,q 是模型描述的分布。让我们来看一个二分类 logistic 回归中的一个例子。两个类别的标签分别是 0 和 1,logistic 模型给每一个输入赋予以下概率:。这个可以简写为 。尽管真实标签是精确的 0 和 1,但是这里还是写成 ,因此不要被这个表达方式搞混。在这个标记下,每个样本的真实值和估计分布之间的交叉熵如下:
当它被作为一个损失函数使用的时候,我们用的是 N 个样本的交叉熵均值,