图神经网络 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.xdnf.cn/news/148574.html

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

相关文章

互联网Java工程师面试题·MyBatis 篇·第二弹

目录 16、Xml 映射文件中,除了常见的 select|insert|updae|delete标签之外,还有哪些标签? 17、Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复? 18、为什么说 Mybatis 是半自动 ORM 映射…

conda安装使用jupyterlab注意事项

文章目录 一、conda安装1.1 conda安装1.2 常见命令1.3 常见问题 二、jupyterlab2.1 jupyterlab安装和卸载2.2 常见错误2.2.1 版本冲突,jupyterlab无法启动2.2.2 插件版本冲突 2.3 常用插件2.3.1 debugger2.3.2 jupyterlab_code_formatter 2.4 jupyter技巧 一、conda…

点云处理开发测试题目

点云处理开发测试题目 文件夹中有一个场景的三块点云数据,单位mm。是一个桌子上放了一个纸箱,纸箱上有四个圆孔。需要做的内容是: 1. 绘制出最小外接立方体,得到纸箱的长宽高值。注意高度计算是纸箱平面到桌子平面的距离。 2. 计…

flink自定义窗口分配器

背景 我们知道处理常用的滑动窗口分配器,滚动窗口分配器,全局窗口分配器,会话窗口分配器外,我们可以实现自己的自定义窗口分配器,以实现我们的自己的窗口逻辑 自定义窗口分配器的实现 package wikiedits.assigner;i…

设计模式之抽象工厂模式--创建一系列相关对象的艺术(简单工厂、工厂方法、到抽象工厂的进化过程,类图NS图)

目录 概述概念适用场景结构类图 衍化过程业务需求基本的数据访问程序工厂方法实现数据访问程序抽象工厂实现数据访问程序简单工厂改进抽象工厂使用反射抽象工厂反射配置文件衍化过程总结 常见问题总结 概述 概念 抽象工厂模式是一种创建型设计模式,它提供了一种将相…

Logrus 集成 color 库实现自定义日志颜色输出字符原理

问题背景 下列代码实现了使用 Logurs 日志框架输出日志时根据级别不同,使用对应的自定义颜色进行输出。那么思考下代码的逻辑是怎么实现的呢? 效果如下: 代码如下: import ("fmt""github.com/sirupsen/logrus&q…

ARM汇编与C言语的混合编程

1. C言语如何与汇编进行交互 有些时候,我们需要在汇编代码中调用C代码,或者说C代码中调用汇编代码。 那么,汇编调用C代码,或者C代码调用汇编函数,他们的函数参数、返回值是如何传递的? 对应ARM架构来说&…

angularjs开发环境搭建

Angularjs是一个前端页面应用开发框架,其使用TypeScript作为开发语言,Angularjs的特性包括,使用组件、模板以及依赖注入的开发框架构建可扩展的web应用,使用易于集成的类库支持页面路由、页面表单、前后端接口交互等各种不同特性&…

RabbitMQ-主题模式

接上文 RabbitMQ-发布订阅模式和路由模式 1 主题模式 #通配符 代表0个或多个。*通配符 代表 1个或多个 进行测试,修改配置文件 Configuration public class RabbitConfiguration {Bean("topicExchange") //这里使用预置的Topic类型交换机public Exchan…

Android Studio实现简易计算器(带横竖屏,深色浅色模式,更该按钮颜色,selector,style的使用)

目录 前言 运行结果: 运行截屏(p50e) apk文件 源码文件 项目结构 总览 MainActivity.java drawable 更改图标的方法: blackbutton.xml bluebuttons.xml greybutton.xml orangebuttons.xml whitebutton.xml layout 布…

嵌入式Linux应用开发-驱动大全-同步与互斥③

嵌入式Linux应用开发-驱动大全-同步与互斥③ 第一章 同步与互斥③1.4 Linux锁的介绍与使用1.4.1 锁的类型1.4.1.1 自旋锁1.4.1.2 睡眠锁 1.4.2 锁的内核函数1.4.2.1 自旋锁1.4.2.2 信号量1.4.2.3 互斥量1.4.2.4 semaphore和 mutex的区别 1.4.3 何时用何种锁1.4.4 内核抢占(pree…

2023年中国体育赛事行业现状及趋势分析:体育与科技逐步融合,推动产业高质量发展[图]

体育赛事运营是指组织体育赛事或获取赛事版权,并进行赛事推广营销、运营管理等一系列商业运作的运营活动。体育赛事运营相关业务主要包括赛事运营与营销、赛事版权运营两个部分。 体育赛事运营行业分类 资料来源:共研产业咨询(共研网&#x…

MySQL面试题合集

MySQL面经知识整理 文章目录 MySQL面经知识整理一、查询相关1.什么是MySQL的连接查询,左连接,右连接,内外连接2.SQL慢查询优化的方法3.大表查询如何优化 二、索引相关1.在MySQL中,可以通过哪些命令来查看查询是否使用了索引2.MySQL的最左匹配…

实验三十四、串联型稳压电路参数的选择

一、题目 电路如图1所示。已知输入电压为 50 Hz 50\,\textrm{Hz} 50Hz 的正弦交流电,来源于电源变压器副边;输出电压调节范围为 5 ∼ 20 V 5\sim20\,\textrm V 5∼20V,满载为 0.5 A 0.5\,\textrm A 0.5A; C 3 C_3 C3​ 为消振…

在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&#xff1a…

结构和基本尺寸

声明 本文是学习GB-T 586-2015 船用法兰铸钢止回阀. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了法兰连接尺寸和密封面按 CB/T 4196、GB/T 2501 的船用法兰铸钢止回阀(以下简 称止回阀)的分类和标记、要求、试验方法、检验规…

使用Java操作Redis

要在Java程序中操作Redis可以使用Jedis开源工具。 一、jedis的下载 如果使用Maven项目&#xff0c;可以把以下内容添加到pom中 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId>…

【LeetCode热题100】--114.二叉树展开为链表

114.二叉树展开为链表 方法一&#xff1a;对二叉树进行先序遍历&#xff0c;得到各个节点被访问到的顺序&#xff0c;利用数组存储下来&#xff0c;然后在先序遍历之后更新每个节点的左右节点的信息&#xff0c;将二叉树展开为链表 /*** Definition for a binary tree node.* …

Vue+ElementUI实现动态树和表格数据的分页模糊查询

目录 前言 一、动态树的实现 1.数据表 2.编写后端controller层 3.定义前端发送请求路径 4.前端左侧动态树的编写 4.1.发送请求获取数据 4.2.遍历左侧菜单 5.实现左侧菜单点击展示右边内容 5.1.定义组件 5.2.定义组件与路由的对应关系 5.3.渲染组件内容 5.4.通过动态…

FFmpeg 命令:从入门到精通 | ffmpeg filter(过滤器 / 滤镜)

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg filter&#xff08;过滤器 / 滤镜&#xff09; FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg filter&#xff08;过滤器 / 滤镜&#xff09;ffmpeg fliter 基本内置变量视频裁剪文字水印图片水印画中画视频多宫格处理 FFmpeg 命…