【GNN】【ICML2019】Position-aware Graph Neural Networks

284 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


分享一篇ICML2019的 “老文章": 在这里插入图片描述

摘要总结

  • 背景:过去的GNN很难学习到节点之间的位置关系
  • 取名字:我们提出一种position-aware的GNN(P-GNN)能够对节点位置进行编码
  • 方法:该方法随机指定几组anchor nodes,即锚节点,然后计算每个节点到这些锚节点的距离,然后学习基于这些距离的非线性聚合函数,这样的话P-GNN就能学习到节点之间的位置关系。
  • 优点:P-GNN 是inductive,scalable的,并且可以引入节点feature。
  • 实验:在link-prediction和community detection任务上取得SOTA,最高有66%的ROCAUC提升。

问题背景

可以看出,A和B两个类别的 rooted subtree结构相同,因此,在没有节点feature的情况下,只通过结构,是无法对节点v1v_1v2v_2分类的。

因此,只要节点能够区分相对位置的话,就可以解决这个问题。

方法

Architecture 首先选出k=3个anchor-set:S=S1,S2,S3S={S_1,S_2,S_3},接下来通过函数FF来计算每个节点的位置编码,最后根据传统GNN来计算每个节点的新表示。

举个例子,比如,要通过FF计算v1v_1的编码Mv1M_{v_1}。可以看上图最右边部分,通过节点特征hv1h_{v1},分别加上三个anchor-set SiS_i 中的每个节点特征,分别执行函数FF,再将三个执行后的结果加起来,就得到了Mv1M_{v_1}。这里还通过一个线性变换WW让三个结果变换到一个3维的位置编码Zv1Z_{v_1}.

然后Mv1M_{v_1}输入到AGG聚合函数后,就得到新的节点表示。

那么这个位置编码Zv1Z_{v_1}在哪里用到呢?作者表示,这个编码可以计算两个节点和节点标签的条件概率,即,pz(yu,v)=dz(Zu,Zv)p_z(y|u, v)=d_z(Z_u,Z_v),并且可以用一个可学习的函数dzd_z来学习。

然后对比了传统GNN和P-GNN的损失函数:

在这里插入图片描述 作者还有别的一些理论分析,略过。

实验结果

在这里插入图片描述

在这里插入图片描述