图神经网络学习笔记

文章目录

  • 一、图神经网络应用领域分析
  • 二、图基本模块定义
  • 三、邻接矩阵的定义
  • 四、GNN中常见任务
  • 五、消息传递计算方法
  • 六、多层GCN的作用
  • 七、GCN基本模型概述
  • 八、图卷积的基本计算方法
  • 九、邻接的矩阵的变换
  • 十、GCN变换原理解读


本笔记参考自b站up主小巴只爱学习的图神经网络教程
原教学视频链接

一、图神经网络应用领域分析

在这里插入图片描述
首先是我们的芯片领域,芯片中很多小单元是连通在一起的,如果直接人为设计难度会很大。但由于都是连在一起的,如果放在图神经网络中进行解决,技术水平收益就比较高。

在这里插入图片描述
还有就是推理分析的一些场景,无论我们的数据是图像数据还是文本数据,或者是结构化数据。我们的一些特征之间并不一定是完全独立的,特征之间可能会有关系。

举个例子,我们坐一圈玩剧本杀,我们在考虑特征的时候除了自己的特征肯定还要考虑其他人的特征,考虑其他人的特征能不能和我连上一条边,也就是谁和我有关系,然后根据情况去重构我们所需的特征。

在这里插入图片描述
目前应用最多的就是推荐系统了,我们在玩抖音的时候看到一些自己喜欢的人,那推荐系统就会根据这个人的一些特征,还有这个人他自己的关系网络给我们推荐类似的东西。这个本质还是一个图结构,我们的点和点之间会存在一定的关系。

二、图基本模块定义

在这里插入图片描述
vertex:也就是图中的各个点,比如我们交通网络中可以把十字路口看成一个点

edge:就是图中的边,点和点之间如果有边,就说明这两个点是有关系的。有时边也会有相关的特征,比如一个点到另一个点的距离。

global:全局的图,它其实也可以看成一个向量,因为目前我们的神经网络中,要计算某个东西是什么,那肯定要有各个特征(各个向量)组成来判断。

在这里插入图片描述
我们神经网络最核心的就是要整合特征。比如我们要预测一个人喜欢什么,我们不仅要考虑这个人,还要考虑他的朋友喜欢什么。因为在图上,这些点连在一起,我们的点特征会做一个重构,边特征还有图特征都需要重构。我们把点、边的特征做成最好的,后面整个图的特征自然就会是最好的。

后面要输出一些结果,我们最终的结果其实就是对点做分类回归,对边做分类回归,对图做分类回归。

三、邻接矩阵的定义

在这里插入图片描述
这个邻接矩阵主要是表示某个点和其他点是否具有关系。
在做实际案例的时候,邻接矩阵会作为我们的输入一并传过去。比如GNN模型传一个点特征,还有点和其他点的关系。

在这里插入图片描述

四、GNN中常见任务

图神经网络的输入格式并不一定是固定的,也就是说不同的数据结构也可能是完全不同的。
比如我们输入100个图,每个数据是一个图,尽管这100个图并不一样,但是只要能做成图的结构,就可以进行计算。
在这里插入图片描述
再比如我们生活中的社交网络,由于每个人的社交范围不一样,并且同一个人的社交关系也并不一定是一成不变的,那就可以套用GNN去处理。
在这里插入图片描述
在这里插入图片描述

五、消息传递计算方法

在这里插入图片描述
实际应用中由于邻接矩阵是n*n的,如果数据量比较大,那么矩阵也会非常大。并且由于邻接矩阵很多点到其他点是没有关系的,这种无用数据就可以省略掉。

所以实际存的是2*n的矩阵,我们只存一些有关系的点,比如[1,0]表示1号可以到0号点。

在这里插入图片描述
比如1号点连了3个点,2号点连了1个点,3号点连了1个点。它们连接方式是不同的,如果我们需要重构每个点的特征,由于每个点特征更新不仅需要考虑自己的特征还有其他相邻点特征。

我们假设点1、2、6、4特征分别为x1、x2、x6、x4。如果现在要更新点1特征,那我们新的特征x1可以写成下图形式。(不一定百分百是这个形式,只是举个例子)
在这里插入图片描述
小结:点的更新不仅要考虑自身的信息,还要考虑到相邻节点的信息。

具体做法如下:
在这里插入图片描述
比如我们的6号节点,现在要重构6号节点的特征,那我们可以通过计算x1,x3,x4的各个特征,根据权重进行一个累和。

而这个权重具体是多少,这里是设置了一个可学习的权重参数,我们训练神经网络时就可以得到一个比较好的参数了。

在这里插入图片描述
汇总这一块,蓝色框标志的就是某个点它的其他连接点应该给我啥样的特征。w1*hi就表示字节的特征。然后把这两个结果和进行一个投影。

六、多层GCN的作用

在这里插入图片描述
比如做两层GNN,从左到右,依次是原始输入,处理1层结果,处理2层结果。

可以看出,无论经过多少层处理,图结构都不会发生改变(邻接矩阵也不会变),只会改变各个点的特征。

尽管做多层GNN每次都考虑相邻的节点,但是主要的原因是相邻的节点是可能不断更新的。

在这里插入图片描述
我们通过多层GNN得到点的特征了,然后就要对每个点做分类,最后再把每个点再合成一个图,就可以做图分类。节点、边也都是可以分类的,具体看工业需要。

七、GCN基本模型概述

GCN也就是图卷积
在这里插入图片描述
如下图,是我们的一个卷积,它是把我们输入的一张图像的一个小窗口做成一个特征。
在这里插入图片描述
而图卷积和卷积就不一样了,因为在图卷积中完全就没有窗口,它只有图(只有图中的每个点)。所以这里图卷积也没有啥卷积的计算,主要还是基于那种消息传递的计算。

由于每个点,它的相邻节点的个数是不一定一致的,所以输入也不要求是相同格式。
在这里插入图片描述

在这里插入图片描述
对于每个点怎么获得具体特征?直接把图交给神经网络,用损失函数去迭代更新即可。
然后交给GCN的就是两个:各个节点特征,还有就是邻接矩阵。

在这里插入图片描述
在图任务中,由于各个节点的重要程度不一样,导致有些边缘的点它没有人工打的标签或者记录。当我们在训练模型的时候,我们也不要求每个点都是有标签的,我们可以当作是半监督的任务。

我们计算损失的时候虽然只用有标签的,但是由于那些有标签的节点特征也会受到相邻节点特征影响,所以也要保证那些有标签的节点的相邻节点也要保证它们的最好特征。

八、图卷积的基本计算方法

在这里插入图片描述
上图中每个点都有自己的实际特征。如果现在要更新黄色这个点特征,那么第一步就是消息传递,也可以理解为聚合,即综合它相邻结点的特征。这里具体做法就是把所有点特征拿过来求平均,实际工业中可以根据具体情况调整相邻节点特征所占比例。

而求完平均之后,还需要经过神经网络,相当于加上一组可训练的参数,即下图这样进行一个全连接。
在这里插入图片描述
最后我们是得到一个两维向量,原先三维变现在两维,这个向量维度是可以调整的。

在这里插入图片描述
我们得到一个图之后,第一个图卷积层会对每一个点进行更新,第二个图卷积层会基于第一个图卷积层的结果进行更新。。。

后面经过图卷积的处理,最后输出的结果就是每个点对应的一共向量。

一般来说,图卷积并不需要做特别深层的。因为一般的图中的点数量不会特别庞大,另外,因为做6层之后理论可以覆盖所有的节点和边,同时所有特征都会趋于自身特征,如果继续往下做就可能过拟合。

在这里插入图片描述

GCN中一般会有3个矩阵:邻接矩阵A、度矩阵D、特征矩阵F

A矩阵:就表示某个点和哪些点相连了
D矩阵:表示连上这个点的有几个其他节点
F矩阵:表示某个点的特征值(向量)

在这里插入图片描述
如上图有邻接矩阵A和特征矩阵F,现在要求重构完的点A的向量是多少?只需要进行一个简单的矩阵相乘即可。

比如这里重构后的A向量(1.4,2.5,4.5)
0*(-1.1)+00.4+01.2+01.4+11.4=1.4
03.2+05.1+01.3+0(-1.2)+12.5=2.5
0
4.2+00.4+0(-1.2)+02.5+14.5=4.5

在这里插入图片描述
前文的特征计算方法是只考虑了某个点它的相邻节点的特征,没有考虑到它自己的特征。所以一般情况我们还要加一个单位矩阵得到新的邻接矩阵A~

九、邻接的矩阵的变换

然后还要考虑的一个问题是,有些节点它的度会比较大,如果特征不考虑正负的话,做完矩阵乘法得到新的特征一定会特别大,这和实际情况是不符合的。所以我们还需要把度矩阵考虑进去,进行一个求平均的操作。
在这里插入图片描述
将得新的度矩阵D~进行一个求倒数得到D~-1,也就是求平均,进行一个归一化的操作。

