【intro】GraphSAGE

news2024/11/25 12:45:05

论文

https://arxiv.org/pdf/1706.02216

abstract

大图中节点的低维embedding已经被证明在各种预测任务中非常有用,然而,大多数现有的方法要求在embedding训练期间图中的所有节点都存在;这些先前的方法属于直推式(transductive),不能自然地推广到看不见的节点。这里我们介绍GraphSAGE,一个通用的归纳式(inductive)框架,它利用节点特征信息(例如,文本属性)来有效地为以前未见过的数据生成节点embedding。

这里再整理一下之前提到的GCN和GAT,其中GCN是属于inductive还是transductive似乎都各有簇拥,这里可以参考这篇问答

How GCN can be an inductive method? - #2 by czkkkkkk - Questions - Deep Graph Library

引用这里的一个对话:

- we say GraphSAGE is inductive because it can use sampling methods to predict the label of unseen nodes. On the contrary, GCN is transductive because the graph structure is fixed.

-  Okay I’m confused… Why is there many articles stating that GCN is an inductive learning framework ?

And, even two of you collaborators think it is inductive, check this post How to carry out the batch-wise training while using layer defined in DGL? - Questions - Deep Graph Library 5 (neo and mufeili).
You can also see on this website : Graph Neural Networks (snap-stanford.github.io) 9 which comes from Stanford university and where Jure Leskovec teaches this course, that GCN has an inductive capacity.

From my point of view, I think we can use GCN as an inductive method because it does not change the shape of weight matrixes when we add a new node to the graph. We just need to do get the node’ neighbors times their features times the learned weight matrixes. In the wend we just have to pass GCN(A[new_nodes], X, W_learned), with A[new_nodes] the line allowing to get the node’ neighbors, X the feature matrix and W_learned all the matrixes learned during the training of the model.

I am really confused as you can see, beacause some say it is transductive, others say it is inductive. I know that originally it was tested in an transductive setting, but many sources accord to say it can be used inductively. Maybe it is because everyone does not have the same definition of transductive and inductive, yet they are straightforward definitions…

In the end, I just want to know if a GCN model can, from a node totally unseen (not masked, really unseen) during the training, generate an embedding for this unseen node ?
At the end of my GCN, I want to classify my node as 1 or 0, so I just put a linear layer with a sigmoid activation function.

Thank you for your clarification.

- Thanks for your interest in such a discussion. My understand may not be totally correct since I am not a GNN algorithm expertise. Here are my thoughts. Full graph GCN is not inductive because it only is applied for the whole graph and makes predictions for nodes that can be seen during training. Sampling-based GraphSAGE is inductive because it is able to apply sampling on unseen nodes. So the difference is whether sampling is applied or not. If sampling is available, both GCN and SAGE models can conduct inductive learning.

neural network - What is the model architectural difference between transductive GCN and inductive GraphSAGE? - Data Science Stack Exchange

a

- The main novelty of GraphSAGE is a neighborhood sampling step (but this is independent of whether these models are used inductively or transductively). You can think of GraphSAGE as GCN with subsampled neighbors.

In practice, both can be used inductively and transductively.

The title of the GraphSAGE paper ("Inductive representation learning") is unfortunately a bit misleading in that regard. The main benefit of the sampling step of GraphSAGE is scalability (but at the cost of higher variance gradients).

- GraphSage provides a solution to address the problem DeepWalk embedding technique. As we know that DeepWalk embedding technique use transudative learning to extract features from a graph. If a node is added in the graph then we gain re-run the algorithm to get embedding of all node. So, DeepWalk besed GNN is not suitable for dynamic graphs where the nodes in the graphs are ever-changing. To address the above-mentioned issue, GraphSage is introduced to learn the node representation in inductive way. Specifically, each node is represented by the aggregation of its neighborhood. Thus, even if a new node unseen during training time appears in the graph, it can still be properly represented by its neighboring nodes.

