《Gated Graph Sequence Neural Networks》阅读笔记

来源:2016 ICLR

链接:《Gated Graph Sequence Neural Networks》

Introduction

图结构数据在实际生活中往往很常见,在化学、自然语言处理、社交网络、知识库等应用中,都存在大量的图结构数据。这些应用主要可以分为两大类:一类是graph-focused,另一类则是node-focused。Graph-focused应用往往关注整个图上的信息,这一类应用有化学组成研究、图片分类、文本分类等;node-focused应用则关注的是图中每个节点的信息,这一类应用有物体检测、网页分类等。无论是哪一类任务,我们都希望获得关于graph或node的有效表示,并利用这个表示去解决相应的问题。

基于这一出发点,2009年,在[2]中提出了graph neural network(GNN)。简单来讲,GNN是一种可以将图或图中的节点映射为某种向量表示的神经网络。为了使GNN能够用于处理序列问题,本文又提出了Gated Graph Sequence Neural Network(GGS-NN)。此外,针对GNN的训练问题,本文也做了相应的改进。实验证明,本文所提出了GGS-NN在bAbI任务上取得了较好的效果。

Motivation

相比于链式结构数据或者树状结构数据,图结构数据往往更加灵活。许多传统的算法往往将图结构的数据压缩为链式结构,或者转换为树状结构,然后再使用链式神经网络(如RNN)或递归神经网络去处理。此时,图中的拓扑结构信息往往会有一定的损失,模型的性能也会受到压缩(或转换)效果的影响。解决这一问题的最好方案莫过于直接构建关于图的神经网络。本文所讲的GNN、GG-NN、GGS-NN正是这样的一类神经网络。

Symbols

1、在表示从的图中中图使用符号\mathcal{G}=(\mathcal{V},\mathcal{E})进行),类似地, \mathcal{V} 表示大小为|\mathcal{V}|的节点集,\mathcal{E}表示大小为|\mathcal{E}|的边集。\mathcal{V}中的节点使用v进行表示,\mathcal{E}中的边使用 (v,v') 进行表示。本文重点关注有向边,因此, (v,v')v\to v' 是等价的。

2、\boldsymbol{h}_{v}\in\mathbb{R}^{D}:节点v的向量表示。

3、l_{v}\in\{1,...,L_{\mathcal{V}}\}:节点标签(node label);l_{e}\in\{1,...,L_{\mathcal{E}}\}:边的标签(edge label)

4、当\mathcal{S}是一个节点集时,使用\boldsymbol{h}_{\mathcal{S}}=\{\boldsymbol{h}_{v}|v\in\mathcal{S}\}表示相应的节点向量集,使用 l_{\mathcal{S}} 表示相应的节点标签集(或bag);当\mathcal{S}是一个边集时,l_{\mathcal{S}}=\{l_{e}|e\in\mathcal{S}\}表示 \mathcal{S} 中边的标签集(或bag)。

5、IN(v)表示节点v的父节点集,类似地,OUT(v)表示v的子节点集。IN(v)OUT(v) 的并集即为v的邻节点集,表示为NBR(v),与v直接相连的边构成的集合CO(v)表示。

GNN

模型结构

GNN的结构如图Figure 1 所示。其中,最上方的图是一个graph,中间部分为对应的编码网络(encoding network),最下方为编码网络的展开图。转移函数 f_{\boldsymbol{w}} 与输出函数 g_{\boldsymbol{w}} 都使用前馈神经网络实现。



可以看到,从将图输入到GNN中到得到输出结果 主要可以分为两步:第一步是传播(propagation)过程,即节点表示随时间的更新过程;第二步是输出(output)过程,即根据最终的节点表示得到目标输出(如每个节点的类别)的过程。在这两步中,传播过程要更为重要,其设计也要受到一定的约束(要保证整个图上的状态映射是一个压缩映射(contraction map))。在展开图中,传播过程对应于从 t_{0}T 的更新过程(注意, T 并不是确定的,而是对应于整个图的状态到达不动点的时刻),不同时间步的连接则由图中的连接来决定(可以是有向的,也可以是无向的)。以下来具体介绍这两个过程(省略f_{\boldsymbol{w}}g_{\boldsymbol{w}} 中的参数 \boldsymbol{w} )。

