GNN的一篇入门 :A Gentle Introduction to Graph Neural Networks

news2024/11/19 1:29:10

原文链接

A Gentle Introduction to Graph Neural Networks (distill.pub)icon-default.png?t=N6B9https://distill.pub/2021/gnn-intro/

内容简介:本文是“A Gentle Introduction to Graph Neural Networks”的阅读笔记,因为第一次接触GNN,很多深奥的概念不懂,因此没有读完全,maybe后续会补上。

Graph 是什么? Graph 实际上 就是 三个要素,vertex是节点,Edge边,Attribute是图的特征

Graph问题用来做什么?可以分为三类,一是根据graph级别,比如找出拓扑里有环形的图;二是 根据edge的关系给vertex聚类;三是根据vertex特点找到edge的feature。

Graph之间的信息如何传递聚合? GNN中的新信息传递是Information pooling,即节点之间传递信息,然后进行信息聚合。信息的聚合可以使用 平均,最大或者相加等方式

设计GNN的规则? 设计GNN时,GNN的表现并不是层数越深越好,层数多会增强最差和平均解表现,不能增强最好解表现。想要性能更好,一是设计更好的传播机制,二是增加图的属性。

训练GNN时采样? 因为GNN每个节点的邻居和连的边都不一样,不像传统神经网络可以取固定的size进行训练,有不同的方法可以采样去训练,比如随机采样 ,随机游走。

GNN的扩展模式? GNN 调整为更复杂的图结构,例如,我们可以考虑多边图或多图,如一对节点共享多条性质不同的边。

尚未理解的问题,Graph之间的信息传递机制都有哪些?以及是如何传递的?

Graph是如何训练的?采样的有哪些技术?需要更深的了解

1.什么样的数据可以转化为Graph

graph实际上就是 vertex edge 和他们的attribute 组成的图。

 2.哪一类的问题可以转化为图图结构问题?

一共有三类 :

In a graph-level task, we predict a single property for a whole graph. For a node-level task, we predict some property for each node in a graph. For an edge-level task, we want to predict the property or presence of edges in a graph.

Graph-level task

比如从一堆拓扑图里找出具有两个环形的图

 Node-level task

 类似于给节点聚类

 Edge-level task

找出节点间的关系

用邻接矩阵表示图很消耗内存,特别是当邻接矩阵是稀疏矩阵时, 如何把图表示得更加节省内存?

 GNN Predictions by Pooling Information

构建了GNN之后,如何完成任务or做预测 ??

汇集工作分两步进行:

1.对于要汇集的每个项目,收集它们的每个嵌入,并将它们连接成一个矩阵。

2. 然后,通常通过求和操作对收集到的嵌入式数据进行汇总

根据edge信息去预测node

 根据node的信息去预测edge

 根据 node 和 edge的信息去预测global信息

 Passing messages between parts of the graph

我们可以通过在 GNN 层中使用池化技术来进行更复杂的预测,从而使我们学习到的嵌入信息能够感知图的连通性。我们可以通过信息传递来实现这一点,即相邻节点或边缘交换信息,并影响彼此更新的嵌入。

消息传递分为三个步骤:

1. 对于图中的每个节点,收集所有相邻节点的嵌入(或信息),即上文所述的 g函数。

2. 通过聚合函数(如 sum)汇总所有信息。

3. 所有汇集的信息将通过一个更新函数(通常是一个学习的神经网络)进行传递。

从本质上讲,信息传递和卷积都是汇总和处理元素邻域信息以更新元素值的操作。在图中,元素是一个节点,而在图像中,元素是一个像素。然而,图中相邻节点的数量可以是可变的,这与图像中每个像素都有固定数量的相邻元素不同。

通过将消息传递 GNN 层堆叠在一起,一个节点最终可以整合来自整个图的信息:经过三层之后,一个节点就可以获得离它三步远的节点的信息。

一般建模模板先使用连续的 GNN 层,然后再用一个带有 sigmoid 激活的线性模型来进行分类。GNN 的设计空间有许多可以定制模型的杠杆:

1.GNN层数,也称为深度。

2.更新每个属性的维数。更新函数是一个带有relu激活函数和层规范化的1层MLP。

