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…...
阿里云优惠券介绍、作用、领取入口及使用教程
阿里云是阿里巴巴集团倾力打造的云计算品牌,提供丰富多样的云计算产品及服务,为了吸引用户,阿里云经常推出各种优惠活动,其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
