信息处理的数学定义:
给定一个系统S,对于S的信息处理就是在S中区分规律和噪音。
一个基本任务就是:
从一个可观察的数据系统中编码出“规律”。
1 香农的信息论
给定一个概率分布p = (p1, p2, · · · , pn),则香农熵定义为:
其中 p_i 表示 i 被选中的概率,而− log2 p_i 表示 i 自己的信息量。那么求和就可以得到概率分布 p 的信息量的期望(或者说不确定性大小)。
香农的信息论是当前信息技术的理论基础,尤其在通信领域起着基石的重要作用,如下所示:
- 它确定了信息压缩的下界——即熵;
- 它确定了端到端的传输速率——信道容量;
- 香农熵提出无损的信息传输是可能的。
然而香农熵在如今的信息处理或者说人工智能领域表现就不足了。主要原因为如今信息处理的对象变为真实世界的数据,真实世界的数据往往由规律和噪音组成,且是结构化的数据(图或网络)。香农信息论无法对这样的数据对象的信息处理提供理论支持,因此需要一个新的理论来支持新的信息处理。
2 挑战
- 如何来理解信息?由上面可知,H ( p ) 是对一个概率分布的不确定性的度量。而信息就是被消除的不确定性的量(也就是信息量)。一个事件x=x的信息量为 I(x) = - log p(x);
- 那么这就表明熵是一个对于一个事务的静态度量;而信息则是动态度量,因为还需要有一个随机选择的动作。
- 进而提出一系列问题:信息和计算有什么关系?编码和解码在信息处理中的作用?如何应用到逻辑推理和直觉推理?如何在一个图上定义信息?如何编码一个图等等。
3 结构信息论
香农的信息论主要是针对概率分布,给出了对依据概率分布p生成的符号进行编码所需要的比特数在平均意义上的下界。然而其无法处理结构对象(图或网络)的信息,例如找出最优的通信网络结构。原因以下:
- 如果一定要将香农熵应用于图,那么一个办法是解构图,依据图的一些性质——如度分布、距离分布等来计算出一个概率分布p,然后再用于香农熵的计算,从而得出这个图的熵。然而这种方式抛弃了图结构的一些有趣的性质,例如图中结点之间的交互和通信状态。那么这样就提出了一个问题:如何度量一个图中的信息?
2003年Brooks(图灵机获得者)提出半个世纪计算机科学重大挑战问题之一:如何度量结构信息?
已经有一些成果表明如何来编码一个图中的信息量。
- Rashevsky, 1955:给定一个用于n个结点的图G,对于每个结点i,令 n_i 为结点 i 自同构群轨道上结点的数量,从而计算出这个图的一个概率分布,进而应用香农熵:
- Raychaudhury et al, 1984:思路类似,都是从图中找一个分布。这里用的是任意两个结点之间的距离(最短路径),最终得出一个概率分布。
- Gibbs Entropy
- Shannon’s Entropy for Graph Models
- Von Neumann Entropy:用拉普拉斯矩阵的特征值的分布作为图的分布。图卷积神经网络也是采用拉普拉斯矩阵来进行消息传递计算的。
接下来我们来看一下香农熵的一个直观理解。
- 哈夫曼编码。给定一个字母表 ∑ = {1, 2, … , n} 以及一个概率分布 p = (p1, p2, … , pn),并且 i 发生的概率对应 p_i。用二进制的字符串α_i来编码字母表∑,那么这些二进制串以概率分布p计算的长度就为:
如果我们用一个二叉树T来表示这些码字,就可以得到一个编码树。而这棵编码树如果能够使得上式最小,这棵树就是哈夫曼树。直观来看,如果p_i越大,在这棵树上对应α_i的长度就越小;p_i越小,α_i就越大。哈夫曼树的构造可以通过贪心算法来实现。
而这和香农熵有什么关系呢?如果我们计算香农熵,会惊奇的发现 H( p ) 的值就是L的最小值,也就是说 H( p )给出了哈夫曼最优编码长度的一个紧确下界。
- 小白鼠测试有毒药水。这个例子也可以说明香农熵的应用。
而对于图如何来找到一个对应的编码呢?现有的一些图编码方法都是有损编码,无法编码嵌入在图中的信息。
因此这里提出编码树的概念。编码树类似于社会的层谱划分,从中央到省市再到地方,以一种树的结构来划分整个社会的体系。
那么依照这种思想,我们就定义了如何用编码树的方式来在一个图上进行结点划分。定义如下。
令G=(V, E)为一个无向连通图。那么我们定义图G的编码树T具有以下性质:
- 对于编码树T的根节点,我们将其记为 λ,那么我们就令T_λ = V,即树的根节点表示图G的所有结点的一个划分;
- 这里定义了编码树T中的任意一个节点α的后继节点的标记规则。α的直接后继节点定义为αˆ⟨j⟩,j∈1,2,…,n,节点编号从左到右依次递增;且每个节点(除了叶子节点)至少有两个直接后继(因为编码树T实际上是一个结点划分树,每个节点的后继代表对当前节点的一个划分,如果只有一个后继,那等于没有划分,就没有意义),所以定义αˆ⟨i⟩ < L αˆ⟨j⟩, 当且仅当 i < j;
- 这里定义了直接前驱的概念。对于T中的任意一个节点α,都对应着图G中的一个结点划分Tα ,即有Tα ⊂ V。假如有两个节点α 和 β,那么我们用α ⊂ β去表示α 是 β 的一个初始部分(即β由α划分而来)。那么我们就可以定义α−为,对于T中的任何节点α != λ,我们使用α−表示α的最长初始部分(也就是直接前驱,或者说父节点)。
- 这里定义了编码树T的高度。对于T中任意一个节点α,我们用h(α)表示其高度;并且有h(λ)=0,且对于任意的其他节点α != λ,都有h(α) = h(α−) + 1;
- 这里定义了节点划分的实质含义。对于编码树T中的任意一个节点α,如果对于所有的β满足 β− = α (也就是说α是父节点,β是α的子节点),那么Tα是Tβ的一个联合。因此就有Tα = ∪(β−=α) Tβ。(也可以反过来理解,每一个Tβ都是由Tα划分得来的)
- 对于叶子节点α,Tα表示只有一个元素{v},v是图G结点集V中的某个结点;
- 这里定义了标签和码字的概念。编码树T中的每个节点α都对应一个节点划分Tα,而Tα是图G节点集V的一个子集,假设令Tα=X;那么我们就说α是X的一个码字,X是α的一个标签;
- 对于图G中的每一个结点v,都有一个对应的叶子节点α ∈ T,且有Tα = {v};那么也就表明 v 存在一个唯一的码字α;
- T中的每一个叶子节点都是V中唯一一个结点v的码字(一一对应)。
从而我们可以根据编码树T来定义图G由T确定的结构熵 ,如下式:
其中m表示图G中的边数,g_a表示从T_a结点集、连到T_a之外的边的个数(即割边数),那么g_a/2m就代表了在图G中随机游走进入T_a的概率。而V_a代表T_a中所有结点的度之和,V_a-则代表α父节点所表示的结点集中度之和。那么− log2(Vα/Vα−)就表示α相对于其父节点的不确定性。
那么整体H^T(G)就确定了在图G中进行随机游走可以访问的到的结点的码字的信息量。(也就是确定所有结点在编码树T中对应的叶子节点)
举一个例子来说明编码树和对应的结构熵计算。
如果我们取遍图G所有的编码树,然后选择最小的结构熵,那么这个结构熵就被称为图G的结构熵,如下式。此时的编码树T是图G的实质结构。
进一步我们可以定义K维结构熵,很简单,这里对编码树T的高度做了一个限制。即此时T取遍图G的所有高度不超过K的编码树,选取其中最小熵。
融合算子。
联合算子。