【Pytorch神经网络理论篇】 25 基于谱域图神经网络GNN:基础知识+GNN功能+矩阵基础+图卷积神经网络+拉普拉斯矩阵

同学你好!本文章于2021年末编写,获得广泛的好评!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

 

图神经网络(Graph Neural Network,GNN)是一类能够从图结构数据中学习特征规律的神经网络,是解决图结构数据(非欧氏空间数据)机器学习问题的最重要的技术。

1 图神经网络的基础知识

    图神经网络(Graph Neural Network,GNN)是一类能够从图结构数据中学习特征规律的神经网络,是解决图结构数据(非欧氏空间数据)机器学习问题的最重要的技术之一。
    前面章节中主要介绍了神经网络的相关知识。接下来,让我们了解一下图神经网络相关的基础知识。

1.1 欧氏空间与非欧氏空间

  • 欧氏空间/欧几里得空间:能用一维、二维或更高维的矩阵表示,其最显著的特征就是有规则的空间结构。这是一个特别的度量空间。例如,音频、图像和视频等都是定义在欧氏空间下的欧几里得结构化数据。
  • 非欧氏空间:并不是平坦的规则空间,是曲面空间,即规则矩阵空间以外的结构。非欧氏空间下最有代表的结构就是图(graph)结构,它常用来表示社交网络等关系数据。

1.2 图

在计算机科学中,图是由顶点(也称节点)和顶点之间的边组成的一种数据结构。它通常表示为G(V,E)的形式,其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

图结构研究的是数据元素之间的多对多关系,即任意两个元素之间都可能存在关系,即顶点之间的关系可以是任意的,图中任意元素之间都可能相关。

在图结构中,不允许没有顶点。任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示。边可以是有向的或无向的,边集合可以是空的。

图结构中的每个顶点都有自己的特征信息,顶点间的关系可以反映出图结构的特征信息。在实际的应用中,可以根据图顶点特征或图结构特征进行分类。

1.3 图相关的术语

  • 无向图和有向图:根据图顶点之间的边是否带有方向来确定。
  • 权:图中的边或弧上附加的数量信息,这种可反映边或弧的某种特征的数据称为权。
  • 网:图上的边或弧带权则称为网,可分为有向网和无向网。
  • 度:在无向图中,与顶点v关联的边的条数称为顶点v的度。在有向图中,则以顶点v为弧尾的弧的数量称为顶点v的出度,以顶点v为弧头的弧的数量称为顶点v的入度,而顶点ν的度即其出度与入度之和。

1.4 图计算中的度量单位

  1. 顶点数(node);节点的数量。
  2. 边数(edge):边或连接的数量。
  3. 平均度(average degree):表示每个顶点连接边的平均数,如果图是无向图,那么平均度的计算为2×edge÷nodes
  4. 平均路径长度(average netwok distarce):任意两个顶点之间距离的平均值。它反映网络中各个顶点间的分离程度。值越小代表网络中顶点的连接度越大。
  5. 模块化指数(modulanty index):衡量网络图结构的模块化程度。一般地,该值大于0.44就说明网络图达到了一定的模块化程度。
  6. 聚类系数(clustering coefficient):和平均路径长度一起能够展示网络节点的平均路径小的情况,从而给出一些节点聚类或“抱团”的总体迹象。
  7. 网络直径(diameter):网络图直径的最大测量长度,即任意两点间的最短距离构成的集合之中的最大值。

1.5 结构化数据与非结构化数据

1.5.1 结构化数据

由二维表结构来进行逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。

1.5.2 非结构化数据

数据结构不规则或不完整、没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。它包括所有格式的办公文档、文本、图片HTML、各类报表、图像、音频或视频信息等。

1.6 GNN在不同类型数据上的应用

图神经网络(GNN)是一种直接在图结构上运行的神经网络,可以对图结构数据进行基于节点特征或结构特征的处理,通过顶点间的信息传递、变换和聚合来(层级化)提取或处理特征。GNN成为在图、点云和流形上进行表征学习的主流方法。

在结构化场景中,GNN被广泛应用在社交网络、推荐系统、物理系统、化学分子预测,指知识图谱。

在非结构化领域,GNN可以用在图像和文本等领域。

在其他领域,还有图生成模型和使用GNN来解决组合优化问题的场景。

1.7 GNN的起源

1.7.1 GCN 

GNN的第一个动机源于卷积神经网络(CNN),最基础的CNN便是图卷积网络(GraphConvolutional Network,GCN)。GNN的广泛应用带来了机器学习领域的突破并开启了深在规则的欧氏空间数据上运行,GCD是将卷积神经网络应用在各模型。

1.7.2 图嵌入

