图神经网络 GNN

之前经常看到图神经网络的内容,但是一直都觉得很难,就没有继续了解,现在抽空学习了一下,简单了解GNN是个什么东西,还没有进行代码实践,随着后续的学习,会继续更新代码的内容,这里先记录一下,方便以后查阅。

图神经网络 GNN

  • 图的基本内容
    • 图的基本知识
      • 图的基本元素
      • 图的表示——邻接矩阵
      • 把一些内容表示成图
        • 图片表示成图
        • 将一句话表示成图
        • 分子结构表示成图
        • 社会人物关系表示成图
      • 图的表示——邻接表
      • 图的度和邻居
      • 结构特征、节点特征、边特征
      • 图的分类
    • 图学习的优势
    • 图学习的应用
      • 节点级别任务
      • 边级别任务
      • 图级别任务
    • 图学习算法的分类
  • 图神经网络 GNN
    • 什么是GNN
    • 图神经网络的目的
    • 最简单的GNN层
    • 通过池化信息对GNN预测
    • Passing messages between parts of the graph
    • Learning edge representations
    • 加入全局信息
    • 多层GNN的作用
  • 图卷积神经网络 GCN
    • 半监督学习
    • GCN的计算
      • 图中基本组成
      • 特征计算方法
      • 邻接矩阵的变换
    • GCN层数
  • 参考资料

图的基本内容

图的基本知识

图的基本元素

图是由一些点和一些线构成的,能表示一些实体之间的关系,图中的点就是实体,线就是实体间的关系

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

为了进一步描述每个节点、边或整个图,我们可以在图的每个部分中存储信息

在这里插入图片描述

每个顶点、边和整张图都可以用一个向量来表示,在这个例子中,顶点的向量有六个值,柱体的高矮就表示该值的大小,每条边用一个长为8的向量来表示,全局用一个长为5的向量来表示

图的表示——邻接矩阵

在这里插入图片描述

把一些内容表示成图

图片表示成图

在这里插入图片描述

将一句话表示成图

在这里插入图片描述

分子结构表示成图

在这里插入图片描述

社会人物关系表示成图

在这里插入图片描述

图的表示——邻接表

图上有四种信息:顶点的属性,边的属性,全局信息以及连接性(即为每条边连接的是哪两个顶点)。前三个信息都能用向量来表示,怎么表示连接性呢?

我们可以用邻接矩阵来表示,该矩阵会是一个方阵,但是有一些问题。这个矩阵可能会非常大而且很稀疏,在空间上效率低下,并且计算比较困难。另外将邻接矩阵的行或列的顺序进行交换不会改变其属性的。

比如下面两张图都是前面“Othello"的人物关系图,看着不一样只是因为行和列的顺序不同,但是表示的信息是一样的。这就意味着如果你设计一个神经网络,无论你用下面两张图中的哪一张,都要保证得到的结果是一样的

在这里插入图片描述

下面的示例显示了可以描述这个 4 个节点的小图的每个邻接矩阵。

在这里插入图片描述

如果既想高效的存储邻接矩阵,又想这个顺序不会影响神经网络的结果,就可以用邻接链表的方式来表示邻接矩阵

比如下方这个,顶点,边和全局信息都用标量来表示,也可以用向量,连接性用邻接链表来表示,邻接链表的数量和边的数量是一致的,第 i i i项表示的是第 i i i条边连接的两个顶点;这样表示就很高效,而且不会受到顺序的影响

在这里插入图片描述

图的度和邻居

在这里插入图片描述

结构特征、节点特征、边特征

在这里插入图片描述

图的分类

在这里插入图片描述

在这里插入图片描述

图学习的优势

在这里插入图片描述

在这里插入图片描述

图学习的应用

在这里插入图片描述

节点级别任务

前面武术班的例子,假如说两个老师决裂,根据该社交图预测学生会选择哪个老师

在这里插入图片描述

金融诈骗检测

在这里插入图片描述

目标检测

在这里插入图片描述

边级别任务

先给出一张图片,然后经过语义分割将人物给分割出来,然后预测人物间的关系;这个图中顶点已经有了,相当于是预测边的属性

在这里插入图片描述

推荐系统

在这里插入图片描述

图级别任务

在这个任务中,目标是预测图形的属性,辨别图中是否含有两个环;该任务是分类问题

在这里插入图片描述

气味识别

在这里插入图片描述

图学习算法的分类

在这里插入图片描述

图神经网络 GNN

什么是GNN

A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-context) that preserves graph symmetries (permutation invariances).

GNN 是对图的所有属性(节点、边、全局上下文)的可优化变换,可保留图对称性(排列不变性)。

