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 近年来取得的成功为解决各种新问题创造了巨大的机会,图形是一种强大而丰富的结构化数据类型,其优势和挑战与图像和文本截然不同。在本文中,我们概述了研究人员在构建图神经网络方面取得的一些阶段性成果。我们介绍了在使用这些架构时必须做出的一些重要设计选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWS实战(一)-创建S3 存储桶

1)登录AWS账号,选择服务—>存储—>S3。 2)查看存储桶列表 3)点击"创建存储桶"创建bucket。 4)设置跨域 点击编辑,修改跨域设置即可。

工具: PowerShell常用命令

ISE: 打开ISE编辑器 echo: 输出一行信息 mkdir: 创建一个文件夹 mkdir ./MyPlugin文件相关处理 参考: powershell新手向,新建、删除文件及对文件添加内容 参考文档 PowerShell入门教程 语法、环境| Powershell 教程

【springmvc框架一文搞定】

SpringMVC框架 1. 搭建springmvc测试项目1.1 创建maven项目1.2 导入依赖pom.xml1.3 将springmvc容器加载到tomcat中1.4 启动tomcat插件1.5 访问路径: 2. 剖析启动过程2.1 启动服务器初始化过程2.2 访问路径执行过程 3.spring-springmvc bean的管理3.1 因为功能不同&…

langchain实战-hello world

一、LangChain简介 github地址: GitHub - langchain-ai/langchain: ⚡ Building applications with LLMs through composability ⚡ LangChain是一个用于开发由语言模型支持的应用程序的框架。它使应用程序能够: 具有上下文感知能力:将语言模…

BES2700H开发不完全手册

BES2700H开发不完全手册 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,群赠送语音信号处理降噪算法,ANC AEC ENC EQ BF BES蓝牙耳机音频资料 1 成功编译 2 代码 3 开放文档

餐饮业数字化革命:抖音小程序团购功能的开发与优化

本文将聚焦于餐饮业数字化的前沿,着眼于抖音小程序团购功能的开发与优化,探讨如何借助这一功能实现餐饮业的蓬勃发展。 一、数字化浪潮下的餐饮业 传统餐饮业面临的挑战在于如何更好地适应快节奏生活和消费者多元化需求。数字化浪潮为餐饮业提供了解决方…

[Linux] ssh远程访问及控制

一、ssh介绍 1.1 SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用于实现远程登录、远程复制等功能的字符接口。SSH 协议包括用户在登录时输入的用户密码、双方之间的通信。 加密数据传输,SSH 是一种建立在应用层和传输层上…

第06章 面向对象编程(基础)

一 面向对象编程概述 1.1 程序设计的思路 面向对象,是软件开发中的一类编程风格、开发范式。除了面向对象,还有面向过程、指令式编程和函数式编程。在所有的编程范式中,我们接触最多的还是面向过程和面向对象两种。 类比:史书类…

manim更新

manim升级18.0 # 1 更新pip,推荐轮子下载 python -m pip install --upgrade pip 推荐方式下载轮子安装 首先尝试在中断更新pip,通过命令python -m pip install --upgrade pip 可能遇到以下情况 记录最新的pip轮子名 记录下上面pip的名称,去…

得帆信息携手深信服,联合打造高安全PaaS超融合一体化解决方案

上海得帆信息技术有限公司(以下简称“得帆”)和深信服科技股份有限公司(以下简称“深信服”)携手推出融合安全性、稳定性、高效性于一体的全新PaaS超融合解决方案。 用户痛点分析 全面推进企业数字化与信息化的趋势下,…

深入探讨Linux中的文本文件查看命令

目录 前言1 cat命令2 less命令3 more命令4 head命令5 tail命令6 总结 前言 在Linux系统中,文本文件是日常工作中不可或缺的一部分,无论是配置文件、日志文件还是代码文件,都需要用到文本文件查看命令。在本文中,我们将深入研究一…

块设备的工作模式

块设备的mknod 还是会创建在 /dev 路径下面,这一点和字符设备一样。/dev 路径下面是 devtmpfs 文件系统。这是块设备遇到的第一个文件系统。我们会为这个块设备文件,分配一个特殊的 inode,这一点和字符设备也是一样的。只不过字符设备走 S_IS…

pcl opencv关于flann的冲突:flann_algorithm_t等

问题如下: 引起问题的点: 解决方法:先include pcl后include opencv; 其他解决方式是在环境变量中将pcl置于opencv前面,但是这里如果是先include opencv,后include pcl问题得不到解决;

java实现冒泡排序

冒泡排序是一种简单的排序算法&#xff0c;以下是Java实现示例代码&#xff1a; public static void bubbleSort(int[] array) {int n array.length;for (int i 0; i < n - 1; i) {for (int j 0; j < n - i - 1; j) {// 如果前面的元素比后面的元素大&#xff0c;就交…

【JVM】Java内存溢出分析(堆溢出、栈溢出、方法区溢出、直接内存溢出)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

ros 使用turtlesim包报错

ros 使用turtlesim包报错 rosrun] Couldn’t find executable named turtlesim_node below /opt/ros/noetic/share/turtlesim 先说一下前提&#xff0c;我的命名空间是demo03-ws&#xff0c;创建了一个功能包叫rename01_node,下面编写了一个launch文件&#xff0c;如下 希望…

2023nacos源码解读第3集——nacos-client核心功能之微服务调用和配置管理测试

文章目录 1、测试项目2、项目注意事项3、 测试核心功能3.1 测试服务调用与负载均衡3.2 测试配置监听 4、参考文档 1、测试项目 项目地址 nacos-service-a nacos-service-b 2、项目注意事项 项目初始化可以使用aliyun spring initializer ,以更方便的使用springcloud alibaba…

CleanMyMac4.14中文免费版mac系统管理软件

许多小伙伴使用Mac后都反馈电脑不如想象中的流畅&#xff0c;甚至有点卡顿的现象&#xff0c;原因可能是因为无用的应用占据了过多的内存&#xff0c;或者是系统盘垃圾过多&#xff0c;导致的电脑卡顿现象。 今天小编教给大家几招&#xff0c;让自己的Mac能够一键重生&#xf…

自律性差怎么办,如何提高自律能力?

自律的力量是强大的&#xff0c;当然一个人不自律也没啥大不了的事&#xff0c;毕竟不自律的人才是大多数&#xff0c;但是当你想要有所成就的时候&#xff0c;那你就必须要学会自律&#xff0c;提高自律。 如果一个人缺乏自律性&#xff0c;那么学生时代肯定成绩不稳定&#…
最新文章