A Gentle Introduction to Graph Neural Networks
A Gentle Introduction to Graph Neural Networks----《图神经网络入门》
图神经网络信息传递积累

图在我们身边随处可见,现实世界中的物体通常是根据它们与其他事物的联系来定义的。一组物体以及它们之间的联系可以很自然地用图来表示。十多年来,研究人员已经开发出了可以处理图数据的神经网络,称为图神经网络或 GNN。最近的研究提高了它们的能力和表现力。我们开始看到其在多个领域的实际应用,如物理模拟、假新闻检测、交通预测和推荐系统。
图的表示(实体(节点)集合之间的关系(边))

为了进一步描述每个节点、边或整个图,可以用向量表示节点、边或整个图

边的方向性(有向、无向)

图像表示成图
通常认为图像是带有图像通道的矩形网格,用数组(如 244x244x3 )表示。一种将图像视为具有规则结构的图的方法是,每个像素代表一个节点,并通过边与相邻像素相连。每个非边框像素正好有 8 个邻居,每个节点存储的信息是一个三维向量,代表像素的 RGB 值。

文本表示成图
为每个字符、单词或标记关联索引,并将文本表示为这些索引的序列,从而将文本数字化。这样就形成了一个简单的有向图,其中每个字符或索引都是一个节点,并通过边与后面的节点相连。

当然,在实践中,文本和图像通常不是这样编码的:这些图表示法是多余的,因为所有图像和文本都具有非常规则的结构。例如,图像的邻接矩阵具有带状结构,因为所有节点(像素)都以网格相连。文本的邻接矩阵只是一条对角线,因为每个单词只与上一个单词和下一个单词相连。
更加异构的图结构数据


社交网络表示成图。
社交网络是研究人、机构和组织集体行为模式的工具。我们可以通过将个人建模为节点,将他们之间的关系建模为边,从而建立一个代表人群的图。

与图像和文本数据不同,社交网络没有完全相同的邻接矩阵。

引用网络表示成图
其中每篇论文都是一个节点,每条有向边都是一篇论文与另一篇论文之间的引用。此外,我们还可以在每个节点中添加有关每篇论文的信息,如摘要。
图上的预测任务一般有三种类型:图级、节点级和边级
图级任务
在图级任务中,目标是预测整个图的属性。例如,对于以图表示的分子,可以预测该分子的气味,或者预测它是否会与某种疾病的受体结合。

这类似于 MNIST 和 CIFAR 的图像分类问题,这里是将标签与整幅图像关联起来。对于文本,类似的问题是情感分析,即希望一次性识别整个句子的情绪或情感。
节点级任务
节点级任务涉及预测图中每个节点的身份或角色。

节点级预测问题的一个典型例子是扎克的空手道俱乐部。其数据集是一个单一的社交网络图,由在政治分裂后宣誓效忠于两个空手道俱乐部之一的个人组成。故事讲述的是,H 先生(教练)和 John H(管理员)之间的不和导致了空手道俱乐部的分裂。节点代表空手道练习者个人,边代表这些成员之间在空手道之外的互动。预测问题是对某个成员在不和之后是忠于 H 先生还是忠于 John H 进行分类。在这种情况下,节点与教练或管理员之间的距离与这一标签高度相关。
根据图像类比,节点级预测问题类似于图像分割,我们试图标记图像中每个像素的角色。对于文本,类似的任务是预测句子中每个单词的词性(如名词、动词、副词等)。
边级任务
边级推理的一个例子是图像场景理解。除了识别图像中的物体,深度学习模型还可用于预测它们之间的关系。


挑战
- 邻接矩阵存在稀疏性
用邻接表来表示稀疏矩阵是一种既优雅又节省内存的方法。

- 邻接矩阵不唯一,不同的邻接矩阵可能会产生不同的结果
例如,前面的黑白棋图可以用这两个邻接矩阵来等价描述。它也可以用其他所有可能的节点排列来描述。

图神经网络
GNN 采用 "图入图出 "架构,即这些模型类型接受一个图作为输入,并将信息加载到其节点、边和全局上下文中,然后逐步转换这些嵌入,而不改变输入图的结构。
有了上面构建的图形数字表示法(用向量代替标量),现在就可以构建 GNN 了。我们将从最简单的 GNN 架构开始,在这个架构中,我们将学习所有图属性(节点、边、全局)的新嵌入,但我们还不会使用图的连接性。
这种 GNN 在图的每个分量上使用一个单独的多层感知器 (MLP),我们称其为 GNN 层。对于每个节点向量,我们应用 MLP,并得到一个学习到的节点向量。我们对每条边进行同样的处理,学习每条边的嵌入,同时也对全局上下文向量进行处理,学习整个图的单一嵌入。

