阅读笔记--GraphSAGE

目录

  • 一、简介
  • 二、GraphSAGE
    • 2.1 概览
      • GraphSAGE:Graph Sample and aggreGatE
      • 三个步骤:
    • 2.2 Embedding的生成
      • Forward propagation:
        • Neighborhood definition
    • 2.3 Learning the parameters of GraphSAGE
      • 基于图的无监督损失
      • 基于图的有监督损失
    • 2.4 聚合函数的选择
      • 概览
      • Mean aggregator
      • LSTM aggregator
      • Pooling aggregator
  • 三、总结


一、简介

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

二、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:

阅读笔记--GraphSAGE_第1张图片

Neighborhood definition

阅读笔记--GraphSAGE_第2张图片

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

2.3 Learning the parameters of GraphSAGE

基于图的无监督损失

基于图的损失函数倾向于使得相邻的顶点有相似的表示,但这会使相互远离的顶点的表示差异变大:
阅读笔记--GraphSAGE_第3张图片

基于图的有监督损失

监督学习形式根据任务的不同直接设置目标函数即可,如最常用的节点分类任务使用交叉熵损失函数。
阅读笔记--GraphSAGE_第4张图片

2.4 聚合函数的选择

概览

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

Mean aggregator

阅读笔记--GraphSAGE_第5张图片

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_第6张图片

三、总结

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

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

你可能感兴趣的:(GNN)