当前位置: 首页 > article >正文

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

目录

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

 (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博客

相关文章:

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

目录 一、什么数据可以表示成一张图 (1)什么是图? (2)如何表示图的属性 (3)images as graphs(将图片表示为图) (4)text as graphs&#xff08…...

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

RK3588 编译 openssl

在编译 OpenSSL 时,你需要确保你的系统环境已经配置好了所有必要的依赖和编译工具。下面是一般步骤和一些常见问题的解决方案,特别是在使用 RK3588 这类的 ARM 处理器上。 1. 安装依赖 首先,你需要安装编译 OpenSSL 所需的依赖。这通常包括编译器(如 GCC)、make 工具、Per…...

Git前言(版本控制)

1.Git 目前世界上最先进的分布式版本控制系统。 git官网:https://git-scm.com/ 2.版本控制 2.1什么是版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容修改历史,方便查看更改历史记录备份以便恢复以前…...

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…...

Manus(一种AI代理或自动化工具)与DeepSeek(一种强大的语言模型或AI能力)结合使用任务自动化和智能决策

一、Manus与DeepSeek差异 十分好奇DeepSeek和Manus究竟谁更厉害些,DeepSeek是知识型大脑,Manus则是全能型执行者。即DeepSeek专注于语言处理、知识整合与专业文本生成。其核心优势在于海量参数支持的深度学习和知识推理能力,例如撰写论文、润…...

Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)

九、匿名函数 lambda表达式 语法规则&#xff1a; 变量 lambda 参数1,参数2,…:返回值 例&#xff1a;用lambda简化下述操作 def func(a,b):return ab ret func(1, 2) print(ret)代码&#xff1a; fn lambda a,b:ab print(fn) print(fn(12,13))结果&#xff1a; <fun…...

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

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

【PyCharm】Python和PyCharm的相互关系和使用联动介绍

李升伟 整理 Python 是一种广泛使用的编程语言&#xff0c;而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境&#xff08;IDE&#xff09;。以下是它们的相互关系和使用联动的介绍&#xff1a; 1. Python 和 PyCharm 的关系 Python&#xff1a;一种解释型、…...

【ES6】基础特性总结

概述 仅个人使用&#xff0c;复习ES6的笔记&#xff0c;比较粗糙&#xff0c;仅适用于浏览器端。 数据类型 ES6&#xff08;ECMAScript 2015&#xff09;引入了一些新的数据类型和对现有数据类型的扩展。以下是ES6中数据类型的一个简要总结表格&#xff1a; 数据类型描述Nu…...

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

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

无障碍阅读(Web Accessibility)NVDA打开朗读查看器后,enter键不生效的原因

用NVDA测试Web Accessibility时&#xff0c;打开朗读查看器&#xff0c;enter键会无效&#xff0c;而不打开测试器&#xff0c;就没有问题&#xff0c;很大原因是被应用的元素不是可聚焦的&#xff0c;解决方法尝试&#xff1a; 将标签改为可聚焦的语义化标签&#xff0c;如 b…...

基于docker+python+paddleocr构建自己本地化ocr服务

1、使用FastAPI创建服务实例 1.1、正常程序 from fastapi import FastAPI, UploadFile, File, HTTPException from typing import List from paddleocr import PaddleOCR import numpy as np from PIL import Image import io import loggingapp FastAPI(title"游戏截图…...

【视频】V4L2、ffmpeg、OpenCV中对YUV的定义

1、常见的YUV格式 1.1 YUV420 每像素16位 IMC1:YYYYYYYY VV-- UU– IMC3:YYYYYYYY UU-- VV– 每像素12位 I420: YYYYYYYY UU VV =>YUV420P YV12: YYYYYYYY VV UU =>YUV420P NV12: YYYYYYYY UV UV =>YUV420SP(最受欢迎格式) NV21: YYYYYYYY VU VU =>YUV420SP…...

歌词相关实现

歌词相关 歌词数据模型&#xff1a; // Lyric.swift class Lyric: BaseModel {/// 是否是精确到字的歌词var isAccurate:Bool false/// 所有的歌词var datum:Array<LyricLine>! }// LyricLine.swift class LyricLine: BaseModel {/// 整行歌词var data:String!/// 开始…...

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

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

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

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

【18】单片机编程核心技巧:变量赋值与高位填充机制

【18】单片机编程核心技巧&#xff1a;变量赋值与高位填充机制 七律 变量赋值探秘 单字赋多字疑云开&#xff0c;高位零填自天来。 清零保守虽稳妥&#xff0c;强制转换更悠哉。 实验验证真章显&#xff0c;编译器间无异态。 嵌入式海行舟稳&#xff0c;类型分明避坑台。 注释…...

网络安全系统集成

随着信息技术的迅猛发展&#xff0c;网络安全问题变得越来越突出。为了应对这一挑战&#xff0c;软考网络安全系统集成应运而生&#xff0c;成为众多企业和机构的重要需求。软考网络安全系统集成旨在培养具备网络安全系统设计、实施和维护能力的专业人才&#xff0c;以满足国家…...

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

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

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

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

数字孪生技术在工业制造中的应用探索

一、数字孪生&#xff1a;工业4.0的虚实纽带 1.1 技术定义与发展脉络 数字孪生&#xff08;Digital Twin&#xff09;通过实时数据映射&#xff0c;在虚拟空间构建物理实体的动态镜像。其演进历程&#xff1a; 概念萌芽&#xff08;2002年&#xff09;&#xff1a;NASA首次提…...

# linux有哪些桌面环境?有哪些显示服务器协议及显示服务器?有哪些用于开发图形用户界面的工具包?

linux有哪些桌面环境&#xff1f;有哪些显示服务器协议及显示服务器&#xff1f;有哪些用于开发图形用户界面的工具包&#xff1f; 文章目录 linux有哪些桌面环境&#xff1f;有哪些显示服务器协议及显示服务器&#xff1f;有哪些用于开发图形用户界面的工具包&#xff1f;1 显…...

【心理课堂】学习软件的道路上若感到了困难和迷茫怎么办

在科技飞速发展的今天&#xff0c;软件领域以其广阔的发展前景和丰厚的薪资待遇吸引着众多人投身其中。然而&#xff0c;学习软件并非一帆风顺&#xff0c;在这个过程中&#xff0c;我们难免会遇到困难和迷茫。那么&#xff0c;当我们在学习软件的道路上感到力不从心时&#xf…...

【Docker项目实战】使用Docker与Caddy部署BanBan任务管理工具

【Docker项目实战】使用Docker部署BanBan任务管理工具 一、BanBan介绍1.1 BanBan简介1.2 主要特点1.3 使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载BanBan镜像五、…...

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

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

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

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