与神经网络模块或层一样,我们可以将这些 GNN 层堆叠在一起。
由于 GNN 不会更新输入图的连接性,因此我们可以用与输入图相同的邻接表和相同数量的特征向量来描述 GNN 的输出图。但是,由于 GNN 更新了每个节点、边和全局上下文表示,因此输出图具有更新的嵌入。
通过汇集信息进行 GNN 预测
如果任务是对节点进行二元预测,而图中已经包含节点信息,那么方法就很简单–对每个节点嵌入应用线性分类器。

然而,事情并不总是那么简单。例如,图中的信息可能存储在边中,但节点中没有信息,但仍需要对节点进行预测。我们需要一种方法来收集边上的信息,并将其提供给节点进行预测。我们可以通过汇集来实现这一目的,将与该节点的相邻边进行求和。


相反,如果我们只有节点级特征,并试图预测边级信息,则将这条边上的节点进行求和,那么模型看起来就像这样。

如果我们只有节点级特征,但需要预测全局属性,我们就需要将所有可用的节点信息收集在一起,然后进行聚合。这与 CNN 中的全局平均池化层类似。

现在我们已经证明,我们可以建立一个简单的 GNN 模型,并通过在图的不同部分之间传递信息来进行二进制预测。这种汇集技术将成为构建更复杂 GNN 模型的基石。如果我们有了新的图属性,只需定义如何将信息从一个属性传递到另一个属性即可。
请注意,在这个最简单的 GNN 结构中,我们在 GNN 层内完全没有使用图的连通性。每个节点、每条边以及全局上下文都是独立处理的。我们只在汇集预测信息时使用连接性。
在图形各部分之间传递信息
我们可以使用消息传递,使相邻节点或边交换信息,并影响彼此的更新嵌入。这些步骤是利用图的连通性的关键。我们将在 GNN 层中建立更复杂的消息传递变体,从而产生表现力和功能越来越强的 GNN 模型。通过将消息传递 GNN 层堆叠在一起,一个节点最终可以整合来自整个图的信息:经过三层之后,一个节点就可以获得离它三步远的节点的信息。

边和点传递信息的不同方式

一些影响GNN性能的设计因素:信息传递方式、嵌入维度、层数和聚合操作类型。
维度越高的模型,其平均值和下限性能往往越好,但最大值却没有发现同样的趋势。

虽然平均性能随着层数的增加而增加,但性能最好的模型不是三层或四层,而是两层。此外,性能下限随着层数的增加而降低。这种效应以前也观察到过,层数越多的 GNN 传播信息的距离就越远,其节点表征就有可能被多次连续迭代 “稀释”。

求和比求均值的性能略有提高,但求最大值或求均值也能给出同样好的模型。

总的来说,我们可以看到,交流的图形属性越多,平均模型的性能就越好。我们的任务以全局表示为中心,因此明确学习这一属性也往往会提高性能。

GNN 研究的一个前沿领域不是建立新的模型和架构,而是 “如何构建图形”,更准确地说,是为图形注入可以利用的附加结构或关系。正如我们所看到的,图的属性越多,我们就越能建立更好的模型。在这种特殊情况下,我们可以考虑通过增加节点之间的空间关系、增加非键的边或明确子图之间的可学习关系,使分子图的特征更加丰富。
其他类型的图(多图、超图、超节点、层次图)
多图(多种边类型)和超节点图(一个节点代表一个图)

GNN 中的采样图和批处理
当图形大到内存无法容纳时,对图形进行采样就显得尤为重要。

