Graph Neural Networks
顾名思义由
Graph
和
Neural Network
组成。Graph由节点和边组成,节点有节点的性质,边有边的性质。
09
年Franco Scarselli
提出The Graph Neural Network Model,能够将其用于化学分子会不会突变。
如何把graph
输入到NN
中?这就是GNN
需要处理的最大的问题。GNN
想要做的事情就是抽取与周围节点之间的关系。通常有两种做法:
但是常用的算法是GAT
和GCN
。
用neighbor feature
更新下一代的hidden state
,我们乘这个操作叫做Aggregate
。: 把所有 nodes
的 feature
集合起来代表整个 graph
的操作称之为Readout
。那具体怎么做呢?
假设我们的输入如下图所示:
节点 v 0 , ⋯ , v 4 v_{0},\cdots,v_{4} v0,⋯,v4分别有 x 0 , ⋯ , x 4 x_{0},\cdots,x_{4} x0,⋯,x4个特征,特征代表的是节点的一些特殊属性,比如在化学分子里面,就表示不同的原子所具有的属性。
对于节点 v 3 v_{3} v3,先经过一个编码得到第0
层隐藏层的输出 h 3 0 = W ˉ 0 ⋅ x 3 h_{3}^{0}=\bar{W}_{0} \cdot x_{3} h30=Wˉ0⋅x3,之后在第一层隐藏层,需要考虑与节点 v 3 v_{3} v3相邻的三个节点,得到第1
层隐藏层的输出 h 3 1 = W ^ 1 , 0 ( h 0 0 + h 2 0 + h 4 0 ) + W ˉ 1 x 3 h_{3}^{1}=\hat{W}_{1,0}(h_{0}^{0}+h_{2}^{0}+h_{4}^{0})+\bar{W}_{1}x_{3} h31=W^1,0(h00+h20+h40)+Wˉ1x3,上述就是Aggregate
所做的事情。
那Readout
怎么考虑整张图的node feature
呢?NN4G
里面是将每一层的输出平均出来再加权。
同样对于下面这个输入:
第0
层隐藏层的输出 h 3 0 = W 3 0 MEAN ( d ( 3 , ⋅ ) = 1 ) h_{3}^{0}=W_{3}^{0}\text{MEAN}(d(3,\cdot)=1) h30=W30MEAN(d(3,⋅)=1),其中 d ( 3 , ⋅ ) = 1 d(3,\cdot)=1 d(3,⋅)=1表示距离 v 3 v_{3} v3这个节点距离为1
的节点,将其平均再乘上一个权重。
第1
层隐藏层的输出 h 3 0 = W 3 1 MEAN ( d ( 3 , ⋅ ) = 2 ) h_{3}^{0}=W_{3}^{1}\text{MEAN}(d(3,\cdot)=2) h30=W31MEAN(d(3,⋅)=2)。可以看出它同样是基于输入图所做一些计算,并不是在第0
层的输出上接着算的。
之后将每个隐藏层计算得到的结果排成一个矩阵,每个节点乘上一个权重就能得到Node features
输出:
如果是将每个隐藏层计算得到的结果排成一个矩阵再加起来直接得到输出,而不是乘上权重矩阵的话,就是DGC (Diffusion Graph Convolution)这篇文章的工作。
Geometric deep learning on graphs and manifolds using mixture model CNNs在处理neighbor node
的时候不是将其平均起来,而是考虑邻居节点的加权。
这篇文章主要是在理论上分析了什么样的做法会work
,在处理邻居节点时,不希望去取max
或者mean
。
卷积操作在频域里面就是相乘,因此对输入图和Filter
做傅里叶变换,然后相乘再做反变换可以得到相同的结果:
这里老板给任务了,先做去了,后面还有一部分,也比较深入了,未完,以后有看到更好的资料再来把这里补上吧: