《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文

news2025/3/13 12:31:11

目录

一、什么数据可以表示成一张图

 (1)什么是图?

(2)如何表示图的属性

(3)images as graphs(将图片表示为图)

(4)text as graphs(将文本表示为图)

(5)生活中的图

二、为什么要用图神经网络

(1)图可以用来解决什么问题

(2)将神经网络用到图上有什么挑战

三、GNN的各个模块

(1)什么是GNN

(2)the simplest GNN

MLP 更新       

汇聚操作        

 (3)信息传递(passing message between parts of the graph)

四、实验

(1) GNN Playground

(2)一些GNN设计教训的经验


distill博客文章链接:A Gentle Introduction to Graph Neural Networkshttps://distill.pub/2021/gnn-intro/博客中,很多图都是交互图,可以由读者自行操作演示。

李沐老师论文精度视频:

零基础多图详解图神经网络(GNN/GCN)【论文精读】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1iT4y1d7zP/?from=search&seid=17425771631747736862&spm_id_from=333.337.0.0这是我第一次接触深度学习文章平台Distill  Distill — Latest articles about machine learning

2017年3月20日,Google Brain的Chris Olah和Shan Carter发布了一份专注于机器学习研究的新期刊:Distill(蒸馏的意思)。不同于过去百余年间的论文,Distill摆脱以往学术论文只能在纸质版期刊发表的束缚,允许科研人员把可视化的模型和图表整合到论文里,方便读者的理解和交互。

一、什么数据可以表示成一张图

 (1)什么是图?

首先建立一个图。图表示的是一系列实体(节点)之间的关系(边)。

 图的顶点/边表示的信息叫做attribute

(2)如何表示图的属性

顶点:embedding (一条向量来表示)

边:长度为8的向量

全局信息:长度为5的向量

        把节点信息、边信息和全局信息做embedding,通俗地说就是把这些信息存储为向量的形式。所以图神经的核心步骤就是,怎么样把我们想要的信息表示成向量,以及向量是否能通过数据学习到。

(3)images as graphs(将图片表示为图)

        通常把图片表示为三维tensor,如224x224x3(学过CNN的同学就知道这里的三通道是指RGB三种颜色)。实际上我们可以把每个像素作为一个点,存在邻接关系则形成一条边。 

        中间的就是邻接矩阵,相邻则是1,不相邻则是0,【每个蓝色的点表示graph中的一条边,剩下白色的点表示没有边】,一般会是非常大的稀疏矩阵 ,将像素或像素块视为节点,并通过连接相邻节点构建图

(4)text as graphs(将文本表示为图)

文本==>一条序列

把每一个词表示成顶点,一个词和下一个词之间有一条有向边

(5)生活中的图

Molecules as graphs(将分子结构图表示为图)

Social networks as graphs(将社交网络表示为图):奥赛德剧中出现人物的社交网络情况,有边代表两个人同时出现过

Citation networks as graph(将引用网络表示为图):文章之间的引用,会生成一条边,但是往往都是有向边,因为是新文章引用旧文章,双向引用就不太现实了。

二、为什么要用图神经网络

(1)图可以用来解决什么问题

  • 图层面上的任务

给定一张图,对该图进行分类;

如上图,预测出哪些分子是具有两个环的。这个例子比较简单,可以用图的遍历来完成,当图非常复杂的时候,图神经网络可以发挥巨大作用。

  • 节点层面的任务

        上图是空手道俱乐部数据集,可以将学员分类到两个老师的队伍中。蓝色的和老师A在一个阵营,红色的和老师B在一个阵营

  • 边层面的任务

        边的预测(链路预测)的例子是通过语义分割把人物、背景拿出来,然后分析实体间的关系(属性)。比如黄衣服的人在踢绿衣服的人,他们都站在地毯上。【边上的属性都是预测得来的】

(2)将神经网络用到图上有什么挑战

最核心的问题是怎么样表示图使得图和我的神经网络是兼容的;

图上有四种信息:节点的属性、边的属性、全局的一些信息、连接性【每条边到底连接的是哪两个点】

 前面三个可以用向量来表示,那么连接性如何表示呢?

        连接性是用邻接矩阵来存储,如果图非常大,比如Wikipedia,则存储不下来。由于是邻接矩阵很稀疏,所以用稀疏矩阵来存储会更好,而稀疏矩阵在GPU上训练一直是个技术难题。并且邻接矩阵任意交换行列,会导致邻接矩阵改变,但是他们其实节点关系不变

那么想要存储高效且不受排序的影响应该如何存储呢?如下:

         上图中的节点、边和全局信息都可以用向量表示,而不一定只是标量。adjacency list能够用节点id把边的连接关系表示出来,长度==边数,第i项表示第i条边,连接的哪两个结点。 储存高效且对顺序无关。

        那么给一个如上的输入方式,怎么用神经网络来处理呢?

三、GNN的各个模块

(1)什么是GNN

        GNN是一个对图上所有的属性,包括顶点、边、全局的上下文进行的一个可以优化的变换,这个变换能够保持住图的对称性信息的【把顶点进行另外一个排序之后整个结果不会变】,GNNs是“graph-in, graph-out”(即进出模型都是graph的数据结构),他会对节点、边的信息进行变换,但是图连接性【每条边到底连接的是哪两个点】是不变的。【只改变属性不改变结构】

(2)the simplest GNN

        首先,对节点向量、边向量、全局向量分别构建一个MLP(多层感知机),MLP的输入输出的大小相同。


MLP 更新       

 三个MLP组成GNN的一层,一个图经过MLP后仍然是一个图。对于顶点、边、全局向量分别找到对应的MLP,作为其更新函数(update function)。可以看到,输出后图的属性变化了,但是图的结构没有改变,符合我们的需求。MLP对每个向量独自作用,不会影响的连接性。堆叠了多层上述的模型后得到了GNN,现在来到最后一层,对节点进行预测。 

        每个MLP是对每个向量独自作用的,不会考虑所有的连接信息,所以不管对顶点做任何排序都不会改变结果。

总结:图神经网络(GNN)中的 MLP 更新机制

        在图神经网络(GNN)中,多层感知机(MLP)被广泛用于更新图中的节点、边和全局信息。这种设计的核心思想是通过 MLP 对每个向量(节点特征、边特征或全局特征)进行独立的非线性变换,同时保持图的结构不变。这种机制不仅能够捕捉节点和边的特征,还能保持图的对称性,即对节点的重新排序不会影响最终结果。

        最后一层的输出是如何得到我们要的预测值呢? 

        以节点分类为例子:在节点分类任务中,目标是对图中的每个节点进行分类。每个节点的最终特征会被传递到一个全连接层,然后通过softmax函数计算每个类别的概率。


汇聚操作        

 考虑另一种情况,如果说某个节点是没有自己的属性(向量)的,应该怎么做?

        这里介绍到pooling的方法。做法就是把节点相连的边向量拿出来,全局向量拿出来,然后将这些向量相加求和,最后经过一个节点共享的全连接输出层得到节点预测结果。

        假如没有边向量而只有节点的向量,但是想对每个边做预测

        则可以汇聚相连的节点的向量到边上,如下图所示:

        一条边连接两条顶点,这两个顶点向量我们可以把他加起来然后得到这个边的向量,然后进入边向量的输出层 。

        那如果没有全局向量,只有节点向量呢?

        就把全部的节点向量汇聚起来得到一个全局的向量,经过最后全局的输出层得到全局的输出。

不管缺乏哪一类的属性,都可以通过汇聚操作得到想要的属性的向量,最后得到预测值


将上面的两块总结起来就得到一个最简单的GNN:

         一张图input----->进入一系列的GNN层【每一层都有三个MLP对应三种不同的属性】---->得到一个保持了整个图结构的输出,但是属性已经发生了变化------>根据你要对哪一个属性做预测添加合适的输出层【缺失信息的话加入合适的汇聚层】 ,即可完成我们要的一个预测

        局限性:并没有用到图的结构,仅仅是点、边向量分别做MLP的过程。在GNN block这一块并没有对它使用图的结构信息,即对每个属性做变换时,就是每个属性进入自己的MLP,并么有看到这个顶点是跟哪些边/顶点相连的等连接信息,所以他其实并没有把整个图的信息合理的更新进去你的属性里面,所以最后的结果并不能够充分利用图的信息。

 (3)信息传递(passing message between parts of the graph)

         在更新某个节点的向量时,会将自己的向量和邻居节点的向量进行聚合操作,然后再传入MLP更新节点的向量。作者说这个过程和标准卷积相似,但其实不完全是。