3.汇聚函数在汇聚中使用:最大值、平均值或总和。

4。更新的图属性或消息传递样式:节点、边缘和全局表示。我们通过布尔切换(开或关)来控制这些。基线模型将是独立于图形的GNN(所有消息传递关闭),它在最后将所有数据聚合到单个全局属性中。打开所有消息传递函数会产生GraphNets架构。

数据汇总到一个单一的全局属性中。切换所有消息传递功能可产生一个 GraphNets 架构。

由于这些是高维向量,我们通过主成分分析(PCA)将它们降至2D。一个完美的模型应该能够清晰地分离标记数据,但由于我们正在降维并且也有不完美的模型,这个边界可能会更难看到。

Some empirical GNN design lessons

1.越深的网络层并不能表现越好。

2,表现主要和以下相关:消息传递的类型,映射的维度,层数和汇聚操作类型。

平均性能和最差性能随着GNN层数的增多而性能上升,但是最好的性能并不会随层数增加而上升。这种效应可能是因为层数越多的 GNN 传播信息的距离就越远,其节点表征可能会因多次连续迭代而被 "稀释"。

交流的图形属性越多,平均模型的性能就越好。我们的任务以全局表示为中心,因此明确学习这一属性也往往会提高性能。我们的节点表征似乎也比边缘表征更有用,这是有道理的,因为这些属性中加载了更多的信息。

要想获得更好的性能,有很多方向可以选择。我们希望强调两个大方向,一个与更复杂的图算法有关,另一个则与图本身有关。

到目前为止,GNN 基于邻域的池化操作。有些图概念比较难用这种方式表达,例如线性图路径(节点的连接链)。设计新的机制,以便在 GNN 中提取、执行和传播图信息,是当前的一个研究领域  。

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

与GNN相关的graph

虽然我们只描述了每个属性都有矢量化信息的图形,但图形结构更加灵活,可以容纳其他类型的信息。幸运的是,消息传递框架足够灵活,通常情况下,将 GNN 调整为更复杂的图结构,只需定义信息如何通过新的图属性传递和更新即可。

例如,我们可以考虑多边图或多图,其中一对节点可以共享多种类型的边。例如,在社交网络中,我们可以根据关系类型(熟人、朋友、家人)指定边的类型。通过为每种边缘类型设置不同类型的信息传递步骤,可以对 GNN 进行调整。我们还可以考虑嵌套图,例如一个节点代表一个图,也称为超节点图。嵌套图对于表示层次信息非常有用。例如,我们可以考虑分子网络,其中一个节点代表一个分子,如果我们有将一个分子转化为另一个分子的方法(反应),则两个分子之间共享一条边。在这种情况下,我们可以在嵌套图上学习,方法是让一个 GNN 在分子层面学习表示法,另一个在反应网络层面学习表示法,并在训练过程中交替使用。

另一种图是超图,在超图中,一条边可以连接多个节点,而不仅仅是两个节点。对于给定的图,我们可以通过识别节点群落来构建超图,并分配一条与群落中所有节点相连的超边。

Sampling Graphs and Batching in GNNs 

通常对于神经网络的训练来说 ,我们取一个 固定 size 的mini-batch,可是对GNN网络不可这样,因为GNN网络中每个node连接的edge不是固定的,没有一个恒定的size。对图进行分批处理的思路就是构建子图。构建子图就会涉及到图采样。

如何对图进行采样是一个尚未解决的研究问题。

如果我们希望保留邻域级别的结构,一种方法是随机抽取一定数量的节点,即我们的节点集。然后添加与节点集相邻的距离为 k 的邻接节点,包括它们的边。每个邻域可视为一个单独的图,GNN 可在这些子图的批次上进行训练。由于所有相邻节点的邻域都不完整,因此可以掩盖损失,只考虑节点集。

更有效的策略可能是先随机抽样一个节点,将其邻域扩大到距离 k,然后在扩大的集合中挑选其他节点。一旦构建了一定数量的节点、边或子图,就可以终止这些操作。如果情况允许,我们可以通过选取一个初始节点集,然后对一定数量的节点进行子采样(例如随机采样,或通过随机漫步或 Metropolis 算法)来构建恒定大小的邻域。

