Motivation
输入是图:
考虑结构和关系信息。
如何在图结构中做Convolution?
Spatial-based GNN
Aggregate:用neighbor feature update下一层的hidden state
Readout:把所有nodes的feature集合起来代表整个graph
NN4G (Neural Networks for Graph)
输出:
每一层的结果取平均后再相加。
DCNN (Diffusion-Convolution Neural Network)
d为距离(图中表示的是到节点3的距离)
第 i 层,找到距离为i的节点的特征取mean,再乘上权重。
每个节点的表示,由k个这样的层组成:
concat 之后, 乘以权重得到输出。
DGC (Diffusion Graph Convolution)
和上一篇类似,得到的输出是直接相加:
MoNET (Mixture Model Networks)
无脑相加 -> 给一个权重的定义:重新定义距离,用定义的距离做weight,再进行sum 或 mean。
GraphSAGE
对邻居feature的处理方式:
mean
max-pooling
LSTM(把邻居节点喂给LSTM,output是hidden state,每次update时,随便sample一个邻居节点的顺序来消除LSTM对顺序的关注)
GAT (Graph Attention Networks)
对邻居做attention。
节点特征:
计算energy(weight):
计算attention分数:
每个节点的feature = sum{ 所有邻居节点 * 邻居节点各自的energy(attention weight) }
GIN (Graph Isomorphism Network)
自己的feature + sum(邻居features)
用sum,不用mean或max pooling,区别不同形态的图:
资源
GNN库: Deep Graph Library dgl.ai