图神经网络笔记
图神经网络 (Graph Neural Networks, GNNs) 是最近很火热的一个 Topic,最近读了不少这方面的文章,梳理一下相关的内容。
Models
符号表示:$G = ( \mathcal{V},\mathcal{E}) $,图 $\mathcal{G}$ 由节点集合 $V$ 和边集合 $\mathcal{E}$ 组成。对于某些区分边类型的图(不仅仅表示有连接,而是更细致的某种连接),还有一个关系集合 $\mathcal{R}$。GNN 的目标就是要对于图中的每一个节点 $v \in \mathcal{V}$ ,学习到它的一个表示 $h_v$ 。
GCN
Kipf 提出了图卷积网络用来在图上对节点进行分类。文章中的数学公式对于新人还是不怎么友好的,可以参考图卷积网络(GCN)新手村完全指南来阅读,这里省略了推导的过程,就从最后的前向传播公式和 Model 说起:

公式中的 $X$ 对应的节点的 feature,$\hat A$ 则是经过处理的邻接矩阵,通过出度矩阵和原始的邻接矩阵计算得到。在文章中实验用的 Cora 数据集上,$X$ 用的是论文的 BOW feature,而邻接矩阵则是通过论文之间的引用关系得到(两篇文章有引用则说明有边)。模型的示意图如下:

经过多层 GCN 的叠加,非直接连接的节点的信息也能传递到相应的节点(相当于 multi-hop)。最后每个节点的表示 $Z_v$ 可以用在下游任务中。对于不想深究数学细节的读者,一句话概括 GCN 就是:通过将邻接节点的表示做一个求和,然后做一个线性变换,再接上激活函数(ReLU),就是一次 GCN 得到某个节点表示的过程
R-GCN
刚才的 GCN 没有考虑边的类型的信息,这对于一些复杂的图是一个比较大的缺点,例如下面的一个知识库,实体之间的联系也是包含着大量的信息:

作者举了一个例子:
知道 Mikhail Baryshnikov 在 Vaganova Academy 上过学说明 Mikhail Baryshnikov 是一个人,并且也以为着他应该住在 Russia。因此,为了将 Relation 的信息整合到 GCN 之中,作者提出了 R-GCN,核心的公式如下:

后面一项是一个 self-connection,来保证自己的信息不在传播过程之中有太大的损失。和 GCN 的主要区别就在于:GCN 是简单的加和平均,而这里在每一个邻接节点的表示之前都做了一个 relation-specific 的线性变换,也就是 $W_r h_j$ 。而为了避免因为 relation 太多带来的过高矩阵维度以及对稀有 relation 的过拟合,作者对 relation 矩阵 $W_r$ 做了分解,利用小矩阵的线性组合来实现。模型的示意图如下:

值得注意的一点就是,对于同一类型的关系,也分 in 和 out 的两种情况,所以在实际的代码中,我们需要对 relation * 2 来实现。
GAT
前面两种 GNN 都可以看做是最邻接节点做一个加和得到的节点表示(GCN 是平均,R-GCN则是根据不同的 relation 有些许调整),想到加权和,很自然的想法就是用 self-attention,于是 Graph Attention Networks 应运而生:

和之前的比较一下,最大的不同就是在邻接节点表示之前有一个权重 $\alpha_{ij}$,作者说这样能够:
our model allows for (implicitly) assigning different importances to nodes of a same neighborhood
当然还有不少和前作对比的好处,不然也不会发到 ICLR 上了。但是,把 self-attention 和 GCN 的结合是一个非常自然的想法,从这一点上来说,有一点灌水的嫌疑。后续作者还把 multi-head 也加了进来:

做法就是把邻接节点的 representation 给 transform 到其他的 subspace 里,然后分别计算 weighted-sum 最后拼接起来。
Uniform Framework
看了前面三个 model,有没有一种其实都差不多的感觉?没错,其实他们都可以看做是 Message Passing Networks 的一种:

其中,$M_t(\cdot)$ 是消息传递函数,描述邻接节点如何向被连接的节点传递 message;$U_t(\cdot)$ 则是一个更新函数,描述当前的节点如何根据周围节点传递来的消息来更新自己的表示。拿 GAT(self-attention 版本) 来说,$M_t$ 就是一个加权和,而 $U_t$ 就可以看做是一个 sigmoid 激活函数。设计 GNN,就是设计消息传递函数以及表示更新函数。最后,我们如何利用图中节点的表示来进行下游的任务,则是 task-specific 的了,被作为称为 readout (读出) 阶段。
最近有一篇工作探究的是 GNNs 的表达能力,作者是把 GNNs 的传播过程分成 Aggregate 和 Combine 两个阶段,其实也就是换了个说法,但是作者对于 GNNs 表达能力的证明(借用了一个图同构的测试方法来作为标准)还是很值得探索的一个方向。
总结一下:GNNs 就是将图中节点的信息,通过邻接这一种关系来进行传递,从而捕获到图整体的结构信息;通过设计合理的消息传递和更新函数(可能还包括图的构建,例如节点的 feature),我们可以得到一个适合下游任务的表示。进一步地,设计一个合理的读出函数,来在下游的任务上做诸如分类、聚类等操作。
Applications
利用 GNNs 获得图中节点的表示之后,下一步就是应用到各类问题上了,而 GNNs 特别是 GCN 目前在 NLP 上的应用还不是特别多,似乎现有的工作还 focus 在如何改进结构上,因此这里就简单的举两个例子。
Text Classification
如果图中每个节点是一个 document,那么我们在得到节点的表示之后就相当于获得了一个 document vector,过一个全连接层然后做分类是很自然的想法。提出 Model 的 Paper 基本都是在 Citation Dataset 上做的测试,即把每一篇 Paper 作为节点,Paper 之间的引用关系作为边,把 Paper 的BOW 作为节点的 feature (GCN 中的 $X$ ),最后在节点之上做分类(判断 Paper 是属于哪个领域的)。而泛化到 Text Classification 上,核心问题就是如何构建 doument 之间的 edge,和 Paper 不同的是,一般的 Document 没有直接的联系。Graph Convolutional Networks for Text Classification 就提出了一种解决的方法:把 word 看成是一种极端的 document,去做 word-word 和 word-document 之间的边:

这里的邻接矩阵进一步泛化,不再是单纯的 1/0 indicator,而是更细致的权重。对于 word-word,是两个词之间的互信息,互信息衡量的是一个词之间的语义关联程度;而对于 word-document,则是对应的 TF-IDF 值,衡量一个词对于一个 document 的重要程度。注意到,word 和 document 是两个 level 的 document ,所以这是一张异质图,并且作者提到:
although there is no direct document-document edges in the graph, the two-layer GCN allows the information exchange be- tween pairs of documents.
通过 GCN 的信息传递机制,来实现 document 级别的信息传递。最后在一系列 dataset 上,GCN Model 都能够超过 LSTM 和 CNN 的 baseline。
Text Generation
另外一个很有意思的应用是文本生成,现在有很多 Data-to-Text 的问题的 Source 是类似 Wikipedia 的一张表,而这其中其实也就一张很大的知识图的一部分,Deep Graph Convolutional Encoders for Structured Data to Text Generation 把 GCN 用到了生成上。样例数据如下:

根据上方的三元组来生成下面的描述。主要的思路就是把原先 Seq2Seq 中的 Encoder 替换成一个 GCN 来编码 Source 端的三元组。相比于 RNN 类的 Encoder,因为三元组之间并不存在时序关系,而更多的是图的结构和节点之间的边,所以用 GCN 来得到节点的表示作为 hidden state,然后在 decode 的时候 attention,也是一个比较自然的想法。
Summary
从在 Text Classification 上的结果来看,GCN 对图的信息表示能力还是比较强的。我个人认为,未来的探索方向大约是两个:
- 现有的机制还是对邻接节点的整合,依旧在消息传递这样一个框架下,如何设计更 expressive 和 power 的 framework 是很有意义的;
- 和下游任务的结合,目前还只有少量的工作在做 GCN 的应用,因此可能也是很好发文章的一个方向,我相信不久以后会有更多关于将 GCN 和特定的问题结合的工作
Reference
- Semi-Supervised Classification With Graph Convolutional Networks
- Neural Message Passing for Quantum Chemistry
- Graph Attention Networks
- Modeling Relational Data with Graph Convolutional Networks
- Graph Convolutional Networks for Text Classification
- Deep Graph Convolutional Encoders for Structured Data to Text Generation
- How Powerful are Graph Neural Networks