【Graph Neural Network】 GraphSAGE 基本原理与tensorflow2.0实现


GCN是一种利用图结构和邻居顶点属性信息学习顶点Embedding表示的方法,GCN是直推式学习(只能在一个已知的图上进行学习),不能直接泛化到未知节点,当网络结构改变以及新节点的出现,直推式学习需要重新训练(复杂度高且可能会导致embedding会偏移),很难落地在需要快速生成未知节点embedding的机器学习系统上。

**GraphSAGE(Graph SAmple and aggreGatE)**是一种能利用顶点的属性信息高效产生未知顶点embedding的一种归纳式(inductive)学习的框架。

与GCN类似,其核心思想:学习一个映射 f ( . ) f(.) f(.),通过该映射图中的节点 v i v_i vi可以聚合它自己的特征 x i x_i xi与它的邻居特征 x j    ( j ∈ N ( v i ) ) x_j \;(j \in N(v_i)) xj(jN(vi))来生成节点的新 v i v_i vi表示。 区别在于并未利用所有的邻居节点,聚合的方式也不同。GraphSAGE框架的核心是如何聚合节点邻居特征信息。

GraphSAGE 前向传播算法

下图是GraphSAGE的学习过程:

在这里插入图片描述

主要步骤如下:

(1)对邻居随机采样

(2)使用聚合函数将采样的邻居节点的Embeddin进行聚合,用于更新节点的embedding。

(3)根据更新后的embedding预测节点的标签。

更新过程:

(1)为了更新红色节点,首先在第一层(k=1)我们会将蓝色节点的信息聚合到红色节点上,将绿色节点的信息聚合到蓝色节点上。所有的节点都有了新的包含邻居节点的embedding。

(2)在第二层(k=2)红色节点的embedding被再次更新,不过这次用的是更新后的蓝色节点embedding,这样就保证了红色节点更新后的embedding包括蓝色和绿色节点的信息。这样,每个节点又有了新的embedding向量,且包含更多的信息。

算法细节如下:

在这里插入图片描述

需要注意以下几点:

1、 h v 0 h_v^0 hv0是每个节点的初始embedding特征向量

2、当 k = 1 k=1 k=1时,遍历所有的节点,求 h v 1 h_v^1 hv1,也就是算法的4-5行,也是最核心的部分。具体的:

(1)先对当前节点 v v v的邻居进行采样,得到邻居节点的集合 N ( v ) \mathcal N(v) N(v),对所有的邻居节点 { u ∈ N ( v ) } \{ u \in \mathcal N(v)\} {uN(v)} k − 1 k-1 k1层的embedding: h u ( k − 1 ) = h u 0 h_u^{(k-1)}=h_u^{0} hu(k1)=hu0 进行聚合,得到 v v v的邻居节点的代表向量 h N ( v ) k h_{\mathcal N(v)}^k hN(v)k。如何聚合后面会提到。

(2)concat操作,将的、邻居节点的代表向量 h N ( v ) k h_{\mathcal N(v)}^k hN(v)k 与自身的 h v k − 1 = h v 0 h_v^{k-1}=h_v^0 hvk1=hv0 进行连接,然后与权重变量 W W W相乘,并进行激活。其中 W W W用于控制在模型的不同层或“搜索深度”之间传播信息。

这样求出的 h v 1 h_v^1 hv1就包含了邻居节点的信息。以此类推,当求 h v 2 h_v^2 hv2时会用到 h u 1 , u ∈ N ( v ) h_u^1,u \in \mathcal N(v) hu1,uN(v),而从上面的描述可知 h u 1 h_u^1 hu1已经包含了 u u u的邻居节点信息。所以在每次迭代或搜索深度时,节点从它们的本地邻居处聚集信息,随着这个过程的迭代,节点从图的更远处获得越来越多的信息。

3、随着K增大,节点可以聚合更多的信息,K既是聚合器的数量,也是权重矩阵的数量,还是网络的层数,这是因为每一层网络中聚合器和权重矩阵是共享的。网络的层数可以理解为需要最大访问到的邻居的跳数(hops),比如在figure 1中,红色节点的更新拿到了它一、二跳邻居的信息,那么网络层数就是2。

采样算法&聚合(aggragator)操作

采样算法

GraphSAGE采用了定长抽样的方法。先确定需要采样的邻居数 N N N,然后采用有放回的重采样/负采样的方法达到 N N N,这样做可以方便后期训练。

聚合(aggragator)操作

聚合方式有:平均、GCN归纳式、LSTM、pooling聚合器。(因为邻居没有顺序,聚合函数需要满足排序不变量的特性,即输入顺序不会影响函数结果)