在这里插入图片描述
正常情况我们是邻接矩阵右乘特征矩阵,再左乘一个度矩阵,如下图
在这里插入图片描述
而根据矩阵乘法结合律,我们可以先让度矩阵和邻接矩阵相乘,再右乘特征矩阵
在这里插入图片描述
这样就相当于我们的度矩阵对邻接矩阵进行一个scale变换,也就是类似归一化处理。

但是这里还有一个问题,度矩阵左乘邻接矩阵,相当于是对邻接矩阵的行做归一化。
ps:矩阵A,矩阵B。AB相当于A对B做行变换,BA相当于A对B做列变换

所以,为了考虑周全,我们除了对行做归一化处理,还需要对列做归一化处理。
在这里插入图片描述
综上,我们会形成一个新的邻接矩阵,分别用度矩阵对它的行和列做归一化处理,最后再乘特征矩阵。

这里还有一个问题,因为我们分别做了行和列的归一化,就相当于对邻接矩阵的每一个值都归一化了两次。这就会导致数据被弄小了。

所以对于度矩阵我们还要将它进行开根处理,如下图:
在这里插入图片描述
这里可能会有疑问:为什么GCN中非要左乘右乘还要对度矩阵开根。。。

十、GCN变换原理解读

在这里插入图片描述

举一个通俗的例子:
图中的关系网络中,绿色框连接很多其他节点,也就是该节点度比较大。红色框就是连接了绿色,也就是只有一个度。

那如果我们要预测红色框的属性,如果你只考虑度的话,那就肯定大比例是绿色框的特征。但是绿色框又连接了其他很多的节点。说明绿色框是和大部分节点是有相同特征,难道仅仅因为红色框和绿色框相连,就说明红框有绿框所有特征吗?显然这是考虑不周全的。

所以,一个节点与其他节点相连,并不意味着该节点拥有其他节点的所有特征

我们还需要考虑到其他节点的邻接矩阵的权重。
在这里插入图片描述
考虑到其他节点度权重之后,如果其他相邻节点的度非常大,那么这个相邻节点对我们指定节点的影响权重就会减小。

在这里插入图片描述
整体公式如上图,首先是获得更新过的邻接矩阵(要基于度进行更新)
在这里插入图片描述
然后邻接矩阵和特征矩阵相乘,重新组合特征。然后做一个映射,乘W(0)
在这里插入图片描述
然后乘一个ReLU,第一层就完事了。
在这里插入图片描述
第二层还是用邻接矩阵去做,再乘一个第二层的可学习参数W(1)。如果后续要做多分类,连一个softmax即可。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



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

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

相关文章

【Android面试八股文】你能说一说View绘制流程与自定义View注意点吗?

文章目录 一、自定义View的构造函数以及各参数的用法二、自定义View的几种方式三、自定义View的绘制流程四、自定义View需要注意的一些点五、举个例子一、自定义View的构造函数以及各参数的用法 在Android中,自定义View通常需要提供多个构造函数,以适应不同的使用场景。主要…

创建OpenWRT虚拟机

环境:Ubuntu 2204,VM VirtualBox 7.0.18 安装必备软件包: sudo apt update sudo apt install subversion automake make cmake uuid-dev gcc vim build-essential clang flex bison g gawk gcc-multilib g-multilib gettext git libncurses…

C语言中操作符详解(一)

众所周知,在我们的C语言中有着各式各样的操作符,并且在此之前呢,我们已经认识并运用了许许多多的操作符,都是诸君的老朋友了昂 操作符作为我们使用C语言的一个非常非常非常重要的工具,诸君一定要加以重视,…

大模型如何改变世界?李彦宏:未来至少一半人要学会“提问题“

2023年爆火的大模型,对我们来说意味着什么? 百度创始人、董事长兼CEO李彦宏认为,“大模型即将改变世界。” 5月26日,李彦宏参加了在北京举办的2023中关村论坛,发表了题为《大模型改变世界》的演讲。李彦宏认为&#…

在centos服务器上部署nginx容器

1.下载nginx镜像 2.导入镜像 docker load -i nginx.tar 3. 查看导入的镜像 docker images 4. 运行镜像 docker run -d -p 80:80 --name my-nginx nginx 5. 访问Nginx 其他 1.查看所有正在运行的Docker容器:docker ps 2.查看所有镜像:docker images 3.使用Docker命令…