You can learn more following blog: https://towardsdatascience.com/a-gentle-introduction-to-graph-neural-network-basics-deepwalk-and-graphsage-db5d540d50b3

为什么GCN是Transductive的? - 知乎

总结来说就是最原始的方法看起来就是transductive的,但是也可以某种程度上认为是inductivde的。

GAT就没什么疑问了,属于铁inductive了。

introduction

对于一个大图,低维的向量embedding用于特征输入已经被证明在大量的预测和图分析任务中非常有用了。这些在节点embedding方法背后的基本思想都是使用降维技术将节点图邻域的高维信息提取成密集的向量嵌入。然后,这些节点嵌入可以馈送到下游机器学习系统,并帮助完成节点分类、聚类和链接预测等任务。

然而,以前的工作主要集中在从单个固定图中嵌入节点,并且许多现实世界的应用需要为未见过的节点或全新的(子)图快速生成embedding。生成节点embedding的归纳方法也有助于具有相同特征形式的图的泛化:例如,可以在源自模式生物的蛋白质-蛋白质相互作用图上训练embedding生成器,然后使用训练好的模型轻松地为收集到的新生物数据生成节点嵌入。

GraphSAGE (SAmple and aggreGatE),用于归纳节点嵌入。与基于矩阵分解的embedding方法不同,GraphSAGE利用节点特征(例如,文本属性、节点概要信息、节点度)来学习一个embedding函数,该函数可以推广到不可见的节点。通过在学习算法中加入节点特征,可以同时学习到每个节点邻域的拓扑结构以及节点特征在邻域中的分布。

GraphSAGE没有为每个节点训练一个不同的embedding向量,而是训练了一组聚合器函数,这些函数学习从节点的局部邻域聚合特征信息(图1)。每个聚合器函数从远离给定节点的不同跳数或搜索深度聚合信息。在测试或推理时,使用训练好的系统通过应用学习到的聚合函数来生成完全不可见节点的embedding。

原始的GCN算法是为transductive环境下的半监督学习而设计的,精确的算法要求在训练过程中知道完整的图拉普拉斯。GraphSAGE算法的一个简单变体可以看作是GCN框架到归纳设置的扩展。

proposed method: GraphSAGE

关键思想:如何从节点的邻居那里聚合信息(比如周围节点的度、文本属性)。

embedding generation(i.e., forward propagation) algorithm

假设我们已经训练好模型了,即假设我们已经学到K聚合函数(记作AGGREGATE_k, \forall k \in \{1, \cdot \cdot \cdot , K \})的参数了,这里聚合的信息来源于节点的邻居,同样还学到了一系列权重矩阵(记作W^k, \forall k \in \{1,\cdot \cdot \cdot ,K \}),用于在模型的不同层或“搜索深度”之间传播信息。

algorithm 1背后的直觉是,在每次迭代或搜索深度时,节点聚集来自其本地邻居的信息,并且随着该过程的迭代,节点逐渐从图的进一步到达处获得越来越多的信息。

algorithm 1描述的是当整张图(G=(V,E))、所有节点的特征(x_v, \forall v \in V)被提供给输入时,产生embedding的过程。

关于邻居的定义:在这篇论文中,同一采样固定大小的邻域,而不是像algorithm 1 那样使用所有的邻居->这样就可以保证每个batch的计算量固定。->把N(v)定义成一个固定大小的、统一的集合\{u \in V: (u,v) \in \varepsilon \}的采样,然后我们在每次迭代的时候,都抽取不同的统一的sample(个人理解这里的不同指的是节点不同,这里的统一指的是类似归一化之后的结果)

learning the parameters of GraphSAGE

为了在一个完全非监督的设置下学习有用的、可以预测的表示,对输出表示(应该就是指embedding)采用graph-based的损失函数z_u, \forall u \in V,用来微调权重矩阵W^k, \forall k \in \{ 1, \cdot \cdot \cdot , K \},通过随机梯度下降调整聚合函数的参数。这一graph-based损失函数让相邻的节点能有类似的表示(这个好像还挺常见的,比较general的GNN似乎就是希望相邻的节点更相似),同时强制每个节点的表示是与众不同的。

