GraphSAGE 论文阅读

GraphSAGE 论文阅读

Abstract

存在问题:需要all nodes in graph during training embeddings(所有顶点在训练embedding的时候都出现),本质是transductive(从特殊到特殊) 而inductive 是从特殊到一般,再到特殊的方法。提出GraphSAGE一种inductive framework,创新点就是,之前都是保存embedding的映射结果,现在保存生成embedding的function 或者 框架。 利用的是顶点的特征信息,从local neighbor 采样 并且 聚合顶点特征,而不是为每个顶点生成embedding。

使用一个PPI 多图数据集,可以泛化到未见过的图上。

Introduction

低维的embedding useful 的原因 使用降维技术 把关于邻居节点信息的高维信息 转化为一个低维vector。作为后续系统的输入。

注意:本篇论文发于2017年,比较对象是:对每个节点的embedding 使用矩阵分解来优化,以及GCN(have only been applied in the transductive setting with fixed graphs)比较的一些论文 类似于下方:

S. Cao, W. Lu, and Q. Xu. Grarep: Learning graph representations with global structural
information. In KDD, 2015.

T. N. Kipf and M. Welling. Semi-supervised classification with graph convolutional networks.
In ICLR, 2016.

  • 传统transductiv局限性:

    现实世界中固定的图较少同时要求快速地对未见过的结点进行嵌入

    是基于全图的邻接矩阵以及拉普拉斯算子计算的embedding,添加一个点的话,要重新计算A导致重新更新所有点的embedding,完全重新训练所有的节点。

  • 传统GCN问题:

    GCN算法要求在训练过程中全图的拉普拉斯算子已知,对于一个新来的、从未见过(unseen)的节点,它需要将它加入图中,重新计算A和D,然后输入网络进行训练,由此才能得到新来的节点的embedding。所以其灵活性较差,而且不能拓展到大型图或者不断变化的图

  • GraphSAGE的思路:

    新增节点会改变原有节点的表示,那就不得到一个固定embedding,而是改成学习一种embedding的计算方式。 学习的是一个节点的embedding是怎么通过邻居节点特征聚合而来。 当知道节点和邻居,就可以得到一个新节点的embedding

    GCN等transductive的方法,学到的是每个节点的一个唯一确定的embedding; 而GraphSAGE方法学到的node embedding,是根据node的邻居关系的变化而变化的,也就是说,即使是旧的node,如果建立了一些新的link,那么其对应的embedding也会变化,而且也很方便地学到。

Related Work

Factorization-based embedding approaches

​ 使用 random walk + MF 学习embedding

Supervised learning over graphs

Graph convolutional networks

Proposed method: GraphSAGE

GraphSAGE的核心:GraphSAGE不是试图学习一个图上所有node的embedding,而是学习一个为每个node产生embedding的映射

训练了一组聚合函数,学习如何从一个顶点的局部,聚合邻居信息。

给出了3.1一个算法embedding generation(forwad propagation),假设所有参数已经学习到了。

3.2给出GraphSAGE的参数如何使用SGD+BP学习到

GraphSAGE = Graph SAmple and aggreGatE

image-20211031181521293

  1. 对每个顶点进行邻居节点采样,每个节点度不同,采样固定数量邻居。

  2. 根据聚合函数聚合邻居节点信息,不同深度定义不同聚合函数

  3. 使用聚合得到的信息来预测图中想预测的信息;

Embedding generation algorithm

生成节点embedding的前向传播算法

image-20211031191758431

Input:

  • G = ( V , E ) , K G = (V,E),K G=(V,E),K是网络层数,表示能够聚合几阶邻接点
  • X v X_v Xv表示节点v的特征向量作为输入,这里是全部的节点
  • h u k − 1 h_u^{k-1} huk1表示第k-1层节点v的邻居节点u的embedding
  • h v k h^k_v hvk表示第k层 节点v的特征表示embedding
  • h N ( v ) k h^k_{N(v)} hN(v)k第k层,节点v的所有邻居节点的特征表示embedding,注意的是每一层的节点邻居都是采样的,不是全部参与(不够就放回重复采样)就固定一个size
  • $AGGREGATE_{k} $表示可微分的聚合函数,这篇文章后面尝试了多种方法
  • W k W_k Wk是权重矩阵,用来进行层之间的传递, C O N C A T CONCAT CONCAT级联
  • 当加入一个新的节点a,只需要直到自身特征以及相邻节点,就可以得到embedding,不需要重新训练得到其他所有节点的embedding,也可以选择进行重新训练,但需要保存所有节点深度为k的表示,用于从 h a 0 h^0_a ha0生成 h a 1 . . . h a k h^1_a...h^k_a ha1...hak
  • neighborhood function N : v → 2 v N:v \rightarrow 2^v N:v2v 意思是对每个顶点采样一定数量的邻居顶点作为待聚合信息的顶点 即采样数量为 S S S,若顶点邻居数少于 S S S,则采用有放回的抽样方法,直到采样出 S S S个顶点。若顶点邻居数大于 S S S,则采用无放回的抽样。(即采用有放回的重采样/负采样方法达到 S S S)