传播过程

GNN的传播过程是指通过迭代获取节点表示的过程。首先初始化节点表示\boldsymbol{h}_{v}^{(1)},然后每个节点的表示使用循环方式更新:



我们还可以将f^{*}分解为多项之和,其中每一项都与单独的一条边有关:



其中,f(*)是一个关于\boldsymbol{h}_{v'}的线性函数或是一个神经网络。f的参数则与标签有关,例如:



输出过程

GNN的输出函数一般是一个简单的可微函数g(\boldsymbol{h}_{v},l_{v})。一般来说,输出函数同样使用线性映射或神经网络实现。

对于node-focused任务来说,每个节点的输出是相互独立的,一般通过将最终的节点表示映射为相应的输出来实现:o_{v}=g(\boldsymbol{h}_{v}(T),l_{v})

对于graph-focused的任务来说,可以通过设置一个超结点(super node)转化为node-focused任务。一般来说,该超节点需要使用特定类型的边与所有节点相连。此时,我们可以利用该超节点的最终表示来完成graph-focused任务。

训练

GNN的学习是通过Almeida-Pineda算法实现的。该算法的特点在于,首先通过传播过程使整个图收敛,然后在收敛解上计算相应的梯度。这样,我们就无需存储梯度计算过程所需的中间状态了。但是,必须保证整个图的映射是压缩的,以保证传播过程有一个收敛解。

GG-NN

相比于GNN,GG-NN的特点在于使用了GRU单元,而且,节点表示的更新次数被固定成了 T也就是说,GG-NN并不能保证图的最终状态会到达不动点。由于更新次数 T 变成了固定值,因此GG-NN可以直接使用BPTT算法来进行梯度的计算。相比于Almeida-Pineda算法,BPTT算法需要更多的内存,但是,它并不需要对参数进行约束(以保证收敛)。

节点标注

在GNN中,节点的最终表示与节点的初始化没有任何关系,因为压缩映射会确保节点表示在最后的时刻到达不动点。但在GG-NN中,这一条将不再适用。因此,我们需要将节点标注(node annotation)作为额外的输入。在本文当中,这是一个很容易和节点标签混淆的概念。可以简单地理解,节点标注等同于节点表示的初始化向量,只不过它不一定和节点表示等大而已;节点标签与边标签的概念则与节点类型与边类型非常类似。

举例来说,对于一个节点可达性预测任务(给定一个图,预测从节点s能否到达节点t),我们需要对节点s与节点t进行相应的初始化标注。假设节点s被标注为\boldsymbol{x}_{s}=[1,0]^{T},节点t被标注为\boldsymbol{x}_{t}=[0,1]^{T},图中的其他节点被标注为\boldsymbol{x}_{v}=[0,0]^{T}。然后,我们使用节点标注\boldsymbol{x}_{v}对节点状态向量\boldsymbol{h}_{v}^{(1)}进行初始化,当\boldsymbol{h}_{v}^{(1)}的维度大于\boldsymbol{x}_{v}时,使用0将剩下的维度补齐。

以Figure 2为例,我们判断从节点1到节点4是否可达。首先,我们可以将节点1-4分别初始化为 \boldsymbol{x}_{1}^{(1)}=[1,0]^{T} , \boldsymbol{x}_{2}^{(1)}=[0,0]^{T} , \boldsymbol{x}_{3}^{(1)}=[0,0]^{T} , \boldsymbol{x}_{4}^{(1)}=[0,1]^{T} 。我们可以通过将传播矩阵的(0,0)元素设置为1来考察图的可达性。在节点状态更新的过程中,若某节点表示的第一维出现1时,表明该节点可达。例如,对于以下更新过程,可以得到节点1到节点4是可达的。


传播过程

GG-NN的传播过程可以表示为:



其中,\boldsymbol{A}\in\mathbb{R}^{D|\mathcal{V}|\times2D|\mathcal{V}|}表示图中节点与其他节点的连接关系( \boldsymbol{A} 可以视作将连接矩阵的每一个“1”元素替换为 D\times D 的传播矩阵得到)。在大多数情况下,\boldsymbol{A}是比较稀疏的矩阵,而且,在同一类型的边上,参数是共享的。\boldsymbol{A}_{v:}\in\mathbb{R}^{D|\mathcal{V}|\times 2D}\boldsymbol{A}的一个子矩阵,对应于\boldsymbol{A}中与节点v有关的列。式(1)是一个初始化步骤,用于将节点标注复制到节点状态向量中,其余部分使用0补齐。式(2)则用于不同节点之间的信息传播,这些信息传播要受到图中边的限制(包括是否有边、边的方向以及边的类型)。\boldsymbol{a}_{v}^{(t)}\in\mathbb{R}^{2D}包含了每个方向上的激活。剩下的公式都是GRU单元(如Figure 3所示)的更新参数:\boldsymbol{z}\boldsymbol{r}分别表示更新门与重置门,\sigma(*)为sigmoid函数,\odot表示逐元素相乘。



输出过程

根据任务的不同,GG-NN可以有多种不同形式的输出。

当GG-NN用于node-focused任务时,对于每个节点v\in\mathcal{V}都需要有一个输出:



若对于图级(graph-level)输出,可以定义一个图的表示向量:



其中,\sigma(i(\boldsymbol{h}_{v}^{(T)}),\boldsymbol{x}_{v}))相当于一个soft attention机制,用于决定哪个节点与当前的任务有关。 ij 都是神经网络,其输入是\boldsymbol{h}_{v}^{(T)}\boldsymbol{x}_{v}的连接,输出是实值向量。tanh函数也可以被替换为恒等变换。

