Press "Enter" to skip to content

何为局部信息分解和特征之间的相互作用

关于目标变量信息如何在其多个特征之间分布

照片由Alina Grubnyak拍摄,来自Unsplash。

当目标变量受多个信息源的影响时,了解每个信息源对提供的整体信息的贡献非常重要(但并不简单)。

在本文中,我将从“惊喜”的基本概念开始,然后解释熵是如何由随机变量上分布的平均惊喜量组成的,这为我们定义互信息的条件提供了基础。之后,我将讨论多个信息源的部分信息分解情况。

惊喜和熵

从信息角度定义熵的可能是最直观的方法之一,我们首先讨论一下惊喜。惊喜的衡量方式与我们预期的一样:不太可能发生的事件更令人惊讶,而更可能发生的事件则不那么令人惊讶。下面是涵盖这些特性的数学定义:

何为局部信息分解和特征之间的相互作用 四海 第2张

从图1中可以看出,该定义与我们讨论的特性非常相关。当某个事件发生的可能性很高(p接近1)时,惊喜接近于零。另一方面,如果某个事件发生的概率非常低,其惊喜值会无限大。

图1:惊喜的图表。图像来自作者。

现在,熵与惊喜有什么关系呢?嗯,熵是随机变量所有可能值的平均惊喜值。因此,如果我们有一个随机变量X,X的所有可能结果构成的集合称为A_X(我们称之为“X的字母表”),则熵H的定义如下:

何为局部信息分解和特征之间的相互作用 四海 第4张

太好了。现在我们将熵与惊喜联系在一起,我们可以理解熵的一个有用的解释:

熵是一种无知的度量。

这是怎么回事呢?我将用一个愚蠢的例子来解释。想象一下,你要参加最后的物理考试。从我们迄今为止所开发的语言来看,我们可以将考试视为一个带有某些可能问题的随机变量。现在假设有两种情况:

  1. 你为这个考试努力学习过,你知道考试会有哪种类型的问题,因此平均而言,你不会对考试感到太惊讶。
  2. 你真的没有好好学习过,你不知道考试会出什么样的问题,因此你在整个考试过程中的惊喜水平会非常高。

因此,当你的平均惊喜更大时,正好与你没有太多信息的情况吻合。

从技术的角度来看,更尖峰的分布(例如,一些值发生的可能性更大)的熵比更离散的分布的熵要低,其中每个事件发生的机会大致相同。这就是为什么我们说具有最高熵的分布是均匀分布,其中任何值都有同等的机会发生。

熵和(互)信息

既然我们已经建立了一个由随机变量描述的系统上的平均惊喜度量(即熵),我们可以将熵与信息建立起联系。

由于熵是对某个系统上无知的度量,它的缺失代表着…… 信息。在这个意义上,创建一个称为互信息的度量是非常自然的:它衡量你在了解系统的某些信息后所获得的信息:

何为局部信息分解和特征之间的相互作用 四海 第5张

这个定义说:首先计算随机变量X的平均惊奇程度,然后计算随机变量X的平均惊奇程度,但是现在考虑我们已经知道了另一个随机变量Y的结果。将前者减去后者,你就知道通过了解Y而从系统X中消除了多少无知。

让我们回到一个愚蠢的例子:假设你不知道测验中会有哪些问题,这就是X。现在假设你的一个朋友在你的测验之前一周由同一位老师、关于同一门科目做了一个测验。他告诉你他的测验覆盖的一切(这恰好是另一个随机变量Y)。最合理的说法是你在你的测验中的无知程度降低了,这意味着你的测验X和你朋友的测验Y共享信息。

在图2中有一个简洁、易懂的区分X和Y之间熵和信息共享关系的文氏图。

Figure 2: Mutual Information scheme. Image by author, heavily inspired by many others.

但是如果我们有多个信息源呢?