总结
GNN 近年来取得的成功为解决各种新问题创造了巨大的机会,图形是一种强大而丰富的结构化数据类型,其优势和挑战与图像和文本截然不同。在本文中,我们概述了研究人员在构建图神经网络方面取得的一些阶段性成果。我们介绍了在使用这些架构时必须做出的一些重要设计选择。
相关文章:
A Gentle Introduction to Graph Neural Networks
A Gentle Introduction to Graph Neural Networks----《图神经网络入门》 图神经网络信息传递积累 图在我们身边随处可见,现实世界中的物体通常是根据它们与其他事物的联系来定义的。一组物体以及它们之间的联系可以很自然地用图来表示。十多年来,研究人…...
详解[ZJCTF 2019]NiZhuanSiWei 1(PHP两种伪协议、PHP反序列化漏洞、PHP强比较)还有那道题有这么经典?
题目环境: <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"]; if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){echo "<br><h1>&…...
bazel build使用【未完】
1. install install的作用:将生成的目标、文件复制到指定的安装目录中,可以是可执行文件、库文件、 配置文件等 若有一个c可执行文件,可以使用install将其安装到标准的可执行路径中,以便于直接运行,而无需指定完整的文…...
11-13 /11-14代理模式 AOP
调用者 代理对象 目标对象 代理对象除了可以完成核心任务,还可以增强其他任务,无感的增强 代理模式目的: 不改变目标对象的目标方法的前提,去增强目标方法 分为:静态代理,动态代理 静态代理 有对象->前提需要有一个类,那么我们可以事先写好一个类&a…...
Ubuntu 创建并发布 Django 项目
Ubuntu 创建并发布 Django 项目 升级操作系统和软件 sudo apt updatesudo apt -y dist-upgrade 安装 python3-pip sudo apt -y install python3-pip安装 django pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangosudo apt -y install python3-django创建 dj…...
SQL Server进阶知识
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…...
TFHEpp 使用记录
TFHEpp 使用记录 使用HE3DB错误randen 使用 需要使用 编译器gcc > 10 (unicode 编码) sudo apt-get install -y build-essential g-10 apt-utils ca-certificates git cmake libgmp-dev libfftw3-devgit clone https://github.com/virtualsecureplatform/TFHEpp cd TFHEp…...
大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明
大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。然而,现…...
vue:如何把后端传过来的数组的其中一个对象加入新的属性
加入我们是更改数组中的第一个对象,在vue中可以使用$set方法将属性插入到第一个对象中作为属性。 Script部分: <script>export default {data() {return {boxes: [//模拟后端传过来的数组{id:1,name:张三},{id:2,name:李四},{id:3,name:王五},{i…...
数据库数据恢复—MSSQL报错“附加数据库错误823”如何恢复数据?
数据库故障&分析: MSSQL Server数据库比较常见的报错是“附加数据库错误823”。如果数据库有备份,只需要还原备份即可;如果无备份或者备份不可用,则需要使用专业的数据恢复手段去恢复数据。 MSSQL Server数据库出现“823”的报…...
如何使用 Java 设计一个简单的成绩计算程序
简介 本文将介绍如何使用 Java 设计一个简单的成绩计算程序。该程序可以读取学生的成绩并计算出平均分、最高分和最低分等。通过这个例子,我们将展示如何使用面向对象的思想和一些常用的 Java 功能来解决实际问题。 需求分析 在开始编写程序之前,我们…...
requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案
问题背景 在Python 3.2中,尝试使用Request的OAuth支持时,遇到了OAuth导入失败的问题。以下代码:import requests from requests.auth import OAuth1url https://api.twitter.com/1/account/settings.jsonqueryoauth OAuth1(client_key, cli…...
山东省技能兴鲁网络安全大赛 web方向
文章目录 购买FLAG日志里的FLAG一只小蜜蜂 购买FLAG 随便登录admin进去,发现有充值和购买功能 但是试试充值发现不行 购买页面如下 bp抓包看看,发现value值可控 我们试试将其改为正数,发现成功 购买得到flag 日志里的FLAG <?phphi…...
No206.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...
C#,数值计算——函数计算,Ratfn的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public class Ratfn { private double[] cofs { get; set; } private int nn { get; set; } private int dd { get; set; } public Ratfn(double[] num, double[] den) { …...
排序算法之-快速
算法原理 丛待排序的数列中选择一个基准值,通过遍历数列,将数列分成两个子数列:小于基准值数列、大于基准值数列,准确来说还有个子数列:等于基准值即: 算法图解 选出基准元素pivot(可以选择…...
[vim]Python编写插件学习笔记2 - 分离
0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前,需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 1 Python 与 vimscript 分离 前文编写 vim 插件的方式,是将 Pyt…...
【已解决】ModuleNotFoundError: No module named ‘kornia‘
问题描述 Traceback (most recent call last): File "main.py", line 47, in <module> import data_augmentation File "/media/visionx/monica/project/stable_signature/hidden/data_augmentation.py", line 15, in <module> im…...
预览PDF并显示当前页数
这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面,引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…...
阿里云优惠券介绍、作用、领取入口及使用教程
阿里云是阿里巴巴集团倾力打造的云计算品牌,提供丰富多样的云计算产品及服务,为了吸引用户,阿里云经常推出各种优惠活动,其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
