Graph Neural Network(GNN)图神经网络

news2024/9/30 1:34:28

Graph Neural Network(GNN)图神经网络,是一种旨在对图结构数据就行操作的深度学习算法。它可以很自然地表示现实世界中的很多问题,包括社交网络,分子结构和交通网络等。GNN旨在处理此类图结构数据,并对图中的节点和边进行预测或执行任务。
GNN中节点的信息 通过节点和节点之间连接的边 在节点之间传递。其中每个节点都可以从其和它相邻的节点中接收信息并相应地更新自己的信息,这个过程通常会重复多次以使信息充分地沿着边流动和在节点出聚合。然后这些更新的节点可以用于对节点的分类(node classification)、节点之间边的预测(两个节点之间是否存在边)、对于整个图的分类、生成一个新的图(比如VAE或GAN)等等。这些已经应用于化学,社交网络和推荐系统等各个领域。

1.Graph 图

在计算机科学中,图是一种抽象的数据类型,旨在实现数学图论领域中的无向图和有向图概念。图类型的数据结构由一组有限的(可能是可变的)顶点(也称为节点或点)组成,对于无向图,这些顶点在一组无序对内,对于有向图,这些顶点在一组有序对内。这些对被称为边(也称为链接或线),对于有向图,这些对也被称为边,但有时也称为箭头或圆弧。顶点可以是图形结构的一部分,也可以是由整数索引或引用表示的外部实体。
在这里插入图片描述
例如,我们使用图来表示社交网络,如下图所示,图中的每个节点代表一个人,每两个节点之间的边则代表了这两个人互相认识,比如Person A 分别和Person B和Person C是好朋友,B又和D是好朋友,但是C和D却互不认识。如果这条边是无向的,可以表示较为平等的关系,比如友谊,同学等;如果是有向的,可以用来表示上下级,或是师生等关系。
在这里插入图片描述

2.Graph neural network 图神经网络

图神经网络是一类用于处理可以表示为图的数据的人工神经网络。在A Comprehensive Survey on Graph Neural Networks https://arxiv.org/pdf/1901.00596.pdf 中提出了将图神经网络进一步地分为Recurrent graph neural networks (RecGNNs)递归图神经网络、Convolutional graph neural networks (ConvGNNs)卷积图神经网络、Graph autoencoders (GAEs)图自动编码器 和 Spatial-temporal graph neural networks (STGNNs)时空图神经网络。

2.1 Recurrent graph neural networks (RecGNNs)循环图神经网络:

它是传统图神经网络的一种衍生,具有循环结构。循环图神经网络用来处理一系列图结构的数据,在这个过程中图随着时间而改变。在RecGNN中,图结构和图节点在每个时间步上面更新,并且更新后的信息用于做预测或者完成一些其他任务。循环图神经网络和传统的图神经网络主要区别是循环图神经网络在一个时间步上处理图一次,并且会用之前时间步的信息来更新图。(其实就是递归神经网络和普通网络的区别,然后传入的数据为图结构)。
递归神经网络相关介绍可以参看之前的文章:
https://mp.weixin.qq.com/s/tvvXyCEox-BA-Ox65v1IXQ

2.2 Convolutional graph neural networks (ConvGNNs)卷积图神经网络:

它结合了卷积运算来处理图结构数据。ConvGNN旨在用于具有固定、已知结构的图,其目标是学习节点和边的表示,这种表示对于他们在图中的相对位置不变。
在ConvGNN中,卷积运算应用于图结构和节点特征,以及更新节点和边。被更新的节点和边被传入下一层,在下一层中重复该过程。通过堆叠多层卷积层,ConvGNN可以学习图中节点和边之间越来越复杂的关系。
ConvGNN中的卷积运算被设计为置换不变的,这意味着无论图中节点和边的顺序如何,输出都是相同的。这使得ConvGNN非常适合用于节点分类、连接预测和图生成等任务。这类任务中图的结构是固定的,但是节点特征可能会发生变化。
ConvGNNs已应用于各种现实世界的问题,例如药物探索、蛋白质折叠和社交网络分析。他们特别适合需要从图结构数据中提取局部低维特征的任务,因为卷积运算旨在捕获节点和边之间的局部关系。
一个具体的例子如下图,Graph G为一个图结构数据,它有ABCDE五个节点,这五个节点每个节点有一个自己的特征向量,这里是1x3的一个向量,那么特征矩阵如图中Feature vector X 所示;对于每两个节点之间是否存在边相连,我们用邻接矩阵来表示,如下图中的Adjacency matrix A,因为整个图的边是没有方向的,所以这个图的邻接矩阵为对称矩阵,A -->E 和 E --> A对应的位置为1,而不相关的节点A -->B 则为0,同时这个图中没有一个节点存在self-loop,所以它的邻接矩阵的对角线上的值全为0,A–>A为0;从图中我们还可以发现有些节点与周围的节点产生的联系比较强,而有些节点却很少,我们用度矩阵来表示节点的这种属性,图Degree matrix D中可以看到E它与周围四个点产生了连接所以它的degree为4,而A只与E这一个节点产生连接,所以A的degree为1。
在这里插入图片描述
那么这些节点是如何互相影响的呢,也就是每个节点的特征如何通过边来影响到周围节点的特征的,这个过程简易地表示为下图。通过将邻接矩阵和特征矩阵进行叉乘,在邻接矩阵中,A只与E产生连接,所以相乘后,A从临近节点得到的特征全部来自于E节点。对于B,它和D、E相连,那它从临近节点得到的特征来自于D和E,这里来自D和E的权重均为1,也就是B受D和E的特征影响一样。
在这里插入图片描述
对于上面这个过程,我们可以看到一些不合理的地方,例如缺少了来自节点自身的特征,对于上图中得到的A结果矩阵也应该包括节点A的特征才合理,而不是只包含了来自于E节点的特征。
对于这个问题,我们可以通过向邻接矩阵A添加一个单位矩阵I来解决,得到新的邻接矩阵Ã。
在这里插入图片描述
当lambda=1(来自自身的特征和来自相连节点的特征一样重要),Ã = A + I。注意到这里我们可以将lambda作为一个可以训练的参数,现在这里给lambda赋值为1,得到新的邻接矩阵Ã,在新的邻接矩阵中就有self-loop了。
在这里插入图片描述
另外一个问题是,我们从相连的节点中的到特征不应该是简单的直接相加,比如对于B节点,直接相加从D和E节点的特征以形成自己的特征不合理,假如我们使用直接求和的方式,那么对于Degree很大的节点,也就是和周围节点连接比较强的时候,会造成该节点得到的值很大,而deree很低的节点得到的矩阵中值却很小,并且会在后期产生梯度爆炸或者消失。所以,或许我们可以采取求均值,或者使用更好的方法。此外神经网络似乎对输入数据的规模很敏感。因此,我们需要对这些向量进行归一化以消除潜在问题。
对于矩阵缩放,通常乘上一个对角矩阵。在这个例子中,我们试图去采取对特征求和再求均值,更为数学的表达就是说,根据节点的degree来缩放向量矩阵X。对于单个节点,如果与它连接的节点越多,那么每个节点对它造成的影响越小,如果它只与一个节点相连,那么与它相连的那个节点就会对这个节点造成较大的影响。这个就像,当你心里只在乎一个人的时候,那个这个人就很容易影响到你的心理状态,当你拥有大爱,心怀的是全地球上的居民,那么单个人对你的影响就小。
如下图中,新的邻接矩阵中包含self-loop,那么对于这个新的graph中的每一个节点的degree都加1,然后取倒数,就是与之相连的节点对该节点的平均权重。例如,节点A它与自身和E相连,那么degree为2,所以对于求和得到的矩阵需要除以2,对于E,它的degree为5,那么对于它的求和得到的矩阵需要除以5。
在这里插入图片描述
因此,通过将新的邻接矩阵和特征矩阵相乘的结果 与 新的度矩阵的逆矩阵相乘,得到所有相邻的特征向量(包括它自己)的平均。
在这里插入图片描述
上图中的邻接矩阵Ã为对称矩阵,这意味着它的行数和列数相同,上图的过程仅是对矩阵中的每一行进行了处理,那么直观地来说应该对每一列也做相同地处理。那么上图的过程中就需要再乘一个矩阵进行列变换,公式由原来的的 D ̃^(-1) A ̃X 变为 D ̃^(-1) A ̃D ̃^(-1) X ,示意图如下图所示:
在这里插入图片描述
这种新的缩放给我们加权均值。我们这里现在在做的是放更多的权重在那些有更低的degree的节点上,以减少拥有高degree节点的影响。这个加权均值的想法是,我们假设低degree的节点对他们的对它们相连的节点有更大的影响,而高degree节点产生低的影响,因为它们将影响分散给太多的邻居了。就像退休在家的父母,当他们渐渐地脱离了与集体的连接,家人变成了他们主要的连接点,所以他们会花较多的时间在家人身上,家人也因此会比之前更受影响,这个影响的性质取决于退休父母的属性(特征),比如乐观积极,会照顾家人,又或是爱攀比,爱面子,三天两头折腾子女等等。
虽然对行和列都进行了处理,也就是对于邻接矩阵的左右两边都乘以了 D ̃^(-1) ,这个过程相当于归一化了两次,所以我们这里应该使用 D ̃^(-1/2) 如下图,而不是D ̃^(-1),即公式 D ̃^(-1/2) A ̃D ̃^(-1/2) X 。
在这里插入图片描述
综上所述,一个2层的GCN的前向模型的公式如下:
在这里插入图片描述
其中:
在这里插入图片描述
网络层的数量决定了可以获取的最远的节点特征,例如,只有一层GCN,那么每个节点仅可以获得来自它相邻节点的特征。收集信息的过程是相互独立的,同时适用于所有节点。当在第一层上堆叠另外一层时,我们重复之前的步骤收集信息,但是这次,相连节点的信息早已经有了它们自身相连的节点的信息。所以层数即为每个节点可以跳跃到的最远的节点数。也可以认为节点应该从网络中获取信息的距离。我们可以为层配置适当的数量。通常我们不希望距离太远,根据六度分隔理论(Six Degrees of Separation)当一个节点一直向外层走了6步时,那么它将可以得到来自整个图的信息,这会使得整个模型没有意义。
在这里插入图片描述
那我们需要多少层呢,一般两三层就行了。
这个例子来自下面连接:
https://ai.plainenglish.io/graph-convolutional-networks-gcn-baf337d5cb6b

2.3 Graph autoencoders (GAEs)图自动编码器:

图自动编码器(Graph Autoencoder,GAE)是一种用于图结构数据的无监督学习模型,主要用于将图结构数据压缩成低维向量表示并进行重构。
在GAE中,目标是学习可用于重建原始图的图表示。GAE由两个主要成分组成:一个编码器和一个解码器。编码将图中的节点和边映射到低维表示,解码器将低维表示还原到原始的图结构。
GAE中的encoder(编码器)和decoder(解码器)通常为神经网络,并且对这些神经网络进行训练以最小化原始图和重建图之间的重建误差。通过训练GAE,编码器学习图形的低维表示,捕捉节点和边之间最重要的关系。
GAEs 已经应用于各种现实世界的问题,例如图分类,图重构和图生成等。下图是一个图重构的例子。
在这里插入图片描述
自动编码是一种人工神经网络用于对无标签数据学习有效的编码。一个自动编码器学习两个函数:一个编码函数转换输入数据,一个解码函数从被编码的表现中重建输入的数据。
变体的存在是为了强制学习到表示具有有用的属性。例如regularized autoencoders正则自编码器(稀疏、去噪和收缩),可以有效学习后续分类任务的表示,以及变分自动编码器,作为生成模型来应用。自编码器应用于许多问题,包括人脸识别、特征检测、异常检测和获取单词的含义。自动编码器也是生成模型,可以随机生成与输入数据(训练数据)相似的数据。
数学原理
自编码器由下列成分定义:
两个集合:解码消息空间 χ;编码消息空间Ζ。χ和Ζ均几乎总是欧拉空间,也就是 χ=R^m, Z=R^n,对于任意给定m,n (R为实数集)。
两个参数化函数族:编码族Ε_ϕ: χ→ Ζ , 被 ϕ 参数化;解码族 D_θ: Ζ→ χ ,被 θ 参数化。
对于任意的 x ϵ χ,我们通常写 z=Ε_ϕ (x) ,并将其称为code,潜在变量,潜在表示(隐层表示),本真向量等。相反的,对于任何 z ∈ Ζ ,我们通常写 x^‘=D_θ (z) ,并把它称为(解码)信息。
通常,编码和解码被定义为多层感知器。例如,一层MLP编码器 Ε_ϕ 为:
Ε_ϕ (Χ)= σ(Wx+b)
其中 σ 为element-wise激活函数,例如sigmoid函数或者rectified linear unit(整流线性单元), W 是一个叫做权重的矩阵,b为一个向量,称为bias (偏置,类似于线性拟合那个截距b)。
训练一个自动编码器
一个自动编码器,它自身是一个简单的两个function组成的数组。为了判断它的性能,我们需要一个任务。该任务被定义为在χ上的参考概率分布 μ_ref 和一个重建质量函数d: χ×χ→[0,∞],例如d(x,x’) 测量x’距离x有多远。综上,我们可以为自编码器定义损失函数为:
L(θ,ϕ)≔ Ε_(x~μ_ref ) [d(x,D_θ (E_ϕ (x)))
对于给定的任务(μ_ref,d)的最优自动编码器是
在这里插入图片描述
. 寻找最优自动编码器的过程可以通过如何数学优化技术来完成,但是该技术通常为梯度下降。这个搜索的过程称为训练自动编码器。在大多数情况下,参考分布只是对于给定数据集 {x_1,…,x_N}⊂χ 的经验分布,因此:
在这里插入图片描述
并且质量函数为L2loss:
在这里插入图片描述
然后最优自动编码器的问题就变为最小二乘优化:
在这里插入图片描述
在这里插入图片描述

一个自动编码器由两个主要部分组成:一个编码器将消息映射到code,解码器又将code重建为message。一个最优自动编码器应该表现得尽可能接近完美的重建,尽可能完美地被定义为重构质量函数 d。
最简单的方法来完美地执行复制任务就是重复信号。为了抑制这种行为,code空间 Ζ 通常比message 空间 χ 少一些维度。
这种自动编码器被叫做undercomplete欠完成,它可以被理解为压缩message或者减少它的维度。
在一个理想欠完全自动编码器的极限,每个可能的在code空间的code z 用于编码一个真实出现在 μ_ref 分布的message x ,并且解码器也同样是完美的:D_θ (E_ϕ (x))=x。理想的自动编码器可以用于生成messages 和真实的message相同。
如果code 空间Z的维度大于或等于message空间 χ ,或者隐藏单元被给定足够空间,一个自动编码器可以学习恒等函数,并变得无效的。然而,实验结果发现overcomplete自动编码器可能仍然学习到有用的特征。
在理想设置中,可以基于要建模的数据分布的复杂度来设置code维度和模型容量。一个标准的方法是对基本的自动编码器进行修改。(比如下面的各种变体)
该自动编码器可以有多种变体。下图就是它的各种变体,然后从上面链接的网站上可以看到。
https://en.wikipedia.org/wiki/Autoencoder#Variational_autoencoder_(VAE)
在这里插入图片描述

2.4 Spatial-temporal graph neural networks (STGNNs)时空图神经网络:

时空图神经网络是一种图神经网络,旨在处理具有空间和时间依赖性的图结构数据。与传统的图神经网络仅考虑节点和图的关系不同,STGNN还考虑了不同时间步长的节点之间的关系。
STGNN通常实现为递归神经网络,其中网络在每个时间步的隐藏状态根据前一个时刻的隐藏状态和当前图结构进行更新。通过考虑节点之间的时间依赖性,STGNN可以随时间捕获数据中的复杂模式和趋势。
STGNN 可以将图神经网络与循环神经网络的优势结合起来,从而有效地利用时空图数据中的空间和时间信息。STGNN 主要有两个部分:空间卷积神经网络 (Spatial GNN) 和时间递归神经网络 (Temporal RNN)。
空间卷积神经网络 (Spatial GNN) 是用于对时空图中的节点进行空间上的特征提取和表示的神经网络。该模型在考虑节点之间的空间关系时,可以使用常规的图卷积神经网络。但由于节点的特征和位置在时间上是变化的,因此需要在此基础上扩展模型来处理时序性。
时间递归神经网络 (Temporal RNN) 是用于处理时空图中的时间序列信息的神经网络。该模型在处理时间序列信息时,通常采用递归神经网络 (Recurrent Neural Networks, RNNs) 或长短时记忆网络 (Long Short-Term Memory, LSTM) 等,以捕捉时间上的依赖性。
STGNN已应用于各种现实问题中,例如交通预测,气候建模和金融市场分析。它们特别适合需要分析具有空间和时间依赖性的图结构数据任务,例如预测网络随时间的演变或分析随时间变化的实体之间的关系。
举个例子,下面示意图中的输入视频同时包含了姿势的空间和时间信息。因此,隐藏层中的节点表示取决于空间和时间方向上的相邻节点。
在这里插入图片描述

上图为ST-GCNS应用的一个示意图,比STGNN多了卷积运算,ST-GCN在一个时空图上面工作,它不是分别在时间和空间上进行独立的卷积运算,而是对附近的节点同时在时间和空间上进行卷积运算,如下图所示:
在这里插入图片描述

更为详细的内容可以打开下面连接查看:
https://medium.com/axinc-ai/st-gcn-a-machine-learning-model-for-detecting-human-actions-from-skeletons-46a95b31b5db

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

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

相关文章

PLECS中DLL模块的使用

之前发布了一篇文章,介绍如何使用PSIM中的DLL模块。而本篇文章的内容与之类似,不过主角换成了PLECS。 PLECS和PSIM类似,也属于电力电子仿真软件,使用方便,仿真速度快,和Matlab也有一定的联系,有…

关于Java多线程你了解多少

🏡个人主页 : 守夜人st 🚀系列专栏:Java …持续更新中敬请关注… 🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点 目录多线程多线程的创建继承Thread类实现R…

主板EC程序烧写异常致无法点亮修复经验

主板型号:Gigabyte AB350M-Gaming3 官网上明确写着支持R5 5500,但按照如下步骤实践下来实际是不支持的 升级biosF31到F40版本的注意事项: 步骤: 1 使用Q-Flash先将bios升级到f31版本;2 然后下载提示中的ECFW Update To…

常见排序算法——冒泡排序和选择排序

常用算法 一、排序算法 1.1、冒泡排序 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部…

Fiddler 模拟弱网环境测试

为什么要进行弱网环境测试? 由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣,导致会出现一些意想不到的非功能性bug,影响用户体检。比如 利用Fiddler,Charles等具有代理服务器功能的网络流量分析软件来实现…

操作留痕功能实现与探讨

操作留痕功能实现与探讨 背景 接手了一个单体应用项目,看系统介绍,说实现了【高性能的操作日志留痕】功能,就有点好奇它是怎么设计的,是阻塞队列还是怎样的线程池。结果我打开代码一看,真的是笑洗个人了。它是做了一…

Mysql全解[基础篇]

目录MySQL概述数据库相关概念MySQL数据库版本docker部署单机节点sqlmode说明连接mysql数据模型关系型数据库(RDBMS)数据模型mysql版本对比MySQL 5.5MySQL 5.6MySQL 5.7MySQL 8.0SQLSQL通用语法SQL分类DDL数据库操作表操作数据类型数值类型字符串类型日期…

操作系统——12.处理机调度的概念、层次

这篇文章我们来讲一下处理机调度的概念和层次 目录 1.概述 2.调度的基本概念 3.调度的三个层次 3.1高级调度 3.2中级调度 3.3.低级调度 3.4三种调度的对比 4.挂起状态与七状态模型 5.小结 1.概述 首先,我们来看一下本节的知识框架图: 2.调度的…

连接Oracle数据库失败(ORA-12514)故障排除

文章目录症状产生原因解决办法欢迎加下方我的微信👇,拉你入学习群点击试看博主的专著《MySQL 8.0运维与优化》(清华大学出版社)ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障,它通常表示无法连接到数据库…

python+pytest接口自动化框架(5)-requests发送post请求

在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递。且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务端通过请…

专访阮健丨压力就是动力,危机也是转机

48岁的阮健加入酷雷曼已经三个年头,从最初的孤身一人至今,他已经拥有了一个五六人的VR全景团队。 阮健团队的拍摄设备 “人的一生真的是充满不确定性的,那些年我辗转好几个行业的时候,也会一边抱怨行业不景气一边又想着怎么多干点…

Vue3 企业级项目实战:全新优化升级

Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发,升职加薪,快人一步。。「Vue3 企业级项目实战」由程序员十三撰写,2744人购买https://s.juejin.cn/ds/S2RkR9F/ 写下这些文字的时候是2022年9月…

无需公网IP,安全稳定实现U8C异地访问

用友是全球领先的企业云服务与软件提供商,在财务、人力、供应链、采购、制造、营销、研发、项目、资产、协同等领域为客户提供数字化、智能化、社会化的企业云服务产品与解决方案。 U8C是用友针对成长型、创新型企业,提供企业级ERP整体解决方案。在系统…

ChunJun 1.16 Release版本即将发布,bug 捉虫活动邀您参与!

亲爱的社区小伙伴们,历时数月,我们很高兴地宣布,ChunJun 即将迎来 1.16 Release 版本的正式发布。在新版本中,ChunJun 新增了一批常用功能,进行了多项功能优化和问题修复,并在用户使用体验上进行了极大地改…

systemctl 启动/停止/重新加载 nginx

systemctl 启动/停止/重新加载 nginx 一、新建nginx.service脚本 sudo vim /usr/lib/systemd/system/nginx.service然后按iii进入编辑模式,粘贴如下内容,其中/usr/local/nginx/是进行make && make install之后的文件夹路径,需要根据…

虚拟地址空间

本节目录1.如何理解区域划分2.为什么一个变量可以存储两个不同的值?3.深入理解虚拟地址空间为什么要有地址空间?4.理解什么是挂起?1.虚拟地址空间究竟是什么?2.映射关系的维护是谁做的?1.如何理解区域划分 所谓的区域…

STM32F1,F4,L1系列禁止JTAG和SW引脚方法

STM32F1系列 程序中在使用到JTAG、SWD的某个IO 时,需要禁用掉相关调试方法后,再配置相应的IO方式。在需要相应的接口配置前使用这些代码。 对于F1系列,调用函数进行专门的禁止。 标准库配置方式: RCC_APB2PeriphClockCmd(RCC_A…

【蓝桥杯嵌入式】LCD屏的原理图解析与代码实现(第十三届省赛为例)——STM32

🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 - 蓝…

智能家居Homekit系列一智能触摸开关

触摸开关,即通过触摸方式控制的墙壁开关,其感官场景如同我们的触屏手机,只需手指轻轻一点即可达到控制电器的目的,随着人们生活品质的提高,触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

HNU工训中心: 三人表决器及八人抢答器实验报告

工训中心的牛马实验 三人表决器: 实验目的 1) 辨识数字IC功能说明。 2) 测试数字集成门电路,掌握输出故障排除、使用注意事项。 3) 掌握逻辑函数搭建三人表决器。 2.实验资源 HBE硬件基础电路实验箱、万用表 74LS00与非门、74LS10 三个3输入与非门…