Html集成 vue3,js文件访问vue内的方法和属性

标题页面代码如下 如下代码,假设index.js文件中有个 getUserInfo函数, 1.我们首先需要把 let vm app.mount(‘#app’);的vm传到js文件中,这样才能访问vue中定义的元素和函数 2.vue中定义的函数需要return出去才能在js文件中调用 3.js文件中,调用vue中的函数作为参数即可传参到…

为什么我在 PostgreSQL 中 Commit 很慢?

有时,我们的一位客户会查看数据库中最耗时的语句(使用pg_stat_statements或pgBadger),并发现COMMIT排名靠前。通常,COMMIT这是 PostgreSQL 中非常快的语句,因此值得研究。在本文中,我将探讨速度…

求职刷题力扣DAY24--回溯算法

1. 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2: 输入&#xff1…

Go微服务: redis分布式锁在集群中可能遇到的问题及其解决方案

概述 我们的 redis 一般都是集群来给我们程序提供服务的,单体的redis现在也不多见 看到上面是主节点redis和下面是6个重节点redis,主节点和重节点的通讯都是畅通没问题的这个时候,我们有 gorouting 写我们的数据,那它就会用到我们…

(Python)可变类型不可变类型;引用传递值传递;浅拷贝深拷贝

从一段代码开始说事,先上代码: a [[1],[2],[3]] b [[4,5],[6,7],[7,8]] for i,j in zip(a,b):print(i,j)i [9]#i[0] 8j[:2][1,2]print(i, j) print(a) print(b) 运行的结果: [1] [4, 5] [9] [1, 2] [2] [6, 7] [9] [1, 2] [3] [7, 8] …

Homebrew使用

官网:https://brew.sh/ 安装: 简介:https://www.jianshu.com/p/f4c9cf0733ea 比如,安装maven: 1、brew install maven 2、查看安装路径:brew list maven 具体参考:https://blog.csdn.net/m0_67402970/arti…

日语 13 14

13. スピーチの依頼 いらい 自信 自信 自信 自信 自信 じしん 折り入って 折り入って 折り入って おりいって  诚恳 頼み 頼み 頼み 頼み 頼み  たのみ 请求 整備 整備 整備 整備 整備 せいび 维修 肥満 肥満 肥満 肥満 肥満 ひまん 肥胖 権利 …

jigdo无法下载的文件

问题描述 用jigdo下载Debian的iso镜像,剩下最后一个文件下载不了,提示信息: Found 0 of the 1 files required by the template Copied input files to temporary file debian-12.5.0-amd64-DLBD-2.iso.tmp - repeat command and supply mo…

torch.max函数

torch.max函数的用法 第一种第二种 官方介绍:Link 有两种使用场景,输入的参数不同以及返回值不同: 第一种 没有参数dim,但这种只适合一维张量。 torch.max(input) → Tensor Returns the maximum value of all elements in the…

MPLS-LDP(个人学习笔记)

定义 标签分发协议LDP(Label Distribution Protocol)是多协议标签交换MPLS的一种控制协议,负责转发等价类FEC的分类、标签的分配以及标签交换路径LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程 术语 LDP会话&a…

【尚庭公寓SpringBoot + Vue 项目实战】移动端找房功能(二十一)

【尚庭公寓SpringBoot Vue 项目实战】移动端找房功能(二十一) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端找房功能(二十一)1、业务介绍2、接口开发2.1、地区信息2.2、获取全部支付方式列表2.3、房间信息2.2.1. 根据条…

python基础1.1-格式化输出(%用法和format用法)

目录 %用法 format用法 %用法 1、整数的输出 %o —— oct 八进制 %d —— dec 十进制 %x —— hex 十六进制 1 >>> print(%o % 20) 2 24 3 >>> print(%d % 20) 4 20 5 >>> print(%x % 20) 6 142、浮点数输出 (1)格式化…

鸿蒙开发系统基础能力:【@ohos.accessibility (辅助功能)】

辅助功能 说明: 本模块首批接口从 API version 7 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import accessibility from ohos.accessibility;AbilityState 辅助应用状态类型。 系统能力:以下各项对应的…

智能体合集

海外版coze: 前端代码助手 后端代码助手: 前端代码助手:

glXMakeCurrent 退出

glXMakeCurrent 退出 X Error of failed request: GLXBadDrawable Major opcode of failed request: 146 (GLX) Minor opcode of failed request: 29 (X_GLXGetDrawableAttributes) Serial number of failed request: 90 Current serial number in output stream: …