GNN的另一个动机来自图嵌入,它学习图中节点、边或子图的低维向量空间表示。DeepWalk、LINE、SDNE等方法在网络表示学习领域取得了很大的成功,然而这些方法在计算上较为复杂并且在大规模的图上并不是最优的。GNN却可以解决这些问题。

1.7.3 总结

GNN不但可以对单个顶点和整个结构进行特征处理,而且可以对图中电一小部分顶点所组成的子图)进行特征处理。如果把图数据当作一个网络,那么GNN可以分别对网络的整体、部分和个体进行特征处理。GNN将深度学习技术应用到由符号表示的图数据上,充分融合了符号表示和低维向量表示,并发挥出两者的优势。

2 矩阵基础

2.1 哈达马积

两个矩对应位置上的元素进行相乘的结果

 2.2 点积

两矩阵的行列乘法的结果

2.3 度矩阵与邻接矩阵

图的度矩阵:描述图中每个节点所连接的边数。

图的邻接矩阵:描述图中每个节点之间的相邻关系。


度矩阵D:

 邻接矩阵A:

 2.4 邻接矩阵的几种操作

邻接矩阵的行数和列数一定是相等的(即为方形矩阵)。无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称。 一般地,通过矩阵运算对图中的节点信息进行处理。

2.4.1 获取有向图的短边

2.4.2 获取有向图的长边

2.4.3 将有向图的邻接矩阵转化成无向图的邻接矩阵

3 图卷积神经网络

在下图中可以看到,图卷积神经网络的输入是一个图,经过一层层的计算变换后输出的还是一个图。

如果从卷积的角度来理解,那么可以将处理后的邻接矩阵当作一个卷积核,用这个卷积核在每一个隐藏层的特征结果上进行全尺度卷积。由于该卷积核的内容是图中归一化后的边关系,因此用这种卷积核进行卷积处理可使隐藏层的特征按照节点间的远近关系信息进行转化,对隐藏层的特征进行了去噪处理。去噪后的特征含有同类样本间的更多信息,从而使神经网络在没有大量样本的训练条件下,也可以训练出性能很好的模型。

图神经网络的实质是:对节点间的图结构关系进行计算,并将计算结果作用在每个节点的属性特征的拟合当中。

3.1 图结构与拉普拉斯矩阵的关系

图卷积本质上不是传播标签,而是传播特征。图卷积将未知的标签特征传播到已知标签的特征节点上,利用已知标签节点的分类器对未知标签特征的属性进行推理。

图卷积模型利用节点间的关系信息实现了特征的传播。而节点间的关系信息又是通过加工后的邻接矩阵来表现的。这个加工后的邻接矩阵称为拉普拉斯矩阵/基尔霍夫矩阵。

3.2 图卷积操作的步骤

1、将图结构的特征用拉普拉斯矩阵表示。
2、将拉普拉斯矩阵作用在节点特征的计算模型中,完成节点特征的拟合。

拉普拉斯矩阵的主要用途是表述图结构的特征(对矩阵的特征进行分解),是图卷积操作的必要步骤。

3.3 拉普拉斯矩阵的三种形式

4 图神经网络的角度看待深度学习

  1. 深度学习的神经网络擅长处理欧氏空间中的数据。
  2. 图神经网络檀长处理非欧氏空间中的数据。
  3. 图神经网络的实际处理过程中,还是将非欧氏空间的结构转化成矩阵来实现,用矩阵作为桥梁,就可以找到神经网络与图神经网络之间的联系。

4.1 实例解释图神经网络与深度学习的关系(以神经网络中常见的图像处理任务为例)

图像通常被理解为矩阵,矩阵中的每个元素是像素,像素是由RGB通道的3个数值组成的向量。换个角度想想,矩阵也可以理解为图谱,图谱由点和边组成,相邻的点之间用边相连。

4.1.1 矩阵是特殊的图谱

(1)矩阵中的每个点有固定个数的邻点。从图谱的角度来看,图像中的像素就是图谱中的点。图像中的每个像素,也就是图谱中的每个点,周边总共有8个邻点。
(2)矩阵中每条边的权重是常数。从图谱的角度来看,图像中的每一个像素只与周边8个邻点之间有边,其中边的长短权重是常数。

4.1.2 图谱的限制

图像作为一种特殊的图谱,其特殊性体现在这两个限制上面。如果放松了这两个限制,问题就更复杂了。这是深度学习算法向图神经网络衍化的必经之路。

4 图神经网络使用拉普拉斯矩阵的原因

图卷积的计算过程是将拉普拉斯矩阵与图节点特征进行点积运算,实现图结构特征向单个节点特征的融合。主要从图节点之间的传播关系方面阐释这个问题。

4.1 节点与邻接矩阵的点积作用

4.1.1 点积计算

4.1.2 分析邻居节点的聚合特征

4.1.3 结论

将节点特征与带自环的邻接矩阵执行点积运算,本质上就是将每个节点特征与自己的邻居节点特征相加,即对图中邻居节点特征进行加法聚合

4.2 拉普拉斯矩阵的点积作用

拉普拉斯矩阵本质上是邻接矩阵的归一化。同理,拉普拉斯矩阵的点积作用本质上也是图中邻居节点特征的加法聚合,只不过在加法聚合过程中加入归一化计算。

4.3 图卷积的拟合性质

将图结构信息融入节点特征的操作,本质上就是按照图结构中节点间的关系,将周围邻居的节点特征加起来。这样,在相邻的节点特征中,彼此都会有其他节点的特征信息,实现了标签节点的特征传播。

4.4 点积计算的扩展

使用矩阵运算方法会有较大的局限性,因为在节点特征与拉普拉斯矩阵执行点积的计算过程中,只能对图中邻居节点特征进行加法聚合。

在图节点的邻居特征聚合过程中,还可以使用更多其他的数学方法(比如取平均值、最大值),并不局限于加法。
 

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

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

相关文章

strace调试(Linux Device Driver)

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬…

【Pytorch神经网络基础理论篇】 07 线性回归 + 基础优化算法

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

浅谈命令查询职责分离(CQRS)模式

在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体。在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题。…

Linux shell sed awk

1、我们的平台编译kernel的时候总是要输入项目名称,很麻烦 ################################################ ## Compile kernel and pack it into boot.img ## ################################################ #!/bin/shPROJECT$1 echo $PROJEC…

【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类

1 案例说明(图卷积神经网络) CORA数据集里面含有每一篇论文的关键词以及分类信息,同时还有论文间互相引用的信息。搭建AI模型,对数据集中的论文信息进行分析,根据已有论文的分类特征,从而预测出未知分类的…

mybatis基础学习3---特殊sql语句(备忘)

1: 2: 3:resultMap的用法 转载于:https://www.cnblogs.com/kaiwen/p/6486283.html

使用gdb

1、gdb调试 gdb 对于看系统内部是非常有用. 在这个级别精通调试器的使用要求对 gdb 命令有信心, 需要理解目标平台的汇编代码, 以及对应源码和优化的汇编码的能力. LINUX DEVICE DRIVERS,3RD EDITION 调试器必须把内核作为一个应用程序来调用. 除了指定内核映象的文件名之外…

【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类

Multi-sample Dropout是Dropout的一个变种方法,该方法比普通Dropout的泛化能力更好,同时又可以缩短模型的训练时间。XMuli-sampleDropout还可以降低训练集和验证集的错误率和损失,参见的论文编号为arXⅳ:1905.09788,2019 1 实例说明 本例就…

linux自旋锁

1、为什么要有自旋锁 我们写驱动代码的时候,往往忽略这一点,然后版本发布后会经常遇到一些异常的问题,资源的竞争相当重要,很容易出现空指针 引用: if (!dptr->data[s_pos]) { dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL); if (!dptr->data[s_pos])…

java基础-public/private/protected的具体区别

在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。 1、public:publi…

【Pytorch神经网络理论篇】 26 基于空间域的图卷积GCNs(ConvGNNs):定点域+谱域+图卷积的操作步骤

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

Linux设备驱动之mmap设备操作

1.mmap系统调用 void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); 功能:负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改来实现对文件的读取和修改,而不需要再调用read和write&#xff…

hadoop安装以及Java API操作hdfs

因为工作需求,需要我这边实现一个大文件上传到HDFS的功能,因为本机无法连接公司内网的集群,无奈只好自己动手搭建一个单节点的Hadoop来满足工作的需求。下面简单介绍下安装过程中遇到的坑我的机器是阿里云的最低配 安装文件:hadoo…

【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

给ubuntuGedit安装gedit-source-code-browser

插件链接下载 https://bugs.launchpad.net/ubuntu/source/gedit-source-code-browser-plugin/bug/1242126 下载这个安装完后还用不了,还要添加下面的补丁 diff -Naur old-plugins/sourcecodebrowser/ctags.py plugins/sourcecodebrowser/ctags.py --- old-plugin…

Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.

解决OMP: Hint: This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is l…

Linux 系统版本信息

1、# uname -a (Linux查看版本当前操作系统内核信息) 2、# cat /proc/version (Linux查看当前操作系统版本信息) 3、# cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息&…

DEVICE_ATTR的使用

使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的。类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR。 这几个东东的区别就是,DEVICE_ATTR对应的文件…

【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

泛型(模拟list)

package Test; import java.util.Arrays; public class genericity<T> { private Object[] t; public genericity() { super(); t new Object[0]; } //增加数据 public void add(T t1) { t Arrays.copyOf(t, t.length 1); t[t.length - 1] t1; } //查询数据 public i…