很多领域的数据的底层关系可以表示为图结构,如计算机视觉、分子化学、分子生物学、模式识别、数据挖掘等领域。
最简单的图结构为单节点图,以及作为节点序列的图,更复杂的图结构包括树、无环图、带环图等。
关于图的任务可以分为两类:
基于图的任务graph-focused
:以图为单位,直接在图结构的数据上实现分类或者回归。
如:图表示化学化合物,每个顶点表示一个原子或者化学基团、边表示化学键。模型可以用于评估被检测的化合物的类别。
基于节点的任务 node-focused
:以节点为单位,在每个结点上实现分类或者回归。如:
目标检测任务中需要检测图像是否包含特定的目标并进行目标定位。该问题可以通过一个映射函数来解决,该映射函数根据相应区域是否属于目标对象从而对邻接的顶点进行分类。
如下图所示,对应于城堡的黑色顶点的输出为1
,其它顶点输出为 0
。
网页分类任务中需要判断每个网页的类别。我们将所有的网页视作一个大图,每个网页代表一个顶点、网页之间的超链接代表边。可以利用网页的内容和图结构来进行建模。
传统的机器学习算法通过使用预处理阶段来处理图结构的数据。在这一阶段,算法将图结构数据映射到一个更简单的表达representation
,如一个实值向量。即:预处理阶段首先将图结构的数据“压缩” 为实值向量,然后使用 list-based
数据处理技术来处理。
在数据压缩过程中,一些重要的信息(如:每个顶点的拓扑依赖性)可能会被丢失。最终的效果严重依赖于数据预处理算法。
最近有很多算法尝试在预处理阶段保留数据的图结构性质,其基本思路是:利用图的结点之间的拓扑关系对图结构的数据进行编码,从而在数据预处理过程中融合图的结构信息。递归神经网络RNN
、马尔科夫链都是这类技术。
论文 《The graph neural network model》
提出了 GNN
模型,该模型扩展了RNN
和马尔科夫链技术,适合处理图结构的数据。
GNN
既适用于 graph-focused
任务,又适用于 node-focused
任务。GNN
扩展了RNN
,它可以处理更广泛的图任务,包括无环图、带环图、有向图、无向图等。GNN
扩展了马尔科夫链,它通过引入学习算法并扩大了可建模的随机过程的类型从而扩展了随机游走理论。GNN
是基于消息扩散机制 information diffusion mechanism
。图由一组处理单元来处理,每个处理单元对应于图的一个顶点。
定义图 ,其中 为顶点集合、 为边集合。边可以为有向边,也可以为无向边。
对于顶点 ,定义 为其邻接顶点集合,定义 为包含顶点 的边的集合。
顶点和边可能含有额外的信息,这些信息统称为标签信息(它和监督学习中的标记label
不是一个概念)。
标签信息以实值向量来表示,定义顶点 的标签为 ,定义边 的标签为 ,其中 为顶点标签的维度、 为边标签的维度。
顶点标签通常包含顶点的特征,边标签通常包含顶点之间关系的特征。如下图中:
一个直觉的想法是:将图中的顶点视作对象或者概念 concept
,边表示对象之间的关系。每个对象通过各自的特征以及关联对象的特征来定义。因此,我们可以通过顶点 包含的信息,以及顶点 邻居顶点包含的信息,从而给顶点 定义一个状态向量 ,其中 为状态向量的维度。
是顶点 对应对象的 representation
,可用于产生顶点 的输出 。
定义局部转移函数 local transition function
:它是一个参数可学习的函数,刻画了顶点 和邻居顶点的依赖性。
其中:
定义局部输出函数 local output function
:它也是一个参数可学习的函数,刻画了顶点 的输出。
可以采取不同的邻域定义。
上述定义仅仅针对无向图,也可以通过改造 来支持有向图。我们引入一个变量 :如果边 的终点为 则 ;如果边 的起点为 则 。则有:
如果图的顶点可以划分为不同的类别,则对不同类别的顶点建立不同的模型是合理的。假设顶点 的类别为 ,转移函数为 ,输出函数为 ,对应参数为 ,则有:
但是为了表述方便,我们假设所有的顶点都共享相同的参数。
令 分别代表所有顶点状态向量的拼接、所有顶点输出向量的拼接、所有标签(包含顶点标签以及边的标签)向量的拼接、所有顶点标签向量的拼接:
则有:
其中:
global transition fucntion
,它由 个 组成。global output function
,它由 个 组成。令图和顶点的 pair
对的集合为 ,其中 为所有图的集合, 为这些图中所有顶点的集合。全局转移函数和全局输出函数定义了一个映射 ,它以一个图作为输入,然后对每个顶点 返回一个输出 。
图结构的数据可以是位置相关的 positional
或者是位置无关的 non-positional
。前面描述的都是位置无关的,位置相关的有所不同:需要为顶点 的每个邻居分配唯一的整数标识符来指示其位置。即:对于顶点 的邻域 ,存在一个映射函数 ,使得顶点 的每个邻居 都有一个位置 。
邻居位置可以隐式的表示一些有意义的信息。 如下图所示,邻居位置可以表示区块的相对空间位置。在这个例子中,我们可以按照顺时针来枚举顶点的邻居。
对于位置相关的图, 必须接收邻居顶点的位置信息作为额外的输入。
实际中我们可以根据邻居的位置进行排序,然后对 按照排序之后的顺序进行拼接。如果在某些位置处的邻居不存在,则需要填充 null
值。
如:
其中:
为所有顶点的最大邻居数。
为第 个位置邻居的状态向量:
即:如果 为 的第 个邻居节点,则 ;如果 没有第 个邻居节点,则 为null
值 。
对于位置无关的图,我们可以将 替换为:
其中 为待学习的函数,它和邻居的位置无关,也和邻居的邻居无关。这种形式被称作 nonpositional form
,而原始形式被称作 positional form
。
为实现 GNN
模型,我们必须解决以下问题:
求解以下方程的算法:
从训练集种学习 和 参数的学习算法。
和 的实现方式,即:解空间。
Banach
不动点理论为上述方程解的存在性和唯一性提供了理论依据。根据 Banach
不动点理论,当 满足以下条件时,方程 存在唯一解: 是一个收缩映射 contraction map
。即存在 ,使得对任意 都有:
其中 表示向量范数。
本文中我们假设 是一个收缩映射。实际上在 GNN
模型中,这个条件是通过适当的选择转移函数来实现的。
Banach
不动点理论不仅保证了解的存在性和唯一性,还给出了求解的方式:采用经典的迭代式求解:
其中 表示状态 的第 次迭代值。
对于任意初始值 ,上式指数级收敛到方程 的解。
我们将 视为状态向量,它由转移函数 来更新。因此输出向量 和状态向量 的更新方程为:
这可以解释为由很多处理单元unit
组成的神经网络,每个处理单元通过 计算其状态,并通过 计算其输出。这个神经网络被称作编码网络 encoding network
,它类似于 RNN
的编码网络。
在编码网络中,每个单元根据邻居单元的状态、当前顶点的信息、邻居顶点的信息、边的信息,通过 计算下一个时刻的状态 。
注意:这里没有根据 没有考虑 ,也就是没有自环。
当 和 通过前馈神经网络实现时,编码网络就成为 RNN
,其中神经元之间的连接可以分为内部连接和外部连接。内部连接由实现神经元的神经网络架构决定,外部连接由图的链接决定。
如下图所示:上半图对应一个图Graph
,中间图对应于编码网络,下半图对应于编码网络的展开图。在展开图中,每一层layer
代表一个时间步,layer
之间的链接(外部连接)由图的连接性来决定,layer
内神经元的链接(内部连接)由神经网络架构决定。
假设训练集为:
其中 表示第 个图, 表示第 个图的顶点集合, 表示第 个图的边集合, 表示第 个图的第 个顶点, 表示顶点 的监督信息target
, 为图 中的标记样本。
训练集的所有图 也可以合并为一张大图,其中大图内部存在孤立的子区域(各个子图)。因此上述框架可以简化为:
其中 表示大图, 表示 “顶点-目标” pair
对的集合。这种表述方式不仅简单而且实用,它直接捕获了某些仅包含单个图的问题的本质。
对于 graph-focused
任务可以引入一个特殊的顶点,该顶点和任务目标相关。只有该顶点包含监督信息,即 。
对于node-focused
任务,每个顶点都可以包含监督信息。
假设采用平方误差,则训练集的损失函数为:
也可以在损失函数中增加罚项从而对模型施加约束。
我们可以基于梯度下降算法来求解该最优化问题,求解方法由以下几步组成:
通过下面的迭代公式求解求解 ,直到时间 :
其解接近 的不动点: 。
注意:这一步要求 是一个压缩映射,从而保证方程能够收敛到一个不动点。
求解梯度 。
这一步可以利用 GNN
中发生的扩散过程以非常高效的方式进行。这种扩散过程与 RNN
中发生的扩散过程非常相似,而后者是基于backpropagation-through-time: BPTT
算法计算梯度的。
BPTT
是在展开图上执行传统的反向传播算法。 首先计算时间步 的损失函数,以及损失函数在每个时间步 相对于 和 的梯度。最终 由所有时间步的梯度之和得到。
BPTT
要求存储每个单元在每个时间步 的状态 ,当 非常大时内存需求太大。为解决该问题,论文基于 Almeida-Pineda
算法提出了一个非常高效的处理方式:由于我们假设状态向量最终收敛到不动点 ,因此我们假设对于任意 都有 。因此 BPTT
算法仅需要存储 即可。
下面两个定理表明:这种简单直观方法的合理性。
定理:如果全局转移函数 和全局输出函数 对于状态 和参数 都是连续可微的,则 对于参数 也是连续可微的。
其证明见原始论文。值得注意的是,对于一般动力学系统而言该结论不成立。对于这些动力学系统而言,参数的微小变化会迫使其从一个固定点转移到另一个固定点。而 GNN
中的 可微的原因是由于 是收缩映射。
定理:如果全局转移函数 和全局输出函数 对于状态 和参数 都是连续可微的,定义 为:
则序列 以指数级收敛到一个向量 ,且收敛结果和初始状态 无关。
更进一步有:
其中 为GNN
的不动点, 为上述收敛的向量。
证明见论文原文。其中:
第一项表示输出函数 对于梯度的贡献。反向传播的梯度在通过 的 layer
时计算这一项。
第二项表示转移函数 对于梯度的贡献。反向传播的梯度在通过 的 layer
时计算这一项。
可以证明:
即: 等价于 的累加。
证明过程:
其中最外层的 表示矩阵的转置,内层的 表示矩阵的幂。
考虑到收敛结果和初始状态 无关,因此假设:
并且当 时有 ,以及 ,则有:
考虑到:
因此有:
通过梯度来更新参数 。
GNN
参数学习算法包含三个部分:
FORWARD
前向计算部分:前向计算部分用于计算状态向量 ,即寻找不动点。BACKWARD
反向计算部分:反向计算部分用于计算梯度 。MAIN
部分:该部分用户求解参数。该部分更新权重 直到满足迭代的停止标准。FORWARD
部分:
输入:
输出:不动点
算法步骤:
随机初始化 ,令
循环迭代,直到满足 。迭代步骤为:
返回
BACKWARD
部分:
输入:
输出:
算法步骤:
定义:
随机初始化 ,令
循环迭代,直到满足 。迭代步骤为:
计算梯度:
返回梯度
Main
部分:
输入:
输出:模型参数
算法步骤:
随机初始化参数
通过前向计算过程计算状态:
循环迭代,直到满足停止条件。循环步骤为:
返回参数
目前 GNN
只能通过梯度下降算法求解,非梯度下降算法目前还未解决,这是未来研究的方向。
实际上编码网络仅仅类似于静态的前馈神经网络,但是编码网络的layer
层数是动态确定的,并且网络权重根据输入图的拓扑结构来共享。因此为静态网络设计的二阶学习算法、剪枝算法、以及逐层学习算法无法直接应用于 GNN
。
局部输出函数 的实现没有任何约束。通常在 GNN
中, 采用一个多层前馈神经网络来实现。
局部转移函数 在 GNN
中起着关键作用,它决定了不动点的存在性和唯一性。GNN
的基本假设是:全局转移函数 是收缩映射。
论文给出了两种满足该约束的 的实现,它们都是基于nonpositional form
,positional form
也可以类似地实现。
nonpositional linear GNN
线性 GNN
:
其中 和矩阵 分别由两个前馈神经网络的输出来定义,这两个前馈神经网络的参数对应于 GNN
的参数。更准确的说:
转移神经网络 transition network
是一个前馈神经网络,它用于生成 。
设该神经网络为一个映射 ,则定义:
其中:
约束神经网络forcing network
是另一个前馈神经网络,它用于生成 。
设该神经网络为一个映射 ,则定义:
假设有: ,即 。事实上如果转移神经网络的输出神经元采用有界的激活函数(如双曲正切),则很容易满足该假设。
根据 有: