GraphSAGE
GraphSage算法是17年在NIPS上提出的一个图卷积网络的算法,这篇文章到现在就有了5090的引用次数,证明这篇文章在图神经网络领域有很重要的作用。作者想要解决的问题主要是大多数之前的算法都是直推式的,没有归纳式的能力,也就是对于未见过的节点表示能力不好。因此,本文作者提出了一种通用的归纳式学习框架-GraphSage,不向之前的网络直接学习节点的嵌入向量,而是学习到从邻居节点采样和聚合的函数(因为GCN算法的通用框架就是采样+聚合),使得网络具有归纳式学习的能力。算法中SAGE其实是 SAmple and aggreGatE 的缩写,这也说明了算法的两个核心就是采样和聚集操作。
引言&相关工作
节点嵌入就是使用降维技术(例如PCA等),将高维信息嵌入在低维向量中,给下游系统进行分类、预测等任务。现在大多数的方法是基于矩阵分解的,这样对于未见过的样本不会有对应的嵌入向量。除了矩阵分解之外,其他因子分解的嵌入方法如随机游走等,也都是直接为单个节点训练嵌入,在预测时还需要额外的训练。另外,图上的监督学习算法还有基于核的方法,或基于神经网络的方法,都是最终生成图嵌入。而图卷积网络(GCN)需要完整的拉普拉斯矩阵或邻接表,对于现实情况中的大矩阵来说,通常是很难是实现的。而GraphSage可以视作是GCN的归纳式版本,可以构建出局部计算图。
提出的算法
嵌入向量生成算法
网络有K层,首先假定当前已经学习到K个聚集函数的参数(这个聚集函数的学习方式后面介绍),用来聚集节点的邻居信息。
此外,还有K个权重矩阵W的集合,这个参数也是需要学习的,用来在模型的不同层之间传播信息。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
提出的算法就图上面所示,首先输入参数有图,输入特征(也就是图中每个节点的特征向量),深度K(网络的层数),权重矩阵 W k W^k Wk ,非线性激活函数 σ \sigma σ ,聚集函数还有获取邻居的函数。算法输出就是每个节点的向量表示 Z v Z_v Zv 。主要步骤就是上面的45两行,对所有邻居节点的隐向量进行聚合,生成一个隐向量,然后将邻居节点隐向量和自身隐向量进行拼接,乘参数矩阵W在使用非线性激活函数,得到新的隐向量。最后对所有节点进行归一化,依次传播K层,使用最后一层的隐向量作为节点的最终隐向量表示。
MiniBatch的推广
本文还提出了一个重要的概念,就是对图进行批量学习,作者也给出了上面算法的MiniBatch版本。
重点内容就是前几行,因为一个Batch样本里面只给出了需要生成嵌入向量的样本点,但是因为使用算法聚合的话需要节点对应的邻居向量,前几行主要解决的问题就是,将这些邻居节点的抽出。
邻居的定义
本文还对每一个节点采样了固定大小的邻居节点,而不是是用全部邻居节点,这一点作者解释是可以提高算法的性能。
聚合器
本文作者提出了三种聚合器:Mean、LSTM、Pooling。算法中AGGREGATE函数。
首先最简单的就是Mean的聚合方式,就是将全部邻居节点以及自身的特征向量做平均,乘权重矩阵W后通过非线性激活函数生成聚合后的向量。
第二种方式作者使用了LSTM进行聚合,并且指出了LSTM具有更强的表示能力。但是我们知道,LSTM是一种序列模型,对于输入的序列关系是由很强的依赖的,因此为了消除这种随机性,在输入LSTM时将所有输入打乱,随机输入。
最后一种就是Pooling的方式,操作步骤就是,将每一个邻居输入一个全连接网络,这个网络可以是任意深度的,但是本文只用了一层,将网络的输出做逐元素的max操作(相当于元素级的最大池化吧~~),池化后的向量作为聚合的输出。作者在文中说明了,使用max操作和mean操作没有显著差异。
最后实验部分说明,三种聚合器mean的性能是最差的,LSTM和Pooling的性能相似,但是Pooling的时间消耗更少。
算法参数的学习
损失函数定义如下,其中由两部分组成,前面部分是正样本的损失,意思就是让正样本的相似性尽可能大;后面是负采样得到的负样本的损失,差别主要是里面多了个负号,意思就是数据和负样本之间的相似性尽可能的小。
实验
最后介绍一下作者试验部分的设置,作者使用不同数据集说明了算法的归纳式特性。在一张图的数据集上,评估算法对于未见过点的归纳式学习能力;在多张图的数据集上,评估算法对于未见过图的归纳式学习能力,最终结果表明算法效果好~~~
代码部分还没有整理,有时间整理一下,再把代码放上来~