1. 想法
CNN 中的卷积核(e.g., 3 * 3)算某一个像素点的 feature 的时候,可以看成把这个像素点周围的像素点的特征按照一定的权重加权求和。
卷积操作类似于内积,即把卷积核里的每个权重和对应像素点值相乘,最后相加,得到的结果就是这个点的新的特征。
Spatial-GNN 想要把这种卷积操作直接推广到 Graph 上。
2. 做法
将某个节点周围的领域节点特征收集起来,进行某一种操作,然后更新这个节点的特征。
图片来源:李宏毅老师 2020 课程:

上面我觉得直接把 i 看成 0 来理解会好一些,假设第 0 层的图和特征如上面图左边所示。
为了更新 h 3 0 h^{0}_{3} h30 (也就是第 0 层的 3 号节点)的节点特征,那么类似的我们需要将它周围的节点的特征聚合(aggregate)起来,然后进行某种操作,来更新这个节点的特征。类似于卷积中除了对周围像素操作职位,也对自己本身做了操作,因此 Spatial-GNN 通常也会结合自己本身的特征来更新下一次的特征。
这里在我读过的论文里面总结得最好的论文是 GIN《HOW POWERFUL ARE GRAPH NEURAL NETWORKS?》
a v ( k ) = a_{v}^{(k)}= av(k)= AGGREGATE ( k ) ( { h u ( k − 1 ) : u ∈ N ( v ) } ) , h v ( k ) = C O M B I N E ( k ) ( h v ( k − 1 ) , a v ( k ) ) ^{(k)}\left(\left\{h_{u}^{(k-1)}: u \in \mathcal{N}(v)\right\}\right), \quad h_{v}^{(k)}=\mathrm{COMBINE}^{(k)}\left(h_{v}^{(k-1)}, a_{v}^{(k)}\right) (k)({ hu(k−1):u∈N(v)}),hv(k)=COMBINE(k)(hv(k−1),av(k))
k k k 代表第 k k k 层网络,经过 k k k 层网络的某一节点会收集到他 k k k 跳邻居的节点信息。
AGGREGATE 操作就是将收集到的节点的特征进行聚合,聚合方案的不同是导致这一类方法不同模型的主要原因。同样的 COMBINE 操作就是讲聚合的特征和自己节点这一层的特征结合起来,形成新的特征。这样就可以经过 k k k 层网络之后,每个节点就会根据自己周围的拓扑结构和特征,得到新的特征,可以更好的用于下游任务。
当然对于图分类的任务,需要整个图的特征:
h G = READOUT ( { h v ( K ) ∣ v ∈ G } ) h_{G}=\operatorname{READOUT}\left(\left\{h_{v}^{(K)} | v \in G\right\}\right) hG=READOUT({ hv(K)∣v∈G})
其中 K K K 是最后一层的网络,这里表示将最后一层所有节点的特征进行某种 READOUT 操作,就得到整个图的特征。当然也可以把前面所有层的特征一起进行操作,甚至加权都是可以的。比如 GIN 中就用到了所有层的特征。
3. 经典例子:
接下来就是这一类方法的经典例子:这里面有大名鼎鼎的 GAT 和 GraphSage。
3.1 NN4G
论文《Neural Network for Graphs: A Contextual Constructive Approach》
<

最低0.47元/天 解锁文章
593

被折叠的 条评论
为什么被折叠?