GGS-NN

GG-NN一般只能处理单个输出。若要处理输出序列 \boldsymbol{o}^{(1)},...,\boldsymbol{o}^{(K)} ,可以使用GGS-NN(Gated Graph Sequence Neural Networks)。

对于第k个输出步,我们定义节点的标注矩阵为\boldsymbol{\mathcal{X}}=[\boldsymbol{x}_{1}^{(k)};...;\boldsymbol{x}_{|\mathcal{V}|}^{(k)}]^{T}\in\mathbb{R}^{|\mathcal{V}|\times L_{\mathcal{V}}}。在这里使用了两个GG-NN\mathcal{F}_{\boldsymbol{o}}^{(k)}\mathcal{F}_{\boldsymbol{\mathcal{X}}}^{(k)}\mathcal{F}_{\boldsymbol{o}}^{(k)}用于根据\boldsymbol{\mathcal{X}}^{(k)}得到\boldsymbol{o}^{(k)}\mathcal{F}_{\boldsymbol{\mathcal{X}}}^{(k)}用于从\boldsymbol{\mathcal{X}}^{(k)}预测\boldsymbol{\mathcal{X}}^{(k+1)}\mathcal{F}_{\boldsymbol{o}}^{(k)}\mathcal{F}_{\boldsymbol{\mathcal{X}}}^{(k)}都包括自己的传播模型与输出模型。在传播模型中,我们定义第 k 个输出步中第 t 个时刻的节点向量矩阵为\boldsymbol{\mathcal{H}}^{(k,t)}=[\boldsymbol{h}_{1}^{(k,t)};...;\boldsymbol{h}_{1}^{(k,t)}]^{T}\in\mathbb{R}^{|\mathcal{V}|\times D}。与之前的做法类似,在第k步,每个节点上的\boldsymbol{\mathcal{H}}^{(k,1)}使用 \boldsymbol{\mathcal{X}}^{(k)} 的0扩展(0-extending)进行初始化。

GGS-NN的整体结构如下图所示。


在使用\boldsymbol{\mathcal{H}}^{(k,T)}预测\boldsymbol{\mathcal{X}}^{(k+1)}时,我们向模型当中引入了节点标注。每个节点的预测都是相互独立的,使用神经网络j(\boldsymbol{h}_{v}^{(k,T)},\boldsymbol{x}_{v}^{(k)})来完成。该神经网络的输入是\boldsymbol{h}_{v}^{(k,T)}\boldsymbol{x}_{v}^{(k)}的连接,输出是一个实值向量(每个维度的值范围在0-1之间):



在训练GGS-NN时,有两种设置方式:一种是明确每一个中间节点的标注\boldsymbol{\mathcal{X}}^{(k)},另一种是直接根据\boldsymbol{\mathcal{X}}^{(1)}与目标输出序列进行端到端的训练。

Experiment

BABI任务

bAbI任务是Facebook提出的一个AI任务集,第一组发布的bAbI包括20个任务。若要查看这些任务的详细信息,请移步bAbI Tasks。在bAbI数据集中,每一篇文本对应于一个故事。本文将每个故事映射成了一个简单的图(节点对应于实体,边对应于关系)。每个问题(eval)由问题类型(类似于谓词,如“has_fear”)与一些参数(对应于图中的一个或多个节点)构成。当任务具有多种问题类型时,需要对每种问题类型都训练一个独立的模型。在本文中,仅处理类型为二元一阶谓词的问题。

例如,对于问题“eval E>A true”,那么问题的类型为" >", 图中的节点E将会被(初始化)标注为 \boldsymbol{x}_{E}=[1,0]^{T} ,节点A将会被标注为 \boldsymbol{x}_{A}=[0,1]^{T} ,其他节点将被标注为 [0,0]^{T}

单输出任务

单输出任务实验基于bAbI的四个任务:Task4:Two Argument Relations(选用D=4);Task 15:Basic Deduction(D=5);Task 16:Basic Induction(D=6);Task 18:Size Reasoning(D=3)。

在bAbI任务集的四个任务上的实验结果为(括号内为使用的训练样本数,下同。):

序列输出任务

序列输出任务基于bAbI Task 19:Path Finding(D=6)。其实验结果如下:


Analysis

相比于传统的图数据处理方式,GNN、GG-NN、GGS-NN等模型可以有效地利用图的拓扑结构信息,这也是为什么GGS-NN可以在Path Finding任务中取得优异效果的原因。另外,由于这些模型在每个传播时间步都需要展开所有的节点,因而这些模型也可以用于处理各种图(包括有向图、无向图、有环图、无环图等)。但是,这同样也带来了一些问题:

(1)由于在每个时间步都需要展开图中所有的节点,每个节点还需要使用 D 维的向量进行表示;当图很大且向量表示很大时,模型的效率问题就会变得很重要;

(2)在GNN中需要保证图的整体映射是一个压缩映射,这显然就减小了该模型所能建模的问题空间。为了解决这一问题,GG-NN将传播时间步固定为T,虽然不需要保证收敛,但是,图上的信息传输却也因此受到了约束。例如,在可达性预测任务中,在两个时间步后节点1的信息才可以到达节点4。虽然本文中采取了一定的措施来缓解这一问题(即不仅定义了沿边方向的转移矩阵,还定义了与边方向相反的转移矩阵),但是只要T的大小有限,节点之间的信息就只能沿着路径传播 T 步,而不能像GNN那样到模型收敛才停止。换句话说,GG-NN实际上是以损失图中较长路径信息的代价换取了模型可建模的问题空间。

参考文献

[1] Yujia Li, Richard Zemel, et al. 2016. Gated Graph Sequence Neural Networks. ICLR 2016

[2] Franco Scarselli and Macro Gori. 2009. The Graph Neural Network Model. IEEE Transaction on Neural Networks, 2009

编辑于 2018-04-17

文章被以下专栏收录