这里的GNN是用“信息传递神经网络”框架来搭建的,GNN的输入是一个图,输出也是一个图,它会对你的图的属性(点,边,全局信息)进行变换,但不会改变图的连接性,就是哪条边连接哪条顶点,这个信息是不会改变的。

无论事情整的多么复杂,我们用图神经网络的目的就是整合特征

图神经网络的目的

在这里插入图片描述

最简单的GNN层

对顶点向量、边向量和全局向量分别构造一个多层感知机(MLP),输入的大小和输出的大小是相同的,这三个MLP就组成了一个GNN的层,输入是一个图,输出也是一个图,并且连接性不变

在这里插入图片描述

满足了上文中对GNN的第一个要求,只对属性进行变换,并不改变图的结构;并且MLP是对每个向量独自作用,对样本前后顺序没有要求,所以也就满足了图的排列不变性,满足了第二个要求。

通过池化信息对GNN预测

我们已经构建了一个简单的 GNN,但是我们如何在上面描述的任务进行预测呢?

考虑最简单的情况,例如前面讲到的武术馆的那张社交图。根据那张图来预测学生最终会选择哪个老师,顶点已经用向量来表示,可以直接加一个输出为2的全连接层。

在这里插入图片描述

但是,如果顶点中没有信息,信息储存在边中,我们就需要一种收集边信息的方法,将其用作顶点预测。我们可以通过池化来完成这一步。

在这里插入图片描述

如果我们只有边特征,并且尝试预测二分类节点信息,我们可以使用池化将信息路由(或传递)到需要去的地方,模型看起来像这样

在这里插入图片描述

如果我们只有节点特征,并尝试预测二分类边信息,则模型如下所示

在这里插入图片描述

如果我们只有节点级特征,并且需要预测二分类全局属性,则需要将所有可用的节点信息收集在一起并聚合它们。这类似于 CNN 中的全局平均池层。对于边也可以进行同样的操作。

在这里插入图片描述

我们可以将最简单的GNN模型总结成如下的结构。
一张图输入,经过GNN层(实质上就是三个分别对应点、边和全局的MLP),输出一个属性已经变换但是连接性不变的图,在经过全连接层,得到输出。

在这里插入图片描述

这个结构中,我们没有利用到图各部分之间的连接性,每个部分都是单独处理的,仅仅在池化的时候用了其他部分的信息,下面将告诉大家,怎么来汇集全图信息。

Passing messages between parts of the graph

我们可以在GNN层中使用池化来感知到图形的连通性,做出更复杂的预测。可以通过passing messages来完成,通过消息传递,相邻节点或边缘传递信息并影响彼此的更新。

消息传递分为三步:

  1. 对于图中的每个节点,收集所有相邻节点嵌入(或消息)。

  2. 通过聚合函数(如sum)聚合所有消息。

  3. 所有合并的消息都通过一个更新函数传递,通常是一个学习过的神经网络。

在这里插入图片描述

消息传递可以在顶点或边之间发生,这是我们利用图形连结性的关键,我们将在GNN层中构建更详细的消息传递变体,以产生具有增强表现力和力量的GNN模型。

这让人想起标准卷积:本质上,消息传递和卷积是聚合和处理元素邻居信息以更新元素值的操作。在图形中,元素是一个节点,在图像中,元素是一个像素。但是,图中相邻节点的数量可以是可变的,这与图像中每个像素具有固定数量的相邻元素不同。

通过将消息传递GNN层堆叠在一起,节点最终可以合并来自整个图的信息

在这里插入图片描述

图中红框表示的是聚合该顶点1近邻的顶点信息,就是聚合距离该顶点为1的顶点信息。

Learning edge representations

我们的数据集并不总是包含所有类型的信息(节点、边和全局上下文)。当我们想要对节点进行预测,但我们的数据集只有边信息时,我们在上面展示了如何使用池化将信息从边传递到节点,但仅限于模型的最终预测步骤。我们可以使用消息传递在 GNN 层内的节点和边之间共享信息

先把与边连接的顶点信息池化,传递到边上,边通过更新后,再把与顶点相连接的边信息池化传递给顶点,再通过MLP进行更新。如果顶点和边向量的长度不一样,需要先通过投影到相同维度,再做传递。

在这里插入图片描述

我们更新哪些图属性以及更新它们的顺序是构建 GNN 时的一项设计决策。我们可以选择是否在边缘嵌入之前更新节点嵌入,或者反之亦然。这是一个开放的研究领域,具有多种解决方案 - 例如,我们可以以“编织”方式进行更新,其中我们有四种更新的表示形式,它们组合成新的节点和边表示形式:节点到节点(线性)、边到边(线性)、节点到边(边层)、边到节点(节点层)

在这里插入图片描述

在这里插入图片描述

