前言:前段时间了解了一下图神经网络,本篇博客记录一下相关知识,以备不时之需。
强烈推荐这篇博客(作者来自 Google Research),个人认为是图神经网络基础入门的不二选择!
目录
- 一、图数据
- 1.1 定义&表示形式
- 1.2 相关任务
- 1.2.1 图层面的分类 / 回归
- 1.2.2 节点层面的分类 / 回归
- 1.2.3 边层面的分类 / 回归
- 1.3 建模难点
- 二、图神经网络
- 2.1 工作原理
- 2.2 经典模型
- 2.2.1 Graph Convolution Networks (GCN)
- 2.2.2 Graph Sample and Aggregate (GraphSAGE)
- 2.2.3 Graph Attention Networks (GAT)
一、图数据
随着机器学习、深度学习的发展,语音、图像、自然语言处理逐渐取得了很大的突破,然而语音、图像、文本都是很简单的序列或者网格数据,是很结构化的数据,深度学习很善于处理该种类型的数据。
然而现实世界中并不是所有的事物都可以表示成一个序列或者一个网格,例如社交网络、知识图谱、复杂的文件系统等,也就是说很多事物都是非结构化的。
1.1 定义&表示形式
图数据是由节点(Node)和边(Edge)组成的数据,最简单的方式是使用邻接矩阵来表示图形结构,从而捕捉图形中的节点和边的相关性。假设图中的节点数为n,那么邻接矩阵就是一个n*n的矩阵,如果节点之间有关联,则在邻接矩阵中表示为1,无关联则为0。如下图,鲁班与其他英雄都没有关联,表现在邻接矩阵当中就是它所在的行与列为全零。
图数据的信息包含3个层面,分别是节点信息(V)、边信息(E)、图整体(U)信息,它们通常是用向量来表示。而图神经网络就是通过学习数据从而得到3个层面向量的最优表示。
1.2 相关任务
1.2.1 图层面的分类 / 回归
例:分子是天然的图,原子是节点,化学键是边。现在要做一个分类,有一个苯环的分子分一类,两个苯环的分子分一类。这是图层面的分类任务。
1.2.2 节点层面的分类 / 回归
例:假设一个跆拳道俱乐部里有A、B两个教练,所有的会员都是节点。有一天A、B两个跆拳道教练决裂,那么各个学员是愿意和A在一个阵营还是愿意和B在一个阵营?这是节点层面的分类任务。
1.2.3 边层面的分类 / 回归
例:UFO拳击赛上,首先通过语义分割把台上的人和环境分离开来。赛场上的人都是节点,现在要做一个预测,预测的是这些人之间的关系,是对抗关系?还是观众watch的关系?还是裁判watch的关系?这是边层面的分类任务。
1.3 建模难点
相比于简单的文本和图像,这种网络类型的非结构化的数据非常复杂,处理它的难点包括:
- 图的大小是任意的,图的拓扑结构复杂,没有像图像一样的空间局部性
- 图没有固定的节点顺序,或者说没有一个参考节点
- 图经常是动态图,而且包含多模态的特征
那么对于这类数据我们该如何建模呢?能否将深度学习进行扩展使得能够建模该类数据呢?这些问题催生了图神经网络。
二、图神经网络
相比较于神经网络最基本的网络结构全连接层(MLP),特征矩阵乘以权重矩阵,图神经网络多了一个邻接矩阵。计算形式很简单,三个矩阵相乘再加上一个非线性变换。
2.1 工作原理
一个比较常见的图神经网络的应用模式如下图,输入是一个图,经过多层图卷积等各种操作以及激活函数,最终得到各个节点的表示,以便于进行节点分类、链接预测、图与子图的生成等任务。
对图神经网络有一个直观的感受与理解之后,我们来了解一下它的工作原理,如下图所示,GNN是对图中的所有属性进行的一个可以优化的变换,它的输入是一个图,输出也是个图。它只对属性向量(即上文所述的V、E、U)进行变换,但它不会改变图的连接性(即哪些点互相连接经过GNN后是不会变的)。在获取优化后的属性向量之后,再根据实际的任务,后接全连接神经网络,进行分类和回归。大家可以把图神经网络看做是一个图数据的在三个维度的特征提取器。
GNN对属性向量优化的方法叫做消息传递机制。比如最原始的GNN是SUM求和传递机制;到后面发展成图卷积网络(GCN)就考虑到了节点的度,度越大,权重越小,使用了加权的SUM;再到后面发展为图注意力网络GAT,在消息传递过程中引入了注意力机制;目前的SOTA模型研究也都专注在了消息传递机制的研究。见下图所示。
接下来将以几个经典的GNN models为线来介绍图神经网络的发展历程。
2.2 经典模型
2.2.1 Graph Convolution Networks (GCN)
论文信息:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS (ICLR, 2017)
代码:https://github.com/tkipf/pygcn
数据集:https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz
GCN可谓是图神经网络的“开山之作”,它首次将图像处理中的卷积操作简单的用到图结构数据处理中来。
GCN的缺点也是很显然易见的,第一,GCN需要将整个图放到内存和显存,这将非常耗内存和显存,处理不了大图;第二,GCN在训练时需要知道整个图的结构信息(包括待预测的节点), 这在现实某些任务中也不能实现(比如用今天训练的图模型预测明天的数据,那么明天的节点是拿不到的)。
2.2.2 Graph Sample and Aggregate (GraphSAGE)
为了解决GCN的两个缺点问题,GraphSAGE被提了出来。在介绍GraphSAGE之前,先介绍一下Inductive learning(归纳学习)和Transductive learning(转导学习)。注意到图数据和其他类型数据的不同,图数据中的每一个节点可以通过边的关系利用其他节点的信息。这就导致一个问题,GCN输入了整个图,训练节点收集邻居节点信息的时候,用到了测试和验证集的样本,我们把这个称为Transductive learning。然而,我们所处理的大多数的机器学习问题都是Inductive learning,因为我们刻意的将样本集分为训练/验证/测试,并且训练的时候只用训练样本。这样对图来说有个好处,可以处理图中新来的节点,可以利用已知节点的信息为未知节点生成embedding,GraphSAGE就是这么干的。
GraphSAGE是一个Inductive Learning框架,具体实现中,训练时它仅仅保留训练样本到训练样本的边,然后包含Sample和Aggregate两大步骤,Sample是指如何对邻居的个数进行采样,Aggregate是指拿到邻居节点的embedding之后如何汇聚这些embedding以更新自己的embedding信息。
2.2.3 Graph Attention Networks (GAT)
GAT在传播过程引入自注意力(self-attention)机制,每个节点的隐藏状态通过注意其邻居节点来计算。
论文信息:GRAPH ATTENTION NETWORKS (ICLR, 2018)
代码:https://github.com/Diego999/pyGAT
参考资料
- A Gentle Introduction to Graph Neural Networks (distill.pub)
- Understanding Convolutions on Graphs (distill.pub)
- 图神经网络(GNN)最简单全面原理与代码实现! - 知乎 (zhihu.com)
- 图神经网络从入门到入门 - 知乎 (zhihu.com)
- 图神经网络入门(一)GCN图卷积网络 - 知乎 (zhihu.com)
- pytorch框架下—GCN代码详细解读_gcn代码详解_MelvinDong的博客-CSDN博客
- Graph Attention Networks (GAT)pytorch源码解读 - 知乎 (zhihu.com)
- 零基础多图详解图神经网络(GNN/GCN)【论文精读】_哔哩哔哩_bilibili
- 1. 1.1_图基本知识_哔哩哔哩_bilibili