消息传递分三个步骤进行

  1. 对于图中每个节点,收集所有相邻的节点嵌入(或消息)
  2. 通过聚合函数聚合所有消息(如sum)
  3. 所有池化信息都通过更新函数(通常是学习的神经网络)传递

任务:对顶点向量进行更新
之前方法:将向量拿过来进入f(即MLP),直接得到顶点向量的更新
信息传递方法:将该顶点向量与其邻居向量都加在一起得到汇聚的向量,将汇聚的向量进入f进行后续操作,得到此顶点向量的更新

四、实验

(1) GNN Playground

1、Playground 展示了一个带有小分子图的图级预测任务。

  • 使用 Leffingwell 气味数据集,该数据集由具有相关气味感知(标签)的分子组成。预测分子结构(图形)与其气味的关系是一个有100年历史的问题,横跨化学、物理学、神经科学和机器学习。
  • 为了简化问题,只考虑每个分子的单个二元标记,对分子图是否闻起来“刺鼻”进行分类。
  • 将每个分子表示为一个图,其中原子是包含其原子身份(碳、氮、氧、氟)的一热编码的节点,键是包含一热编码其键类型(单键、双键、三键或芳香族)的边缘。
  • 使用连续的 GNN 层构建针对此问题的通用建模模板,然后使用具有 S 形激活的线性模型进行分类。

2、具体参数说明:

  • 更新时每个属性的维度。更新函数是一个 1 层 MLP,具有 relu 激活函数和用于激活归一化的层范数。
  • 池化中使用的聚合函数:最大值、平均值或总和。
  • 更新的图形属性或消息传递的样式:节点、边和全局表示。通过布尔切换(打开或关闭)来控制它们。
  • 基线模型是一个与图无关的 GNN(所有消息传递),将末尾的所有数据聚合到一个全局属性中。切换所有消息传递函数会产生 GraphNets 架构。

3、更好地理解 GNN 如何学习图的任务优化表示—研究了 GNN 的倒数第二层激活。

可以选图神经网络有多少层,汇聚的操作:平均值、加起来、max,顶点、边、全局的向量有多大,每改变一次超参数,则会对其重新做一次训练。真实值用边框表示,预测值用实心表示。若边框和实心都是红色/蓝色,则预测正确。

(2)一些GNN设计教训的经验

  • 总的来说,图形属性的交流越多,平均模型的性能就越好。任务以全局表示为中心,因此显式学习此属性也往往会提高性能。节点表示似乎也比边表示更有用,这是有道理的,因为这些属性中加载了更多信息。
  • 从这里可以有很多方向来获得更好的性能。希望两个突出两个大方向,一个与更复杂的图算法有关,另一个与图本身有关。
  • 到目前为止, GNN 基于基于邻域的池化操作。有一些图形概念很难用这种方式表达,例如线性图形路径(连接的节点链)。设计可以在GNN中提取、执行和传播图信息的新机制是当前的一个研究领域。
  • GNN研究的前沿之一不是制作新的模型和架构,而是“如何构建图”,更准确地说,是为图注入可以利用的额外结构或关系。正如粗略地看到的,传达的图形属性越多,就越倾向于拥有更好的模型。在这种特殊情况下,可以考虑通过在节点之间添加额外的空间关系、添加不是键的边缘或子图之间的显式可学习关系来使分子图的特征更加丰富。

ref:

 【李沐精读GNN论文总结】A Gentle Introduction to Graph Neural Networks - 知乎

图神经网络简介---A gentle introduction to Graph Neural Networks-CSDN博客

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

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

相关文章