加入全局信息

我们之前的消息传递,只考虑了1近邻的点,如果一个点想要了解到距离他很远的信息,这是一个问题。为此我们提出master node or context vector,这是一个虚拟的点,他可以和任何其他点或者任何边相连接,这个就是全局信息U。 U是全局信息,它可以和图中的任何信息相连接。

在汇聚顶点信息到边的时候,也会把U一起汇聚,把边信息传递给顶点的时候,也会把U一起传递;然后更新边和顶点后,将边和顶点的信息一起汇聚给U,之后做MLP更新。

在这里插入图片描述

在顶点预测中,我们可以用顶点信息、相邻顶点信息、连接边信息、全局信息中的全部或者选择其中几项,来更新顶点信息,做顶点预测;这些信息可以简单地加在一起,也可以通过其他方式汇聚在一起。

在这里插入图片描述

多层GNN的作用

层数越多,GNN的“感受野”越大,每个点考虑其他点的信息越多,考虑越全面

在这里插入图片描述

图卷积神经网络 GCN

半监督学习

GCN属于半监督学习(不需要每个节点都有标签都可以进行训练)

计算Loss时,只需要考虑有标签的节点即可。

为了减少有标签节点的Loss,其周围的点也会做相应的调整,这也是图结构的特点,因此GNN和GCN中,不需要所有节点都有标签也可以进行训练(当然至少需要一个节点有标签)

在这里插入图片描述

GCN的计算

图中基本组成

在这里插入图片描述

特征计算方法

在这里插入图片描述

邻接矩阵的变换

在这里插入图片描述

但是现在存在一个问题:一个节点的度越大,其做矩阵乘法后的值就越大(累加次数变多了),这种情况是不好的(相当于一个人认识的人越多,其的特征值就越大,这样不好)

为了解决这个问题,我们需要对度矩阵求倒数,相当于平均的感觉,对度数大的节点加以限制

在这里插入图片描述

在这里插入图片描述
上面的左乘相当于对行做了归一化操作,那么列也需要做归一化操作

在这里插入图片描述

但是又有问题了,行和列都做了归一化,那不是会存在2次归一化的情况吗(行列重叠处)

所以我们需要在度矩阵倒数那加一个0.5次方来抵消这个2次归一化的影响

在这里插入图片描述

GCN层数

图卷积也可以做多层,但是一般不做太深层,一般只做2-3层(类似于一种说法,你只需要认识6个人就可以认识全世界)

实验表明:GCN中,深层的网络结构往往不会带来更好的效果。
直观解释:我表哥认识的朋友的朋友的朋友的朋友认识市长,不代表我和市长关系就很好。

层数越多,特征表达就越发散,一般2-5层即可

在这里插入图片描述

参考资料

A Gentle Introduction to Graph Neural Networks

零基础多图详解图神经网络(GNN/GCN)【论文精读】

不愧是公认最好的【图神经网络GNN/GCN教程】,从基础到进阶再到实战,一个合集全部到位!

图神经网络7日打卡营

图神经网络简介,什么是图神经网络,GNN

【图神经网络实战】深入浅出地学习图神经网络GNN(上)

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

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

相关文章

Linux动态链接库.so文件

一、动态库和静态库的区别 库是一个二进制文件,包含的代码可以被程序调用,如标准库、线程库。Windows 和 Linux下的库文件格式不兼容。 Windows环境:静态库是 .lib 文件,共享库是 .dll 文件 Linux环境:静态库是 .a 文…

数据结构与算法(八):排序算法

参考引用 Hello 算法 Github:hello-algo 1. 选择排序 选择排序的工作原理非常直接:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾,设数组的长度为 n 初始状态下,所有元素未排序&…

HTTP协议的请求协议和响应协议的组成,HTTP常见的状态信息

HTTP协议 什么是协议 协议实际上是某些人或组织提前制定好的一套规范,大家只要都按照这个规范来就可以做到沟通无障碍 HTTP协议是W3C(万维网联盟组织)制定的一种超文本传输通信协议(发送消息的模板和数据的格式),除了传送字符串,还有声音、视频、图片等流媒体等超文本信息 …

伦敦银最新走势不利怎么办

跟其他的投资品种一样,伦敦银的价格走势在不停的变化,而且由于本身产品具有较高的资金杠杆,所以万一行情走势变得不利,在很短的时间之内就会对投资者的账户造成严重损失,所以投资者应该对此作好充分的准备。 伦敦银的最…

LabVIEW利用以太网开发智能液位检测仪

LabVIEW利用以太网开发智能液位检测仪 目前,工业以太网接口在国内外的发展已经达到了相当深入的程度,特别是在自动化控制和工业控制领域有着非常广泛的应用。在工业生产过程中,钢厂的连铸机是前后的连接环节,其中钢水从大钢包进入…

