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

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强比较)还有那道题有这么经典?

题目环境&#xff1a; <?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的作用&#xff1a;将生成的目标、文件复制到指定的安装目录中&#xff0c;可以是可执行文件、库文件、 配置文件等 若有一个c可执行文件&#xff0c;可以使用install将其安装到标准的可执行路径中&#xff0c;以便于直接运行&#xff0c;而无需指定完整的文…...

11-13 /11-14代理模式 AOP

调用者 代理对象 目标对象 代理对象除了可以完成核心任务&#xff0c;还可以增强其他任务,无感的增强 代理模式目的: 不改变目标对象的目标方法的前提,去增强目标方法 分为:静态代理,动态代理 静态代理 有对象->前提需要有一个类&#xff0c;那么我们可以事先写好一个类&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进阶知识

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

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:如何把后端传过来的数组的其中一个对象加入新的属性

加入我们是更改数组中的第一个对象&#xff0c;在vue中可以使用$set方法将属性插入到第一个对象中作为属性。 Script部分&#xff1a; <script>export default {data() {return {boxes: [//模拟后端传过来的数组{id:1,name:张三},{id:2,name:李四},{id:3,name:王五},{i…...

数据库数据恢复—MSSQL报错“附加数据库错误823”如何恢复数据?

数据库故障&分析&#xff1a; MSSQL Server数据库比较常见的报错是“附加数据库错误823”。如果数据库有备份&#xff0c;只需要还原备份即可&#xff1b;如果无备份或者备份不可用&#xff0c;则需要使用专业的数据恢复手段去恢复数据。 MSSQL Server数据库出现“823”的报…...

如何使用 Java 设计一个简单的成绩计算程序

简介 本文将介绍如何使用 Java 设计一个简单的成绩计算程序。该程序可以读取学生的成绩并计算出平均分、最高分和最低分等。通过这个例子&#xff0c;我们将展示如何使用面向对象的思想和一些常用的 Java 功能来解决实际问题。 需求分析 在开始编写程序之前&#xff0c;我们…...

requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案

问题背景 在Python 3.2中&#xff0c;尝试使用Request的OAuth支持时&#xff0c;遇到了OAuth导入失败的问题。以下代码&#xff1a;import requests from requests.auth import OAuth1url https://api.twitter.com/1/account/settings.jsonqueryoauth OAuth1(client_key, cli…...

山东省技能兴鲁网络安全大赛 web方向

文章目录 购买FLAG日志里的FLAG一只小蜜蜂 购买FLAG 随便登录admin进去&#xff0c;发现有充值和购买功能 但是试试充值发现不行 购买页面如下 bp抓包看看&#xff0c;发现value值可控 我们试试将其改为正数&#xff0c;发现成功 购买得到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) { …...

排序算法之-快速

算法原理 丛待排序的数列中选择一个基准值&#xff0c;通过遍历数列&#xff0c;将数列分成两个子数列&#xff1a;小于基准值数列、大于基准值数列&#xff0c;准确来说还有个子数列&#xff1a;等于基准值即&#xff1a; 算法图解 选出基准元素pivot&#xff08;可以选择…...

[vim]Python编写插件学习笔记2 - 分离

0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前&#xff0c;需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 1 Python 与 vimscript 分离 前文编写 vim 插件的方式&#xff0c;是将 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.在需要的页面&#xff0c;引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…...

阿里云优惠券介绍、作用、领取入口及使用教程

阿里云是阿里巴巴集团倾力打造的云计算品牌&#xff0c;提供丰富多样的云计算产品及服务&#xff0c;为了吸引用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...