[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级

SpringCloud学习大纲 一、需求说明: 需求1:通过fallback属性进行统一配置 a.问题分析: 1.需要实现cloudalibaba-consumer-nacos-order83模块通过OpenFeign调用cloudalibaba-provider-payment9001 83服务通过OpenFeign调用 9001微服务&…

设计模式-结构型模式-装饰器模式

概述 装饰器模式 : Decorator Pattern : 是一种结构型设计模式. 作用 : 允许你动态地给对象添加功能或职责,而无需修改其原始类的代码,非常的符合 开闭原则。 实现思路 :通过创建一个包装对象(即装饰器),来…

visual studio配置opencv

文章目录 step1 下载opencvstep2 配置包含目录step 3 配置链接器step4 配置环境变量并重启vs2022step5 检查代码 step1 下载opencv 下载 opencv-4.8.0-windows.exe https://cloud.189.cn/web/share?codefUnqEb7naUra step2 配置包含目录 step 3 配置链接器 step4 配置环境变…

docker修改daemon.json文件后无法启动

1.问题描述 使用阿里云docker镜像安装的docker,安装成功后默认可以启动。但是修改daemon.json配置后docker服务无法启动,提示如下错误: 从上图发现,docker服务默认使用阿里docker镜像仓库 2.解决方法 根据提示找到docker服务目…

Linux网络:网络与操作系统1

本文是介绍网络的基本结构,以及和OS之间有什么关系 OSI七层模型 引入 使用网络是为了解决信息的长距离传送,那就需要解决四个问题: 接收方如何使用数据传输的可靠性主机如何定位数据包在局域网如何转发 人们选择用网络协议(t…

姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗

《仁心俱乐部》在芒果 TV 播出,湖南卫视金鹰独播剧场也随之播出,这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜,她为患者检查身体时动作娴熟,与患者沟通时展现出的耐心和专注,都展现出很高的专业…

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况,这个时候就需要一个日志记录仪、黑匣子,可以记录产品的工作情况,当出现异常时,可以搜集到上下文的数据,从而判断问题原因。 之前从网上买过,但是出现过丢数据的情况耽误…

51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版

前言:本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤,包括软件安装获取途径、工程创建、器件添加(如单片机 AT89C51、晶振、电容、电阻、按键等)、外围电路&…

使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例

引言 在智能交通、地图定位等应用场景中,经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理,通过固定区域裁剪,来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 开发资料下载链接:http://www.prechin.cn/gongsixinwen/208.html 单片机套装:普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

Vue项目上传到GitHub,vscode拉取vue项目更新后推送到GitHub上

1、新建Vue项目 2、在GitHub新建仓库 3、留意建立好仓库后提示的命令 4、进入vue项目目录,在空白处点击鼠标右键选择git bash here 5、输入命令 git init git add . git commit -m "注释内容" 输入之前创建GitHub仓库后记下的代码的第一句 git remote…

InternVL:论文阅读 -- 多模态大模型(视觉语言模型)

更多内容:XiaoJ的知识星球 文章目录 InternVL: 扩展视觉基础模型与通用视觉语言任务对齐1.概述2.InternVL整体架构1)大型视觉编码器:InternViT-6B2)语言中间件:QLLaMA。3)训练策略(1&#xff09…

【BUG】类文件具有错误的版本 61.0, 应为 52.0,请删除该文件或确保该文件位于正确的类路径子目录中。

报错: [ERROR] 类文件具有错误的版本 61.0, 应为 52.0 [ERROR] 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图: 原因:Java 版本和 Spring 不兼容,显示 Spring 版本过高 解决方法 1. 使用更高版本的 J…

康谋应用 | 基于多传感器融合的海洋数据采集系统

在海洋监测领域,基于无人艇能够实现高效、实时、自动化的海洋数据采集,从而为海洋环境保护、资源开发等提供有力支持。其中,无人艇的控制算法训练往往需要大量高质量的数据支持。然而,海洋数据采集也面临数据噪声和误差、数据融合…

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫(Pattern Guard) 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式,并且模式守卫为真的情况下才会执行。如果模式守卫为假,则会…

MCP-代码解读TypeScript版本

MCP-代码解读TypeScript版本 文章目录 MCP-代码解读TypeScript版本1-参考网址2-TypeScript代码3-代码解读1-[非重点]定义函数2-[非重点]定义工具说明3-[重点]运行MCP服务 1-参考网址 B站视频参考 2-TypeScript代码 import { McpServer } from "modelcontextprotocol/sd…

写了一个二叉树构造函数和画图函数,方便debug

代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…

docker 小记

一、卸载 查看当前版本 docker -v2. 如果有&#xff0c;先停止docker systemctl stop docker如果是yum安装&#xff0c;卸载方式为 #已防版本冲突&#xff0c;直接卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

k9s入门及实战

概述 k9s&#xff0c;GitHub&#xff0c;是用于管理k8s集群的CLI&#xff0c;提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能&#xff0c;k9s会以特定时间间隔监控k8s的变化&#xff0c;默认为2秒&#xff0c;并提供后续命令来与k8s资源进行交互&#xff0c;k9s可让…