Comparing aggregation operations

汇集相邻节点和边的信息是 GNN 关键步骤。每个节点的邻居数量不固定,需要一种差别化的方法来汇集这些信息,因此汇集操作应该有平滑性,对节点排序和节点数量具有不变性。

选择和设计最佳聚合操作是一个尚未解决的研究课题。聚合操作的一个理想特性是相似的输入提供相似的聚合输出,反之亦然。一些非常简单的候选包络不变操作包括总和、平均值和最大值。方差等汇总统计也可以使用。所有这些运算都采用数量可变的输入,无论输入排序如何,都能提供相同的输出。

没有哪种操作是一成不变的最佳选择。当节点的邻居数量变化很大,或者需要对局部邻域的特征进行归一化处理时,平均值操作可能会很有用。当你想突出本地邻域中的单个突出特征时,最大值运算可能会很有用。求和则在这两者之间取得了平衡,它提供了局部特征分布的快照,但由于没有进行归一化处理,因此也会突出异常值。在实践中,求和是常用的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

a柱透明屏好处和挑战详解

a柱透明屏是一种新型的汽车技术,它可以将车辆的a柱部分变得透明,提高驾驶员的视野和安全性。这项技术的出现,将为驾驶员提供更好的驾驶体验和更高的安全性能。 a柱是汽车车身结构中的一部分,位于车辆前部,连接车顶和车…

wangEditor初探

1、前言 现有的Quill比较简单,无法满足业务需求(例如SEO的图片属性编辑需求) Quill已经有比较长的时间没有更新了,虽然很灵活,但是官方demo都没有一个。 业务前期也没有这块的需求,也没有考虑到这块的扩展…

总结 Android 开发中截取字符串的方法

string str”hello word”;int i5; 1 取字符串的前i个字符 strstr.Substring(0,i); // or strstr.Remove(i,str.Length-i);substring(start,end):substring是截取2个位置之间及start-end之间的字符串2 去掉字符串的前i个字符: strstr.Remove(0,i); // or…

HTTP vs HTTPS: 网络安全的重要转变

文章目录 一、HTTP的缺点1.1 通信使用明文可能会被窃听1.2 不验证通信方的身份就可能遭遇伪装1.3 无法证明报文完整性,可能已遭篡改 二、 HTTP 加密 认证 完整性保护 HTTPS2.1 HTTPS 是身披 SSL 外壳的 HTTP2.2 HTTPS采用混合加密机制2.3 HTTPS存在的问题 一、HTT…

JavaScript --简介

目录 JS可以用来做什么? JS在前端中几种写法: 1. 文件引用: 2. 页面样式 3. 行内样式 集中常见的弹框: JS基本语法: 变量: 常量: 数据类型: 基本数据类型: 引用数据类型&#xff1a…

解决nginx和gateway网关跨域问题Access to XMLHttpRequest

一、为什么会出现跨域问题? 1、什么是跨域 跨域(Cross-Origin Resource Sharing,简称 CORS) 主要是浏览器的同源策略导致的。 同源策略要求浏览器发出的 AJAX 请求只能发给与请求页面域名相同的 API 服务器,如果发给其他域名就会产生跨域问题。 2、什么是同源策略&…

9.NIO非阻塞式网络通信入门

highlight: arduino-light Selector 示意图和特点说明 一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这从根本上解决了传统同步阻塞 I/O 一连接一线程模型。架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。 服务端流程 1、当客户端连接服务端时&…

按键消抖实现