Spring Boot如何配置CORS支持

Spring Boot如何配置CORS支持 CORS(跨源资源共享)是一种Web浏览器的安全性功能,用于控制网页上的脚本文件从不同的源加载其他网页资源。在开发现代Web应用程序时,通常需要跨域请求不同的资源,如API服务或其他Web应用程…

一个tomcat下如何部署多个项目?

1、不修改端口,部署多个项目 清楚tomcat目录结构的应该都知道,项目包是放在webapps目录下的,那能否在同一个tomcat的webapps目录下运行多个不同项目呢? 答案是可以的。 1、将多个项目包放入webapps文件夹下 2、修改conf下的serv…

reactjs开发环境搭建

Reactjs是一个前端web页面应用开发框架工具集,其支持前端构建页面以及后端构建页面两种常用的开发场景,其中,支持reactjs的开发框架包括next.js、remix、gatsby以及其他,本文主要描述next.js开发环境的搭建,next.js是一…

Verilog HDL阻塞赋值和非阻塞赋值笔记

1. module test( input wire clk, input wire b, output reg a, output reg c ); always(posedge clk) begin ab; ca; end endmodule 上面的代码在vivado中综合后的电路为: 2. module test( input wire clk, input wire b, outp…

springcloud之项目实战环境准备

写在前面 为了更好的学习springcloud,我们来一起开发一个实战项目,加深理解。 1:项目介绍 在开始项目实战之前先来做一个整体的项目介绍,从而能够让对项目的整体架构和模板有一个比较清晰的认知。 大家都知道双11,…

JS进阶-原型

原型 原型就是一个对象,也称为原型对象 构造函数通过原型分配的函数是所有对象所共享的 JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象 这个对象可以挂载函数,对象实…

64.最小路径和

法:动态规划 第一行的元素,只有通过左侧右移才能到达;第一列的元素,只有通过上方的下移才能到达。其他位置元素:比较从上方元素向下移动的路径和和左侧元素向右移动的路径和的较小值dp[i][j]:到达(i,j)位置…

中国移动咪咕、阿里云、华为“秀肌肉”,这届亚运会的“高光”不止比赛

文 | 智能相对论 作者 | 青月 竞技体育的发展,其实也可以看作是一部“技术进化史”。 在1924年的巴黎,广播首次进入奥运会,人们第一次可以通过报纸以外的方式了解奥运会。 1928年,在荷兰申办的阿姆斯特丹奥运会,高…

【jvm--方法区】

文章目录 1. 栈、堆、方法区的交互关系2. 方法区的内部结构3. 运行时常量池4. 方法区的演进细节5. 方法区的垃圾回收 1. 栈、堆、方法区的交互关系 方法区的基本理解: 方法区(Method Area)与 Java 堆一样,是各个线程共享的内存区…

【力扣】单调栈:901. 股票价格跨度

【力扣】单调栈:901. 股票价格跨度 文章目录 【力扣】单调栈:901. 股票价格跨度1. 题目介绍2. 思路3. 解题代码参考 1. 题目介绍 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格…

75.颜色分类

原地排序&#xff1a;空间复杂度为1 class Solution { public:void sortColors(vector<int>& nums) {if(0){//法一&#xff1a;单指针两个遍历int nnums.size();int ptr0;for(int i0;i<n;i){if(nums[i]0){swap(nums[i],nums[ptr]);ptr;}}for(int iptr;i<n;i){…

【Proteus仿真】【STM32单片机】汽车倒车报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、按键、继电器电机模块、DS18B20温度传感器、蜂鸣器LED、HCSR04超声波等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显…

2021年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 对于字典infor {“name”:“tom”, “age”:13, “sex”:“male”}&#xff0c;删除"age":13键值对的操作正确的…

数据压缩与管理:掌握Linux VDO和LVM的力量

1.逻辑卷(LVM&#xff0c;Logical Volume Management) 动态的为服务器磁盘添加空间&#xff0c;而不会影响原磁盘的数据&#xff0c;也不需要对原始磁盘重新分区。 1.1 LVM介绍 以下是LVM的示意图&#xff1a; 我们拿到一块硬盘后首先对齐进行划分分区&#xff0c;也就得到…

Godot2D角色导航教程(角色随鼠标移动)

文章目录 运行结果2D导航概述开始前的准备2D导航创建导航网格创建角色 其他文章 运行结果 2D导航概述 Godot为2D和3D游戏提供了多个对象、类和服务器&#xff0c;以便于基于网格或基于网格的导航和路径查找。 说到导航&#xff0c;就得说一下导航网格&#xff0c;导航网格定义…