J_G(z_u) = -log(\sigma (z_u^T z_v))-Q\cdot \mathbb{E}_{v_n \sim P_{n(v)}} log(\sigma (-z_u^T z_{v_n}))

这里v是一个出现在节点u固定长度的random walk的附近的节点,\sigma是sigmoid函数,P_{n}表示负样本分布,Q表示负样本的个数。与之前的embedding方法不同,我们放到损失函数中的z_u表示是由节点的局部邻域中包含的特征生成的,而不是为每个节点训练唯一的embedding。

aggregator

节点的邻居没有自然的顺序;因此,algorithm 1中的聚合函数必须在一个无序的向量集合上操作。理想情况下,聚合器函数应该是对称的(即,其输入的不变操作),同时仍然是可训练的,并保持较高的表示能力。聚合函数的对称性保证了我们的神经网络模型可以训练并应用于任意有序的节点邻域特征集。

论文介绍了三种聚合器:mean aggregator,LSTM aggregator,pooling aggregator。

mean aggregator

\{ h_u^{k-1} , \forall u \in N(v) \}中向量的元素均值。mean聚合器几乎等同于在tranductive GCN框架中使用的卷积传播规则。可以通过用以下代码替换algorithm 1中的第4行和第5行,推导出GCN方法的归纳变体:

h_v^k \leftarrow \sigma(W\cdot MEAN(\{ h_v ^{k-1}\} \cup \{ h_u^{k-1}, \forall u \in N(v) \} ))

称这种改进的基于均值的聚合器为卷积,因为它是局部谱卷积的粗略线性逼近,这个卷积聚合器和我们提出的其他聚合器之间的一个重要区别是,它不执行算法第5行中的连接操作。->这种卷积聚合器连接了节点在前一层的表示h_v^{k-1}以及聚合的邻居向量h_{N(v)} ^ k。这种连接可以被看作是GraphSAGE在不同的“搜索深度(search depths)”或者“层(layers)”之间的一种简单的“skip-connection”

LSTM aggregator

基于LSTM架构的更复杂的聚合器。与均值聚合器相比,lstm具有更强的表达能力。然而,重要的是要注意lstm不是固有对称的(即,它们不是排列不变的),因为它们以顺序的方式处理它们的输入。通过简单地将lstm应用于节点邻居的随机排列,使得lstm能够在无序集合上运行

pooling aggregator

pooling 聚合器是对称的、可训练的在这种池化方法中,每个邻居的向量通过全连接神经网络独立馈送,在此转换之后,对跨邻居集的聚合信息应用元素最大池操作:

AGGREGATE_k^{pool} = max( \{ \sigma(\textbf{W}_{pool} \mathbf{h}_{u_i}^k + \mathbf{b} ) , \forall u_i \in N(v) \} )

这里的max是元素层面上的求最大值,\sigma是非线性激活函数。原则上,在最大池化之前应用的函数可以是任意深度的多层感知器,但我们在这项工作中专注于简单的单层架构。通过对每个计算特征应用max-pooling算子,该模型有效地捕获了邻域集的不同方面。还要注意的是,原则上,任何对称向量函数都可以用来代替最大算子(例如:(元素的均值)。文章指出在实验中没有发现最大值和均值之间显著的区别,因此文章中采用的是最大值方法。

附录mini batch的伪代码。

下面是附录一些其他的博客中比较值得关注的内容

GraphSage 算法原理介绍与源码浅析_珍妮的算法之路-CSDN博客

GraphSage 属于 Inductive learning 算法, 它学习一种聚合函数, 通过聚合节点邻居的特征信息来学习目标节点本身的 embedding 表达. 它的主要步骤就记录在它的名字中: Sample 与 Aggregate. 其中 Sample 阶段通过随机采样获取多跳邻居; Aggregate 阶段聚合邻居节点特征生成目标节点自身的 embedding. 以聚合 2 跳邻居为例, 它将首先聚合 2 跳邻居的特征生成 1 跳邻居的 embedding, 之后再聚合 1 跳邻居的 embedding 来生成节点本身的 embedding. 由于生成 1 跳邻居 embedding 时, 已经包含了 2 跳邻居的特征信息, 此时目标节点也将获得 2 跳邻居的特征信息. 论文中的图示形象地展示了这一过程:

官方开源代码:GitHub - williamleif/GraphSAGE: Representation learning on large graphs using stochastic graph convolutions.

采样:

采样时按照k=K,\cdot \cdot \cdot , 1进行,聚合时按照k=1,\cdot \cdot \cdot ,K进行

这篇博客的作者在这里给了非常详细的图解,请直接移步原博客阅读。

图神经网络10-GraphSAGE论文全面解读 - 知乎

上面是为红色的目标节点生成embedding的过程。k表示距离目标节点的搜索深度,k=1就是目标节点的相邻节点,k=2表示目标节点相邻节点的相邻节点。 对于上图中的例子:

  • 第一步是采样,k=1采样了3个节点,对k=2采用了5个节点;
  • 第二步是聚合邻居节点的信息,获得目标节点的embedding;
  • 第三步是使用聚合得到的信息,也就是目标节点的embedding,来预测图中想预测的信息;

GraphSAGE的目标是基于参数h的相邻节点的某种组合来学习每个节点的表示形式。 

稍微回顾下,Graph中的每个节点都可以拥有自己的特征向量,该特征向量由X节点特征得到。现在让我们假设每个节点的所有特征向量都具有相同的大小。一层GraphSAGE可以运行k次迭代-因此,每k次迭代,每个节点都有一个节点表示h。

因为每个节点都可以由它们的邻居近似表示,所以节点的嵌入可以用其邻近节点嵌入向量的某种组合来表示。 通过一轮GraphSAGE算法,我们将获得节点A的新表示形式。原始图中的所有节点都遵循相同的过程。

步骤1 Aggregate

aggregator 的作用是把一个向量的集合转换成向量,也就是聚合。和其他机器学习任务中的数据(如图像,文本等)不同,图中的节点是没有顺序的(node’s neighbors have no natural ordering),aggregator function操作的是一个无序的向量集合\{ h_u^{k-1} , \forall u \in N(v) \}。其中N(v)代表了节点v的邻居节点集合。 这篇文章尝试了多种aggregator function: 

  • Mean aggregator:显然对向量集合,对应元素取均值是最直接的想法。
  • LSTM aggregator:和mean aggregator相比,LSTM有更大的表达能力。但是LSTM不符合symmetric的性质,输入是有顺序的。所以把相邻节点的向量集合随机打乱顺序,然后作为LSTM的输入。
  • Pooling aggregator:尝试了pooling做aggregator, 所有相邻节点的向量共享权重,先经过一个非线性全连接层,然后做max-pooling.

GraphSAGE算法遵循两步过程。由于它是迭代的,因此存在一个初始化步骤,该步骤将所有初始节点嵌入向量设置为其特征向量。(k从1…K开始迭代)

步骤2 Update

在基于节点v的邻居获得聚合表示后,请使用其先前表示和聚合表示的组合来更新当前节点v。该f_update功能为任何可微函数,可以再次,是一样简单的平均函数,或复杂如神经网络。

根据节点v的邻域聚合表示和节点v的先前表示,为节点v创建更新的表示:

(讲道理,读到这里觉得有一个问题,按照这么划分,那么应该是三个步骤,第一步不应该是做sample吗?然后又有了一个新问题,这里的sample是一旦指定就固定了还是每次迭代都要重新sample呢?我倾向于会随机sample,毕竟输入可能是没有顺序的。

源码中写的是“Assumes that adj lists are padded with random re-sampling”所以我也更倾向于自己的理解,求同存异吧)

GraphSAGE:我寻思GCN也没我牛逼 - 知乎

去学习一个节点的信息是怎么通过其邻居节点的特征聚合而来的。 学习到了这样的“聚合函数”,而我们本身就已知各个节点的特征和邻居关系,我们就可以很方便地得到一个新节点的表示了。

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

假设我们要聚合K次,则需要有K个聚合函数(aggregator),可以认为是N层。 每一次聚合,都是把上一层得到的各个node的特征聚合一次,在假设该node自己在上一层的特征,得到该层的特征。如此反复聚合K次,得到该node最后的特征。 最下面一层的node特征就是输入的node features。

(好图)

(好图*2)

设置一个定值,每次选择邻居的时候就是从周围的直接邻居(一阶邻居)中均匀地采样固定个数个邻居。虽然在聚合时仅仅聚合了一个节点邻居的信息,但该节点的邻居,也聚合了其邻居的信息,这样,在下一次聚合时,该节点就会接收到其邻居的邻居的信息,也就是聚合到了二阶邻居的信息了。

在GraphSAGE的实践中,作者发现,K不必取很大的值,当K=2时,效果就灰常好了,也就是只用扩展到2阶邻居即可。至于邻居的个数,文中提到S1×S2<=500,即两次扩展的邻居数之际小于500,大约每次只需要扩展20来个邻居即可

(这篇文章的评论区也很值得看,请移步原文)

其他:

【Graph Neural Network】GraphSAGE: 算法原理,实现和应用 - 知乎

[论文笔记]:GraphSAGE:Inductive Representation Learning on Large Graphs 论文详解 NIPS 2017_graphsage: inductive graph representation learning-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1652519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中仕公考:非应届生能考军队文职吗?

军队文职考试的招生对象主要针对普通高等学校的毕业生以及社会人才&#xff0c;报考条件中并没有限制考生必须是应届毕业生。所以&#xff0c;往届毕业生也是具备报考资格的&#xff0c;只需其满足相关的申请条件即可。 报考人员可大致分为三类&#xff1a;普通高校毕业生、社…

LabelImg下载及目标检测数据标注

为什么这一部分内容这么少会单独拎出来呢&#xff0c;因为后期会接着介绍YOLOv8中的其他任务&#xff0c;会使用其他软件进行标注&#xff0c;所以就单独区分开来每一个任务的标注方式了。 这一部分就介绍目标检测任务的标注&#xff0c;数据集是我从COCO2017Val中抽出来两类&a…

Edge的使用心得和深度探索-Sider: ChatGPT 侧边栏

作为一款备受欢迎的网络浏览器&#xff0c;Microsoft Edge在用户体验和功能方面都有着诸多优势。在长期的使用中&#xff0c;我总结出了三条使用心得&#xff0c;同时也发现了三个能够极大提高效率的功能。让我们一起深度探索Edge的潜力吧&#xff01; 使用心得&#xff1a; 界…

如果你已经掌握了C语言和C++,想要学习QT

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Qt的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;我认为这并不是难事。对于我来说&#xff0c;我…

4000定制网站,因为没有案例,客户走了

接到一个要做企业站点的客户&#xff0c;属于定制开发&#xff0c;预算4000看起来是不是还行的一个订单&#xff1f; 接单第一步&#xff1a;筛客户 从客户询盘的那一刻开始就要围绕核心要素&#xff1a;预算和工期&#xff0c;凡是不符合预期的一律放掉就好了&#xff0c;没必…

5月的现货黄金价格还会涨吗

近期美国经济陷入滞胀的预期升温&#xff0c;市场对美联储年内降息的预期有所走低&#xff0c;然而目前美国10年期国债的实际收益率已处于2%左右的历史高位&#xff0c;降息空间最终还是打开&#xff0c;带来实际利率的趋势下行——在去全球化的背景下&#xff0c;美元信用持续…

分布式锁之-mysql

使用mysql实现分布式锁的方式这里演示两种&#xff1a; 1:基于 MySQL 实现的乐观锁 2:基于 MySQL 实现的悲观锁 数据库脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for product_stock -- -----------------------…

Redis如何避免数据丢失?——AOF

目录 AOF日志 1. 持久化——命令写入到AOF文件 写到用户缓冲区 AOF的触发入口函数——propagate 具体的实现逻辑——feedAppendOnlyFile 从用户缓冲区写入到AOF文件(磁盘&#xff09; 函数write、fsync、fdatasync Redis的线程池 AOF文件的同步策略 触发的入口函数——…

懒洋洋作业讲解

懒洋洋作业讲解 环境配置 1.软件下载&#xff1a;DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 2.软件介绍 HBuilder是由DCloud&#xff08;数字天堂&#xff09;推出的一款面向HTML5的Web开发…

Apple OpenELM设备端语言模型

Apple 发布的 OpenELM&#xff08;一系列专为高效设备上处理而设计的开源语言模型&#xff09;引发了相当大的争论。一方面&#xff0c;苹果在开源协作和设备端AI处理方面迈出了一步&#xff0c;强调隐私和效率。另一方面&#xff0c;与微软 Phi-3 Mini 等竞争对手相比&#xf…

Leetcode—724. 寻找数组的中心下标【简单】

2024每日刷题&#xff08;129&#xff09; Leetcode—724. 寻找数组的中心下标 实现代码 class Solution { public:int pivotIndex(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);int prefix 0;for(int i 0; i < nums.size(); i) {i…

软件开发的 20 条基本原则:LoD、SoC、SOLID 等

Introduction 介绍 Software design principles are the foundation of software development. As a software engineer, you can find them in your work tools, languages, frameworks, paradigms, and patterns. They are the core pillars of “good” and “readable” co…

各行业预约上门服务小程序源码系统 在线提交表单+自主接单 带完整的安装代码包以及搭建教程

在当今数字化快速发展的时代&#xff0c;传统行业纷纷寻求与互联网的结合&#xff0c;以提升服务效率和用户体验。为了满足这一需求&#xff0c;罗峰给大家分享一款针对各行业预约上门服务的小程序源码系统。该系统集在线提交表单、自主接单等功能于一体&#xff0c;并附带完整…

揭秘依赖注入:软件开发人员的基本指南

Dependency injection (DI) is a design pattern and programming technique to manage dependencies between different components. 依赖注入&#xff08;DI&#xff09;是一种用于管理不同组件之间依赖关系的设计模式和编程技术。 In DI, the dependencies of a class or ot…

厚德提问大佬答3:让AI绘画更有效率

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…

深入分析网络智能摄像头的RTSP协议安全风险

本文为转载&#xff0c;原作者&#xff1a;山石网科安全技术研究院 网络摄像头作为现代安防体系的关键组成部分&#xff0c;已经广泛应用于各类场所&#xff0c;包括交通枢纽、教育机构、企业办公区、零售商场等公共和私人领域。它们主要负责提供实时视频监控&#xff0c;以加…

责任链模式和观察者模式

1、责任链模式 1.1 概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导…

【微积分听课笔记】全微分,二元极值,Double Integral

6.6 二元函数的极值_哔哩哔哩_bilibili 此笔记为听课笔记&#xff0c;宋浩老师微积分~ 最近诸事缠身&#xff0c;会有种会不会只做一件事好些。实际上&#xff0c;关键在于动力&#xff0c;我不可能每次都准备充分。动力&#xff0c;分配&#xff0c;这是目前进入大学我正在学…

用户至上!探索7种常用的用户体验研究方法

用户体验研究是产品开放过程中的重要组成部分&#xff0c;优秀的产品设计与高质量的用户体验是不可分割的。对于产品开发&#xff0c;选择合适的用户体验研究方法在很大程度上决定了产品的使用效果。本文全面阐述了用户体验研究、用户体验研究的重要性和用户体验研究方法&#…