一、使用状态机实现按键消抖 可将按键按下整个过程看做四个状态:按键空闲状态,按下抖动状态,稳定按下状态,释放抖动状态。 代码实现: /** Description: 状态机方式按键消抖(多按键)* Author: Fu Yu* Date: 2023-07-27…

echarts timeline时间轴鼠标移入停止

echarts timeline时间轴鼠标移入停止 修改autoplay 变量无用,需修改option配置项里autoplay 然后setoption重新渲染生效

Swiper横向循环焦点图实现与解析

一、实现效果 二、样式与结构代码 html: <div class"item center"><div id"certify" class"col-md-12"><div class"swiper-container"><div class"swiper-wrapper"><div class"swiper-sli…

2:SpringIOC

文章目录 一&#xff1a;Spring_IOC概念引入_重要1&#xff1a;Spring解耦合的原理2&#xff1a;创建一个spring项目并实现IOC基本功能 二&#xff1a;Spring_IOC原理分析 ***1&#xff1a;XML解析技术读取配置文件**2**&#xff1a;反射技术实例化对象,放到容器中3&#xff1a…

【C语言】—— 可变参数列表

C语言中的可变参数是一种特殊的函数参数&#xff0c;允许在函数定义中传递可变数量的参数。使用可变参数机制可以使函数更加灵活&#xff0c;可以根据不同的需求接受不同数量或类型的参数。 目录 &#xff08;一&#xff09;概念理解 &#xff08;二&#xff09;代码展示 1…

Games虚拟现实人本计算研究

晚上八点(北京时间)的 GAMES Webinar 《VR/AR专题》第二期即将开始&#xff01;&#x1f525;&#x1f525;&#x1f525; &#x1f4dc;本期主题&#xff1a;VR人本计算及交互 &#x1f468;&#x1f3fb;‍&#x1f3eb;嘉宾1&#xff1a;北京大学的李胜老师 &#x1f468;…

纪录片《打铁文艺社》:从全美高中生电影节到多项国际赞誉,聚焦城市公共艺术的蜕变之路

7月21日&#xff0c;在全美高中生电影节&#xff08;All American High School Film Festival&#xff0c;AAHSFF&#xff09;公布的入围名单中&#xff0c;一部取材于中国深圳的纪录片《打铁文艺社Datie: The Art Tribe of Tiegang》以其深刻的主题和精良的制作&#xff0c;引…

git 合并非关联分支

面对的场景&#xff1a;现在有三个仓库&#xff0c;一个是本地的仓库1&#xff0c;第二个是和仓库1关联的在github上的仓库2&#xff0c;第三个是把仓库1拷贝到一个无网络环境中持续开发一段时间的仓库3. 分析 基本想法是把仓库3作为仓库1的远程仓库&#xff0c;然后在仓库1上…

Clion配置与使用记录

Clion与ROS2、docker 为了能够在Docker中使用ROS2环境&#xff0c;同时Clion能够在编辑代码时可以有代码提示以及函数、变量跳转等功能 Docker配置 参考&#xff1a;Docker SSH配置 启动Docker&#xff0c;需要将端口映射&#xff0c;添加如下参数&#xff1a; -p 8024:22&…

Redis-基于内存的key-value结构数据库

读写性高&#xff0c;适合存储热点性高的数据 也称为结构化的NoSql数据库 redis依赖环境&#xff1a;gcc NoSql 非关系型数据库&#xff0c;是关系型数据库的补充 关系型(RDBMS)非关系型(NoSql)MySqlRedisOracleMongo dbDB2MemCachedSQLServer 常用命令 Redis 教程_redi…

手机中有三个特别耗电的功能,半天就耗掉一半电量,记得关掉

在现代社会&#xff0c;手机已经成为我们生活中不可或缺的伙伴。然而&#xff0c;随着手机功能的日益强大和应用的多样化&#xff0c;电池续航成为了许多人的困扰。您是否曾经经历过使用手机一半时间&#xff0c;电量却已经耗掉一半的情况&#xff1f;若是如此&#xff0c;可能…

Pytorch图像处理注意力机制SENet CBAM ECA模块解读

目录 1. 注意力机制 1.1 SENet&#xff08;Squeeze-and-Excitation Network&#xff09; 1.1.1 SENet原理 1.1.2 SENet代码示例 1.2 CBAM&#xff08;Convolutional Block Attention Module&#xff09; 1.2.1 CBAM原理 1.2.2 CBAM代码示例 1.3 ECA&#xff08;Efficien…

Vue中TodoLists案例_底部统计

与上一篇Vue中TodoList案例_删除有俩个文件变化了 App.vue&#xff1a;向儿子组件MyFooter传递参数todos <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHeader :addTodo"add…