阅读笔记--GraphSAGE


一、简介

事实证明,大型图中节点的低维向量嵌入是非常有用的输入,可用于各种预测和图形分析任务。节点嵌入方法的基本思想是使用降维技术将有关节点图邻域的高维信息提取为密集的矢量嵌入。然后可以将这些节点嵌入提供给下游机器学习系统,并帮助完成诸如节点分类,聚类和链接预测之类的任务。但是,以前的工作集中于从单个固定图嵌入节点,并且许多现实世界的应用程序要求为看不见的节点或全新的(子)图快速生成嵌入。这种归纳能力对于高吞吐量的生产机器学习系统至关重要,该系统在不断变化的图形上运行并不断遇到看不见的节点。

二、GraphSAGE

2.1 概览

GraphSAGE:Graph Sample and aggreGatE

GraphSAGE方法背后的关键思想是:GraphSAGE不是试图学习一个图上所有node的embedding,而是学习一个为每个node产 embedding的映射。文中不是对每个顶点都训练一个单独的embeddding向量,而是训练了一组aggregator functions,这些函数学习如何从一个顶点的局部邻居聚合特征信息。每个聚合函数从一个顶点的不同的hops或者说不同的搜索深度聚合信息。测试或是推断的时候,使用训练好的系统,通过学习到的聚合函数来对完全未见过的顶点生成embedding。

三个步骤:

1. 对图中每个顶点邻居顶点进行采样,因为每个节点的度是不一致的,为了计算高效, 为每个节点采样固定数量的邻居;
采样邻居顶点:出于对计算效率的考虑,对每个顶点采样一定数量的邻居顶点作为待聚合信息的顶点。设采样数量为 k,若顶点邻居数少于 k,则采用有放回的抽样方法,直到采样出 k 个顶点。若顶点邻居数大于 k,则采用无放回的抽样。若不考虑计算效率,完全可以对每个顶点利用其所有的邻居顶点进行信息聚合,这样是信息无损的。
2. 根据聚合函数聚合邻居顶点蕴含的信息;
3. 得到图中各顶点的向量表示供下游任务使用。

2.2 Embedding的生成

Forward propagation:

Neighborhood definition

在这里插入图片描述

  • 实验发现,K不必取很大的值,当K=2时,效果就很好了。

2.3 Learning the parameters of GraphSAGE

基于图的无监督损失

基于图的损失函数倾向于使得相邻的顶点有相似的表示,但这会使相互远离的顶点的表示差异变大:
在这里插入图片描述

基于图的有监督损失

监督学习形式根据任务的不同直接设置目标函数即可,如最常用的节点分类任务使用交叉熵损失函数。
在这里插入图片描述

2.4 聚合函数的选择

概览

在图中顶点的邻居是无序的,所以希望构造出的聚合函数是对称的(即也就是对它输入的各种排列,函数的输出结果不变),同时具有较高的表达能力。 聚合函数的对称性(symmetry property)确保了神经网络模型可以被训练且可以应用于任意顺序的顶点邻居特征集合上。

Mean aggregator

在这里插入图片描述

LSTM aggregator

文中也测试了一个基于LSTM的复杂的聚合器[Long short-term memory]。和均值聚合器相比,LSTMs有更强的表达能力。但是,LSTMs不是对称的,也就是说不具有排列不变(permutation invariant),因为它们以一个序列的方式处理输入。因此,需要先对邻居节点随机顺序,然后将邻居序列的embedding作为LSTM的输入。
排列不变性(permutation invariance):指输入的顺序改变不会影响输出的值。

Pooling aggregator

pooling聚合器,它既是对称的,又是可训练的。Pooling aggregator 先对目标顶点的邻居顶点的embedding向量进行一次非线性变换,之后进行一次pooling操作(max pooling or mean pooling),将得到结果与目标顶点的表示向量拼接,最后再经过一次非线性变换得到目标顶点的第k层表示向量。
一个element-wise max pooling操作应用在邻居集合上来聚合信息:
在这里插入图片描述

三、总结

其实,通过GraphSAGE得到的节点的embedding,在增加了新的节点之后,旧的节点也需要更新,这个是无法避免的,因为,新增加点意味着环境变了,那之前的节点的表示自然也应该有所调整。只不过,对于老节点,可能新增一个节点对其影响微乎其微,所以可以暂且使用原来的embedding,但如果新增了很多,极大地改变的原有的graph结构,那么就只能全部更新一次了。从这个角度去想的话,似乎GraphSAGE也不是什么“神仙”方法,只不过生成新节点embedding的过程,实施起来相比于GCN更加灵活方便了。在学习到了各种的聚合函数之后,其实就不用去计算所有节点的embedding,而是需要去考察哪些节点,就现场去计算,这种方法的迁移能力也很强,在一个graph上学得了节点的聚合方法,到另一个新的类似的graph上就可以直接使用了。

本文是自己的读书笔记,较多参考了:link_csdn link_zhihu
感谢作者的奉献.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值