到目前为止,我们只谈到了只有一个特征X和一个目标变量Y的情况,但很明显这不能很好地推广。因此,现在想象一下我们有一个随机变量Y(比如,一个分类模型的目标变量)并且我们想要知道模型的n个特征X_1、X_2、…、X_n每一个提供的信息量。有人可能会说,只需计算X_1和Y之间共享的互信息,然后计算X_2和Y之间的互信息,以此类推。然而,在现实世界中,我们的特征可以相互作用并创建非平凡的关系,如果我们想要一个一致的框架,我们必须考虑这些相互作用。

让我们以有两个输入信号X_1和X_2,并且我们想要量化这两个特征与目标特征Y之间的互信息为例。也就是说,我们想要计算I(Y; {X_1, X_2})。部分信息分解框架指出,这个信息可以分为四个非负部分:

  1. Syn(Y; {X_1, X_2}):这是两个特征之间的协同信息量,仅由这两个特征共同提供关于Y的信息。
  2. Rdn(Y; {X_1, X_2}):这个数量说明存在X_1或X_2中任意一个单独解释Y的信息。
  3. Unq(Y; X_1)和Unq(Y; X_2):这些是独特的信息,分别测量只有X_1可以解释的关于Y的信息,或只有X_2可以解释的关于Y的信息。

注意,只有Unq(Y; X_1)和Unq(Y; X_2)对应于特征之间没有相互作用的情况。因此,互信息I(Y; {X_1, X_2})可以分解为其四个组成部分:

I(Y; {X_1, X_2}) = Syn(Y; {X_1, X_2}) + Rdn(Y; {X_1, X_2}) + Unq(Y; X_1) + Unq(Y; X_2)

和之前一样,我们可以绘制一个简洁的文氏图来总结这些数量之间的依赖关系。

Figure 3: Venn diagram for partial information decomposition. Image by author, heavily inspired by [1].

每个术语被称为信息的原子。任何非原子信息都可以分解为无法再分解的原子部分。

首次提出这一框架(并提出了一种计算部分信息的方法)的是Williams和Beer [1]。计算这些数量并不容易,值得单独撰写一篇文章。部分信息分解有多种测量方法,它们都遵循相同的过程:它们想象一种满足一系列理想特征并与我们对某种被称为“信息”的数量所期望发生的情况一致的测量方法。所有这些测量方法都有其优势和劣势,在dit库中得到了很好的实现,并将在以下部分简要介绍和使用一些例子。

部分信息分解示例和dit库

为了将这些概念联系起来,我们来看一些例子。对于信息论概念而言,dit库是一个很好的工具。它是一个由创建定制概率分布并对其进行测量的库。该库具有多种功能,可以在其GitHub官方文档页面上找到。

对于即将介绍的所有例子,我们可以考虑两个特征X_1和X_2,它们都是二进制特征,目标变量Y是两个特征的布尔运算。所有形式的部分信息测量都是由Williams和Beer [1]提出的,但其他作者提出的其他形式也在dit中实现。

唯一信息

以AND门为例,假设Y是AND门的输出。请注意,根据图4,输出始终等于特征X_1,使得特征X_2完全无关紧要。

图4:AND门的示意图和唯一的信息源

因此,特征X_1和X_2提供的关于Y的信息完全集中在X_1中。在我们迄今为止开发的形式中,我们可以说有关Y的信息是唯一的,与X_1有关。

dit库中,可以这样创建:

import dit                    # 导入dit库
from dit.pid import PID_WB    # 导入要使用的PID测量

# 创建AND门的概率分布
dist_unique = dit.Distribution(["000", "010", "101", "111"], [1/4, 1/4, 1/4, 1/4])
print(PID_WB(dist_unique))

"""输出:
+--------+--------+--------+
| I_min  |  I_r   |   pi   |
+--------+--------+--------+
| {0:1}  | 1.0000 | 0.0000 |
|  {0}   | 1.0000 | 1.0000 |
|  {1}   | 0.0000 | 0.0000 |
| {0}{1} | 0.0000 | 0.0000 |
+--------+--------+--------+
"""

dit库将信息的类型进行编码如下:

  • {0:1}:X_1和X_2之间的协同信息
  • {0}:由X_1提供的唯一信息
  • {1}:由X_2提供的唯一信息
  • {0}{1}:由X_1和X_2提供的冗余信息

我们可以通过输出看到,唯一提供的部分信息(“pi”列)来自于X_1。

冗余信息

下一个例子用于展示冗余信息。在这个例子中,X_1、X_2和Y都是相等的,如图5所示,因此由X_1和X_2提供的关于Y的冗余信息是最大的。

图5:完全冗余信息

使用 dit 代码如下:

import dit                    # 导入 dit 库
from dit.pid import PID_WB    # 导入所需的 PID 来度量
# 创建冗余概率分布
dist_redundant = dit.Distribution(["000", "111"], [1/2, 1/2])
print(PID_WB(dist_redundant))
"""输出:
+--------+--------+--------+
| I_min  |  I_r   |   pi   |
+--------+--------+--------+
| {0:1}  | 1.0000 | 0.0000 |
|  {0}   | 1.0000 | 0.0000 |
|  {1}   | 1.0000 | 0.0000 |
| {0}{1} | 1.0000 | 1.0000 |
+--------+--------+--------+
"""

正如我们所看到的,X_1 和 X_2 提供的关于 Y 的唯一信息是冗余的,换句话说,两者都提供了相同的信息。

协同信息

协同信息的经典示例是 XOR 门。XOR 门的图示在图6中。

图6:具有完全协同信息的 XOR 门

根据该概率分布,我们只有在了解 X_1 和 X_2 时才能知道目标变量 Y。没有 X_1 和 X_2,我们无法得知 Y,因为对于每个 X_1 的值,我们都有 Y 的两个值;对于 X_2 也是如此。在 dit 中的代码如下:

import dit                    # 导入 dit 库
from dit.pid import PID_WB    # 导入所需的 PID 来度量
# 创建 XOR 门的概率分布
dist_syn = dit.Distribution(["000", "011", "101", "110"], [1/4]*4)
print(dist_syn)
"""输出:
+--------+--------+--------+
| I_min  |  I_r   |   pi   |
+--------+--------+--------+
| {0:1}  | 1.0000 | 1.0000 |
|  {0}   | 0.0000 | 0.0000 |
|  {1}   | 0.0000 | 0.0000 |
| {0}{1} | 0.0000 | 0.0000 |
+--------+--------+--------+
"""

正如预期的那样,X_1 和 X_2 传达给 Y 的唯一信息是 {0:1},即协同信息。

总结和要点

最后,我们可以看到变量之间的交互作用在只有互信息的情况下可能造成困难。我们需要一些工具来度量来自多个信息源(可能还包括这些信息源之间的交互)的信息。这正是偏信息分解(PID)框架的完美应用场景。

通常,在这个领域的测量是复杂的,并涉及一些形式逻辑:这可以留待另一篇关于这个主题的详细文章来讨论,但现在可以说这些工具不仅重要,而且它们的需求从信息的角度而言是自然产生的。

参考文献

[1] P. L. Williams and R. D. Beer, 多元信息的非负分解,arXiv预印本arXiv:1004.2515,2010年

[2] Shujian Yu等,用信息论理解卷积神经网络:初步探索,arXiv预印本arXiv:1804.06537v5,2020年

[3] A. J. Gutknecht, M. Wibral and A. Makkeh, 位和物: 从部分-整体关系和形式逻辑理解信息分解, arXiv预印本 arXiv:2008.09535v2, 2022

[4] James, R. G., Ellison, C. J. and Crutchfield, J. P., dit: 用于离散信息论的Python包, The Journal of Open Source Software, 2018

Leave a Reply

Your email address will not be published. Required fields are marked *