

GNN 图神经网络简介
source link: https://blog.xpgreat.com/p/gnn/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

图神经网络是是一种基于图结构的广义神经网络。其实传统的神经网络也是可以处理图数据,只需要进行前期合理的embedding即可,那么为什么还需要GNN呢?GNN其实属于一种embedding算法,它通过在整张图上传递、转换、聚合节点的特征信息,从而生成单节点的embedding。本文简要介绍GNN,力求通俗易懂,需要更详细的研究GNN的话,推荐一篇2019年的综述A Comprehensive Survey on Graph Neural Networks。
图是由节点(node,或顶点vertex)和边(edge)构成的一种数据结构,节点可以看作是对象,边可以看作是对象之间的关系。进一步的,每个节点可以有自己的信息,边也可以加上权重和方向以表示关系的不同。所以,最基本的图可以表示为V,EV,EV,E,其中VVV是vertex的集合,EEE是edge的集合。简单起见,先不考虑V自身的信息和E的权重和方向。
图的表示一般有两种方式:一种是表示为节点对:(a,b)(a, b)(a,b),表示a,ba, ba,b之间有一条边(暂时不考虑方向)。容易发现,这种表示在边很多的时候会重复存储很多节点信息,可能带来空间的浪费。另一种方式是表示为邻接矩阵(adjacency matrix),即矩阵的横轴和纵轴分别代表边的两端,如果位置\((a, b)\的值\(\Lambda_{a, b} = 1\,即\(a, b\)之间有一条边。使用邻接矩阵的好处是在边很多的时候可以节省空间,可以方便的加上边的权重信息(对应位置的值为2,3等等),也可以利用矩阵的结构,方便的进行并行运算(对机器学习来说非常重要)。但也会存在一个问题,即图很稀疏的时候(边很少),会存在大量的0值,浪费空间,所幸常用的库都做了sparse matrix的各种实现,既节省空间,又保持了矩阵的形式。
一个节点的邻居可以表示为N(a)N(a)N(a),是与该节点之间存在边的所有节点的集合。一个节点的度(degree)是这个节点邻居的个数,即card(N(a))card(N(a))card(N(a)).
神经网络可以看成是多层的加权求和运算,在各个层之间加入激活函数(一般是非线性函数,以提高模型的表示能力),可以写成:
$$
X_1 = activiation(W_0X_0) \\
X_2 = activiation(W_1X_1) \\
…\\
X_n = activiation(W_{n-1}X_{n-1}) \\
Y = output_transformation(W_nX_n)
$$
可以使用训练数据集来训练神经网络,也就是获得一组能反应训练集的特征的权重\(W_{0~n)\),这样可以用于预测。为优化权重使用梯度下降算法。此外还有很多tricks,比如dropout。
GNN可以看作是对每一个节点分别使用同一个神经网络来获得这个节点的输出值。在神经网络的每一层里,用该节点自身的邻居的状态来更新该节点的状态,最终状态则是每个节点的输出值。如果用于图的分类问题,可以对全部节点的输出值进行聚合,得到最终的结果。
对每一层的运算过程我们可以抽象成两步:聚集(aggregate)和合并(combine)。对于一个有nnn个节点的图,我们将图的邻接矩阵记为Λ∈Nn×n\Lambda\in \mathbb N^{n \times n}Λ∈Nn×n,ttt层的各个节点的状态记为H∈Nn×dtH \in \mathbb N^{n \times d_t}H∈Nn×dt,每个节点的状态可能有多个维度,则这两步可以写成:
aggregation:Zt=ΛHt−1combine:Ht=Ct(Zt) aggregation: Z_t = \Lambda H_{t-1} combine: H_t = \mathcal C_t(Z_t) aggregation:Zt=ΛHt−1combine:Ht=Ct(Zt)
其中Ct\mathcal C_tCt是一个合并方程,对ZtZ_tZt的每一行用一个权重矩阵Wt∈Ndt−1×dtW_t \in \mathbb N^{d_{t-1} \times d_t}Wt∈Ndt−1×dt相乘,将状态矩阵转化到新的维度Ht∈Nn×dtH_t \in \mathbb N^{n \times d_t}Ht∈Nn×dt。将所有的步骤合并起来,并在最后加入一个readout function,整个网络可以写成:
f(Λ,H0)=g(HT(Λ,HT−1(Λ,HT−2(Λ,…H1(Λ,H0))))) f(\Lambda, H_0) = g(H_T(\Lambda, H_{T-1}(\Lambda, H_{T-2}(\Lambda, … H_1(\Lambda, H_0))))) f(Λ,H0)=g(HT(Λ,HT−1(Λ,HT−2(Λ,…H1(Λ,H0)))))
输入一个邻接矩阵和初始状态,输出一个预测值,当然也可以去掉readout一步,获得每个节点的状态HTH_THT作为输出。
Recommend
-
24
作者:刘忠雨、李彦霖、周样 整理:Hoh Xil 出品:DataFun 注:文末有赠书活动,欢迎小伙伴参与。
-
25
作者: 龚俊民(昵称: 除 夕 ) 学校: 新南威尔士大学 方...
-
21
今天看的论文是斯坦福大学的同学的论文《Inductive Representation Learning on Large Graphs》,于 2017 年发表于 NIPS,目前被引次...
-
49
今天学习的是剑桥大学的同学 2017 年的工作《GRAPH ATTENTION NETWORKS》,目前引用数量超过 1100 次。 Attention 机制在...
-
26
今天学习的是 DeepMind 2018 年的工作《Relational inductive biases, deep learning, and graph network》,目前超 500 次引用。这...
-
17
作者:秦州,算法工程师,Datawhale成员 引言 本文为GNN教程
-
9
【资源】图神经网络 (GNN) 相关资源大列表精选 技术讨论 Find me · 发表于 2019-05-21 10:33:16 文章来源: Awsome-Github 资源列表 最近,图神经网络 (GNN) 在各个领域越来越受到欢迎,包括计算机视觉、社交网络、知...
-
7
Figure 1 GNN Demo Using PyTorck Lightning an...
-
8
此为原创文章,未经许可,禁止转载 最近我们开源了我们在阿里内部场景上使用的超大规模图神经网络计算框架 graph-learn,graph-learn作为从业务实践角度出发而孵化...
-
2
PGL图学习之图神经网络GNN模型GCN、GAT[系列六] 项目链接:一键fork直接跑程序 https://aistudi...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK