概要
近年来图神经网络受到大家越来越多的关注,在文本分类(Text classification),序列标注(Sequence labeling), 神经机器翻译(Neural machine translation),关系抽取(Relation extraction),事件抽取(Event extraction), 图像分类(Image Classification),视觉推理(Visual Reasoning),语义分割(Semantic Segmentation)等等领域都有了一些应用。本文主要分享先当下最为广泛的几种图神经网络的结构。参考:Tutorial on Graph Representation Learning, AAAI 2019
Basic GNNs
基本思想
图神经网络的一个基本思想,就是基于节点的局部邻居信息对节点进行embedding。直观来讲,就是通过神经网络来聚合每个节点及其周围节点的信息。
图神经网络的几个性质如下:
- 节点在每一层都会有embedding
- 模型可以达到任意深度
- 第零层的节点的embedding就是他的输入特征向量
实现
我们所要探讨的是,节点如何获取它的邻居节点的信息。最基本的想法就是聚合一个节点的邻居节点信息时,采用平均的方法,并使用神经网络作聚合操作,具体方法如下图
那么如何训练这个模型,具体分为监督、和无监督两种方法。
无监督的方法包括:
- 随机游走(Random walks):node2vec, DeepWalk
- 图分解(Graph factorization)
- 训练模型使得相似的节点具有相似的embedding
监督的方法,以二分类举例,可以定义一个交叉熵函数来作为损失函数:
归纳性
图神经网络中每一层的聚合所使用的参数是相同的,并且这个模型可以推理出新出现节点的embedding或者一张新图的embedding。如下图
图卷积神经网络(GCN)
与基础的GNN相比,GCN只是在聚合函数上有一些细微的变化。
GraphSAGE
Gated Graph Neural Network
门控图神经网络主要是解决过深层的图神经网络导致过度平滑的问题,使用GRU更新节点状态。
图注意力网络(Graph Attention Networks)
在基础的图神经网络上加上了注意力机制,需要去学习每个节点的注意力权重。
(Sub)graph Embeddings
对一个图的子图计算embedding,如下图:
主要的方法有
- 直接加权子图中每一个节点的embedding
- 将子图当成一个虚拟节点,加入到图神经网络的计算中
- 逐层的聚合节点。
逐层聚合的步骤如下:
- 使用GNN计算节点的embedding
- 将节点聚合在一起,使得图变成一个粗粒度的图
- 在粗粒度的图上运行GNN
- 重复
Open Problems
图神经网络目前还存在很多开放性的问题需要解决
浅层结构
传统的深度学习通过叠加层数来获得更好的性能,但是图神经网络往往只有两三层,如果叠加的层数过多,会造成过度平滑,所有的节点都会收敛到一个值。
动态图
静态图是稳定的,因此可以有效建模,而当边或者节点出现或者消失的时候,GNN不能自适应变化
非结构场景
没有一种好的方法从非结构化数据中生成一张图
Scalability
时间复杂度过高,在大数据环境中很难使用。