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

原文链接

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.mzph.cn/news/10460.shtml

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

相关文章

使用TensorFlow和VGG-19模型实现艺术风格迁移:一步一步打造你的数字艺术世界

在当下的AI领域,神经风格迁移是最富有创新性和艺术性的技术之一。这项技术可以将一种图像的风格迁移至另一种图像,创造出让人眼前一亮的视觉效果。这种转变所展现的技术之美,让我们深感人工智能所带来的可能性。本文将带领大家一步步通过TensorFlow和VGG-19模型实现风格迁移…

C++容器——list的模拟实现

目录 一.list的基本结构 二. 接下来就是对list类构造函数的设计了: 三.链表数据的增加: 四.接下来就是迭代器的创建了: 四.简单函数的实现: 五.构造与析构 六.拷贝构造和赋值重载 传统写法: 现代写法: 七.迭…

docker启动mysql时的两个报错

目录 1.Error response from daemon: driver failed programming external connectivity on endpoint mysql 2.Error response from daemon: Conflict. The container name "/mysql" is already in use by container 1.Error response from daemon: driver failed …

【预处理】——获取可变参数宏的参数数量

文章目录 功能说明实现... 的作用__VA_ARGS__ 的作用##__VA_ARGS__ 的作用 解析COUNT_ARGS(2, 4, 5)没有参数 COUNT_ARGS()参数大于 22 个 示例 功能说明 用于获取可变参数宏实际传递了多少个参数。 COUNT_ARGS(1, 2, 3),填入了 3 个参数,返回值就是 3…

C#中未能找到为main方法指定的XXX.Program怎么解决

有时在修改项目名称后,报错未能找到为main方法指定的XXX.Program 解决办法: 点击进入项目属性,将启动对象设置为空或者你要指定的XXX.Program(改名后的)

akka 简单使用

由于AKka的核心是Actor,而Actor是按照Actor模型进行实现的,所以在使用Akka之前,有必要弄清楚什么是Actor模型。 Actor模型最早是1973年Carl Hewitt、Peter Bishop和Richard Seiger的论文中出现的,受物理学中的广义相对论(general…

服务器数据恢复-误操作导致存储VDisk丢失的数据恢复案例

服务器数据恢复环境: IBM某型号存储; Solaris操作系统,部署Oracle数据库。 服务器故障: 重建MDisk导致对应的存储池中的VDisk丢失,导致Solaris操作系统中的Oracle数据库无法使用。 服务器数据恢复过程: 1、…

理解Android中不同的Context

作者:两日的blog Context是什么,有什么用 在Android开发中,Context是一个抽象类,它是Android应用程序环境的一部分。它提供了访问应用程序资源和执行各种操作的接口。可以说,Context是Android应用程序与系统环境进行交…

面向对象——步入JavaScript高级阶段的敲门砖

目录 前言一、认识对象1.什么是对象2.对象的方法3.对象的遍历4.对象的深浅克隆 二、认识函数上下文1.函数的上下文规则 ★2.call和apply ★ 三、构造函数1.用new操作符调用函数2.类与实例3.构造函数和类" 四、原型和原型链1.prototype和原型链查找 ★2.在prototype上添加方…

Windows下安装Hadoop(手把手包成功安装)

Windows下安装Hadoop(手把手包成功安装) Windows下安装Hadoop(手把手包成功安装)一、环境准备1.1、查看是否安装了java环境 二、下载Hadoop的相关文件三、解压Hadoop安装包四、替换bin文件夹五、配置Hadoop环境变量六、检查环境变…

【数学建模】时间序列分析

文章目录 1. 条件2. 模型分类3. SPSS处理时间序列 1. 条件 1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 2. 模型分类 叠加模型【YTSCI】 序列的季节波动变化越来越大,反映变动之间的关系发生变化乘积序列【YTSC*I】 时间序列波动保持恒…

【多模态】16、DetCLIP | 构建超大词汇字典来进行开放世界目标检测

论文:DetCLIP: Dictionary-Enriched Visual-Concept Paralleled Pre-training for Open-world Detection 代码:无。。。 出处:NIPS2022 | 华为诺亚方舟 | 中山大学 | 香港科技大学 效果: 在 LVIS 的 1203 个类别上超越了 GLIP…

【树上乘法原理】ICPC Shanghai 2021 G, Edge Groups

http://oj.daimayuan.top/course/8/problem/400 题意: 思路: 求方案数,考虑组合数学 手摸一下样例发现,对于一棵子树,若边数为偶数,那么可以内部匹配,但是如果边数为奇数,那么就一…

嵌入式:QT Day2

一、继续完善登录框&#xff0c;当登陆成功时&#xff0c;关闭登陆页面&#xff0c;跳转到新的界面中 源码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //用于打印输出 #include <QIcon> …

无涯教程-jQuery - jQuery.getScript( url, callback )方法函数

jQuery.getScript(url&#xff0c;[callback])方法使用HTTP GET请求加载并执行JavaScript文件。 该方法返回XMLHttpRequest对象。 jQuery.getScript( url, [callback] ) - 语法 $.getScript( url, [callback] ) 这是此方法使用的所有参数的描述- url - 包含请求…

mac 移动硬盘未正常退出,再次链接无法读取(显示)

&#xff08;1&#xff09;首先插入自己的硬盘&#xff0c;然后找到mac的磁盘工具 &#xff08;2&#xff09;打开磁盘工具&#xff0c;发现自己的磁盘分区在卸载状态&#xff1b;点击无法成功装载。 &#xff08;3&#xff09;打开终端&#xff0c;输入 diskutil list查看自…

VITE + VUE 全局环境变量使用相关知识

一. 全局环境变量配置及使用 配置&#xff1a; 创建.env和.env.development&#xff0c;.env.production等配置文件&#xff0c;.env.uat, .env.test及其它均可。变量要以大写的VITE_开头&#xff0c; 如VITE_APP_NAME 测试网站 使用&#xff1a; 在代码中 import.meta.env…

Redis应用(1)——生成全局唯一标识ID

1 概述 在实际项目中&#xff0c;根据不同的业务逻辑需要生成唯一的标识id &#xff0c;如购买商品生成的订单号。尽管这个标识id功能非常的简单&#xff0c;但是如果不能成功的生成唯一标识id&#xff0c;那将会影响后续的业务逻辑 。我们可以使用数据库去生成唯一标识id&…

ajax相关

1、HTTP 协议1.1、作用 规范了数据是如何打包的 以及 数据时如何传递的1.2、Message 消息 / 报文 Message 指的是在HTTP客户端与服务器间传递的数据块 分类&#xff1a; 1、Request Message : 客户端向服务器发送的请求消息 2…

经营在线业务的首选客服工具--SS客服

随着网购正在快速取代传统零售业&#xff0c;各行各业的企业都在大力发展电子商务以取悦客户。但是&#xff0c;有这么多可用的电子商务平台&#xff0c;选择一款符合自己发展的平台确实不容易。电子商务平台不仅是企业在线销售产品和服务的地方&#xff0c;也是他们管理日常运…