GraphSAGE
代码: http://snap.stanford.edu/graphsage/
摘要
文章解决的是GNN的存在的不能很好地进行归纳学习的问题,大多数只是进行的直推学习,所以文章不是只对每个节点进行单独学习,而是考虑的局部节点的邻域信息。
方法
前向传播算法
进行K次汇集,每次汇集使用不同的信息汇集参数和节点更新函数,共k个aggregate,以及K组要调的参数。整个过程如下面所示,第一个循环为聚集K轮,第二个循环为对每个节点信息信息更新第一跳选3个,第二跳5个
参数调整—— 自监督
使用随机梯度下降,对K组参数进行更新
基于图的损失函数鼓励附近的节点有相似的表示,同时迫使不同节点(也就是正负样本)的表示不同:其中v是在定长随机游走中同时出现在u附近的节点,是一个负采样分布,Q定义了负样本的数量。
邻域选择
这里为了减少计算量,只随机采样固定数量的邻接点,而不是使用当前节点的所有邻域。而且对于每一次传播,都是随机取样的。
聚集函数
为了使得结果与节点排列的顺序无关,这里提出了4种的聚集函数
mean aggregator
也就是将当前信息和邻居信息一起做个平均,求和是交换,加法交换律
LSTM
LSTM具有比较强大的序列表达能力,但是其不是跟节点排列无关的,所以这里只是每次聚合的时候对节点顺序进行随机排列。 邻接特征作为LSTM输入。
Pooling
为了可以训练和对称性(结果与排列无关),我们使用了全连接层对邻接节点特征进行处理,然后通过最大池化产生聚合后的信息表示。这里还说明了使用max pooling跟mean pooling具有差不多的效果,但是max 更加的高效,所以选择max 作为后面的pooling实验。
结果
实验设定
K=2 ,也就是跑两轮,两层GNN ,第一层选择25个邻接节点,第二层选择10个连接节点