1,平均聚合:对邻居节点的embedding中的每个维度取平均,然后与自身节点的embedding拼接后进行非线性变换。
h N ( v ) k = mean ⁡ ( { h u k − 1 , u ∈ N ( v ) } ) h v k = σ ( W k ⋅ CONCAT ⁡ ( h v k − 1 , h N ( u ) k ) ) \begin{array}{c} h_{N(v)}^{k}=\operatorname{mean}\left(\left\{h_{u}^{k-1}, u \in N(v)\right\}\right) \\ h_{v}^{k}=\sigma\left(W^{k} \cdot \operatorname{CONCAT}\left(h_{v}^{k-1}, h_{N(u)}^{k}\right)\right) \end{array} hN(v)k=mean({huk1,uN(v)})hvk=σ(WkCONCAT(hvk1,hN(u)k))
2,归纳式聚合:直接对目标节点和所有邻居emebdding中每个维度取平均,后再非线性转换。
h v k = σ ( W k ⋅ mean ⁡ ( { h v k − 1 } ∪ { h u k − 1 , ∀ u ∈ N ( v ) } ) h_{v}^{k}=\sigma\left(W^{k} \cdot \operatorname{mean}\left(\left\{h_{v}^{k-1}\right\} \cup\left\{h_{u}^{k-1}, \forall u \in N(v)\right\}\right)\right. hvk=σ(Wkmean({hvk1}{huk1,uN(v)})
3,LSTM 聚合

LSTM函数不符合“排序不变量”的性质,需要先对邻居随机排序,然后将随机的邻居序列embedding作为LSTM输入。

4,Pooling聚合:先对每个邻居节点上一层embedding进行非线性转换,再按维度应用 max/mean pooling,捕获邻居集上在某方面的突出的/综合的表现 以此表示目标节点embedding。
h N ( v ) k = max ⁡ ( { σ ( W pool h u i k + b ) } , ∀ u i ∈ N ( v ) ) h v k = σ ( W k ⋅ CONCAT ⁡ ( h v k − 1 , h N ( u ) k − 1 ) ) \begin{aligned} h_{N(v)}^{k} &=\max \left(\left\{\sigma\left(W_{\text {pool}} h_{u i}^{k}+b\right)\right\}, \forall u_{i} \in N(v)\right) \\ h_{v}^{k} &=\sigma\left(W^{k} \cdot \operatorname{CONCAT}\left(h_{v}^{k-1}, h_{N(u)}^{k-1}\right)\right) \end{aligned} hN(v)khvk=max({σ(Wpoolhuik+b)},uiN(v))=σ(WkCONCAT(hvk1,hN(u)k1))

参数学习

GraphSAGE的参数主要是聚合器的参数和权重变量 W W W。为了获得最优参数就得定义合适的损失函数。

1、有监督学习

可以使用每个节点的预测label和真实label的交叉熵作为损失函数。

2、无监督学习

在这里插入图片描述

其中: z u z_u zu是节点 u u u通过GraphSAGE生成的embedding;

v v v是节点 u u u随机游走可到达的"邻居"节点。

v n ∼ p n ( v ) v_n \sim p_n(v) vnpn(v)表示 v n v_n vn是从节点u的负采样分 p n ( v ) p_n(v) pn(v)的采样。负采样指我们还需要一批不是 u u u邻居的节点作为负样本。

​ Q为采样样本数。

​ embedding之间相似度通过向量点积计算得到。

如何理解这个损失函数?

先看损失函数的蓝色部分,当节点 u、v 比较接近时,那么其 embedding 向量 z u , z v z_u, z_v zu,zv的距离应该比较近,因此二者的内积应该很大,经过σ函数后是接近1的数,因此取对数后的数值接近于0。

再看看紫色的部分,当节点 u、v 比较远时,那么其 embedding 向量 z u , z v z_u, z_v zu,zv的距离应该比较远,在理想情况下,二者的内积应该是很大的负数,乘上-1后再经过σ函数可以得到接近1的数,因此取对数后的数值接近于0。

基于tensorflow2.0实现Graph SAGE

主要实现图的无监督学习与分类。

完整项目实现

参考文章

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

GNN教程:GraghSAGE算法细节详解!

GraphSAGE: GCN落地必读论文

GraphSAGE 模型解读与tensorflow2.0代码实现

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python的TensorFlow 2.0 Demo是一个展示和演示TensorFlow 2.0的示例程序。TensorFlow是一个开源的机器学习框架,它提供了丰富的工具和库,用于构建和训练各种人工智能模型。 TensorFlow 2.0 Demo可以帮助我们了解如何使用Python编写TensorFlow代码,构建和训练模型。在Demo中,我们可以看到一些预先定义好的模型,如卷积神经网络(CNN)和循环神经网络(RNN),以及一些常见的数据集,如MNIST手写数字数据集。 Demo中的代码可以帮助我们学习如何使用TensorFlow 2.0的新特性,如Eager Execution和tf.keras API。Eager Execution使得TensorFlow代码更加直观和易于调试,而tf.keras API提供了一种方便的方式来定义和训练神经网络模型。 另外,Demo还可以帮助我们了解TensorFlow 2.0的一些新功能,如动态(Dynamic Graph)和AutoGraph。动态允许我们动态地构建和修改计算,而AutoGraph则可以将Python代码自动转化为高效的TensorFlow计算。 通过运行TensorFlow 2.0 Demo,我们可以学习到如何使用Python和TensorFlow构建和训练机器学习模型,并熟悉TensorFlow 2.0的一些新特性和功能。这对于想要进一步了解和掌握深度学习和人工智能的人来说非常有帮助。 ### 回答2: Python TensorFlow 2.0 Demo 是一个用于展示 TensorFlow 2.0 版本的 Python 示例的演示程序。它旨在向用户展示如何使用 TensorFlow 2.0 进行机器学习和深度学习任务。 Python TensorFlow 2.0 Demo 演示了 TensorFlow 2.0 在数据处理、模型构建和训练等方面的功能。通过这个示例,用户可以了解 TensorFlow 2.0 的主要特点和用法。 在数据处理方面,Python TensorFlow 2.0 Demo 提供了许多常用的数据处理功能,例如加载数据集、数据集预处理、数据增强等。这些功能可以帮助用户准备数据用于模型的训练和评估。 在模型构建方面,Python TensorFlow 2.0 Demo 展示了如何使用 TensorFlow 2.0 构建各种类型的神经网络模型,包括卷积神经网络(CNN)、循环神经网络(RNN)和变分自编码器(VAE)等。用户可以学习如何定义模型的结构和参数,并将其编译为可训练的 TensorFlow 。 在模型训练方面,Python TensorFlow 2.0 Demo 展示了如何使用 TensorFlow 2.0 进行模型的训练和评估。用户可以学习如何选择合适的优化器、损失函数和评估指标,并使用训练数据集对模型进行训练,并使用测试数据集对其进行评估。 总而言之,Python TensorFlow 2.0 Demo 可以帮助用户了解并学习如何使用 TensorFlow 2.0 进行机器学习和深度学习任务。通过这个演示程序,用户可以掌握 TensorFlow 2.0 的基本用法,并在实践中探索更多高级的功能和技巧。 ### 回答3: Python TensorFlow 2.0 是一个强大的深度学习框架,可以用于构建和训练各种机器学习模型。使用 Python TensorFlow 2.0,可以轻松地创建端到端的模型,处理大规模的数据集,以及进行模型的训练和推理。 在 TensorFlow 2.0 中,与之前版本相比,有一些重要的改进和新功能。其中最重要的是 Eager Execution(即动态执行),它使得在 TensorFlow 中编写代码更加直观和简单,可以立即获得结果的反馈。另外,TensorFlow 2.0 还引入了一种新的高级 API——Keras,它提供了更简洁、易用的方式来定义和训练神经网络模型。 使用 TensorFlow 2.0 可以轻松地构建各种机器学习模型。例如,可以使用 TensorFlow 2.0 构建一个像分类模型,对像进行分类。首先,需要准备训练集和测试集的像数据,然后使用 TensorFlow 2.0 的 Keras API 构建一个卷积神经网络模型。接下来,编写代码对模型进行训练,并使用测试集进行验证。通过迭代和调整模型的参数,可以获得更好的分类效果。 在实际使用 TensorFlow 2.0 进行机器学习任务时,通常还会使用一些其他的库和工具来辅助。例如,可以使用 NumPy 来处理和转换数据,使用 Matplotlib 来可视化结果,使用 Pandas 来进行数据处理和分析等等。同时,也可以利用 TensorFlow 的高级特性,如分布式训练和自定义损失函数等,来进一步提升模型的性能和效果。 总而言之,Python TensorFlow 2.0 是一个功能强大、易用的深度学习框架,可用于构建和训练各种机器学习模型。通过灵活的应用和结合其他工具和库,可以实现各式各样的机器学习任务,并获得良好的结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值