output:

  • z v = h v k z^v=h^k_v zv=hvk 最后得到的embedding

例子:

image-20211031200211328

采样邻居数量为2,深度为2,第0层选v的两个邻接点,然后第1层据此得到,同时邻居u也聚合第0层两个邻居的信息。固定长度的随机游走其实就是随机选择了固定数量的邻居

Relation to theWeisfeiler-Lehman Isomorphism Test

和同构测试的相关性

对于算法1,如果
(1) K = V K = V K=V
(2)设置权重矩阵为单位矩阵
(3)使用一个适当的哈希函数作为一个聚合器(没有非线性)
那么算法1是Weisfeiler-Lehman的实例(WL)同构测试,也称为“naive vertex refinement”[Weisfeiler-lehman graph kernels]。

Aggregator Architectures

选聚合函数,希望聚合函数是对称的,即不影响顺序。

Mean aggregator

h v k = σ ( W ∗ M E A N ( { h v k − 1 } ∪ { h v k − 1 , ∀ v ∈ N ( u ) } ) ) h_v^k =\sigma(W*MEAN(\{h_v^{k-1}\}\cup\{h^{k-1}_v,\forall v\in N(u)\} )) hvk=σ(WMEAN({hvk1}{hvk1,vN(u)}))

把目标节点和邻居节点的k-1层拼接起来,,对每个维度进行一个mean操作,最后sigmoid,对应于伪代码中:

image-20211031201433462

LSTM aggregator

Long short-term memory

但是LSTMs不是symmetric(对称的),所以不具有排列不变性,因为和序列先后有关。因此,需要先对邻居节点随机顺序,然后将邻居序列的embedding作为LSTM的输入

Pooling aggregator

h N ( v ) k = A G G R E G A T E k p o o l = m a x ( { σ ( W p o o l ∗ h u k − 1 + b ) , ∀ v ∈ N ( v ) } ) h v k = σ ( W k ∗ C O N C A T ( h v k − 1 , h N ( v ) k ) ) h^k_{N(v)} = AGGREGATE^{pool}_k =max(\{\sigma(W_pool*h^{k-1}_u+b),\forall v\in N(v)\}) \\ h^k_{v} = \sigma(W^k * CONCAT(h^{k-1}_v,h_{N(v)}^k)) hN(v)k=AGGREGATEkpool=max({σ(Wpoolhuk1+b),vN(v)})hvk=σ(WkCONCAT(hvk1,hN(v)k))

Learning the parameters of GraphSAGE

文章分别介绍了无监督学习和监督学习两种方式。

基于图的无监督Loss:

image-20211031202928585

  • z u z_u zu是最后的embedding
  • v是u随机采样(walk)得到的邻居
  • Q是负采样的数目
  • P n ( v ) P_n(v) Pn(v)是负采样的概率分布
  • embedding之间的相似度通过向量内积得到

所有节点的embedding都是通过这整个流程得到的不会单独计算的。

基于图的有监督Loss:

节点分类任务使用交叉熵损失函数。(具体定)

** W k W^k Wk**的学习:是动态embedding的核心,因为保存了从高维到低维的映射function

现在,如果想得到一个点的embedding,只需要输入节点的特征向量,经过卷积(利用已经训练好的 W k W^k Wk以及特定聚合函数聚合neighbor的属性信息),就产生了节点的embedding。

Experiments

总结

GraphSAGE的核心:GraphSAGE不是试图学习一个图上所有node的embedding,而是学习一个为每个node产生embedding的映射

为什么GCN是transductive,为什么要把所有节点放在一起训练?

不一定要把所有节点放在一起训练,一个个节点放进去训练也是可以的。无非是如果想得到所有节点的embedding,那么GCN可以把整个graph丢进去,直接得到embedding,还可以直接进行节点分类、边的预测等任务

其实,通过GraphSAGE得到的节点的embedding,在增加了新的节点之后,旧的节点也需要更新,这个是无法避免的,因为,新增加点意味着环境变了,那之前的节点的表示自然也应该有所调整。只不过,对于老节点,可能新增一个节点对其影响微乎其微,所以可以暂且使用原来的embedding,但如果新增了很多,极大地改变的原有的graph结构,那么就只能全部更新一次了。

从这个角度去想的话,似乎GraphSAGE也不是什么“神仙”方法,只不过生成新节点embedding的过程,实施起来相比于GCN更加灵活方便了。在学习到了各种的聚合函数之后,其实就不用去计算所有节点的embedding,而是需要去考察哪些节点,就现场去计算,这种方法的迁移能力也很强,在一个graph上学得了节点的聚合方法,到另一个新的类似的graph上就可以直接使用了
角度去想的话,似乎GraphSAGE也不是什么“神仙”方法,只不过生成新节点embedding的过程,实施起来相比于GCN更加灵活方便了。在学习到了各种的聚合函数之后,其实就不用去计算所有节点的embedding,而是需要去考察哪些节点,就现场去计算,这种方法的迁移能力也很强,在一个graph上学得了节点的聚合方法,到另一个新的类似的graph上就可以直接使用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tototototorres

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值