代码: http://snap.stanford.edu/graphsage/

摘要

文章解决的是GNN的存在的不能很好地进行归纳学习的问题,大多数只是进行的直推学习,所以文章不是只对每个节点进行单独学习,而是考虑的局部节点的邻域信息。

方法

前向传播算法

进行K次汇集,每次汇集使用不同的信息汇集参数和节点更新函数,共k个aggregate,以及K组要调的参数W1,W2,...WKW^1,W^2,...W^K。整个过程如下面所示,第一个循环为聚集K轮,第二个循环为对每个节点信息信息更新
GraphSAGE(17 -NIPS)GraphSAGE(17 -NIPS)第一跳选3个,第二跳5个

参数调整—— 自监督

使用随机梯度下降,对K组参数进行更新
基于图的损失函数鼓励附近的节点有相似的表示,同时迫使不同节点(也就是正负样本)的表示不同:
GraphSAGE(17 -NIPS)其中v是在定长随机游走中同时出现在u附近的节点,PnP_n是一个负采样分布,Q定义了负样本的数量。

邻域选择

这里为了减少计算量,只随机采样固定数量的邻接点,而不是使用当前节点的所有邻域。而且对于每一次传播k(0<k<K)k(0<k<K),都是随机取样的。

聚集函数

为了使得结果与节点排列的顺序无关,这里提出了4种的聚集函数

mean aggregator

也就是将当前信息和邻居信息一起做个平均,求和是交换,加法交换律
GraphSAGE(17 -NIPS)

LSTM

LSTM具有比较强大的序列表达能力,但是其不是跟节点排列无关的,所以这里只是每次聚合的时候对节点顺序进行随机排列。 邻接特征{x1...xk}\{x_1...x_k\}作为LSTM输入。

Pooling

为了可以训练和对称性(结果与排列无关),我们使用了全连接层对邻接节点特征进行处理,然后通过最大池化产生聚合后的信息表示。
GraphSAGE(17 -NIPS)这里还说明了使用max pooling跟mean pooling具有差不多的效果,但是max 更加的高效,所以选择max 作为后面的pooling实验。

结果

实验设定

K=2 ,也就是跑两轮,两层GNN ,第一层选择25个邻接节点S1=25S_1=25,第二层选择10个连接节点S2=10S_2=10

Citation 、Teddit、PPI 三个数据集

GraphSAGE(17 -NIPS)GraphSAGE(17 -NIPS)

相关文章: