type
status
date
slug
summary
tags
category
icon
password
这篇文章是一个blog,但却比很多论文写的好。注意:本文结合原文的ui交互使用更好,后面的标题我用的是原文的英文解释,不改变原来意思的理解
可以看到每个结点的信息,是由下一层的自己的结点和相邻的结点的信息构成
本文探讨并解释了现代图神经网络。我们将这项工作分为四个部分。
- 首先,我们看看哪种类型的数据最自然地表述为图表,以及一些常见的示例。
- 其次,我们探讨了图形与其他类型的数据的不同之处,以及我们在使用图形时必须做出的一些专业选择。
- 第三,我们构建一个现代 GNN,介绍模型的每个部分,从该领域的历史建模创新开始。我们逐渐从简单的实现转向最先进的 GNN 模型。
- 第四,也是最后一点,我们提供了一个 GNN playground,您可以在其中使用真实任务和数据集,以建立更强的直觉,了解 GNN 模型的每个组件如何为其做出的预测做出贡献。
图的基本知识
首先,图形表示实体 (节点) 集合之间的关系 (边)
在这里呢,U表示的是全局,V表示节点,E表示边
上图则是一些存储的信息,比如点的信息是长为6的向量,边的信息是长为8的向量,全局信息是一个长为5的向量,这里面每个向量的值是一种信息
另外边也分为有向边和无向边,边上的信息有的是单向流动的
图以及应用
图片表示成图
我们通常将图像视为带有图像通道的矩形网格,将它们表示为数组(例如,244x244x3)这里的3指的是RGB三通道,我们通常会把其转变为Tensor输入神经网络。
但我们可以把他当做图去处理,比如每个像素点就是点,如果某些点是邻接关系的话,那他们之间会有一条边,就叫做相邻像素,每个非边界像素正好有 8 个邻居(绕他一圈),存储在每个节点上的信息是一个 3 维向量,表示像素的 RGB 值。
可视化图形连通性的一种方法是通过其邻接矩阵。我们对节点进行排序,在本例中为一个简单的 5x5 笑脸图像中的每个 25 像素,如果两个节点共享一条边,则用一个条目填充矩阵 nnodes×nnodes 。请注意,下面的这三种表示形式都是同一数据的不同视图。
从左到右依次为图形像素,邻接矩阵(这里的蓝色表示左侧上侧对应的点有邻接边),图
我们可以看到中间的点会对应8个邻居,每个像素点,会对应图里的每个结点
文本表示成图
文本可以是一个序列,每个词就是一个点,然后每对相邻的词之间会有一条相邻的边(这里是有向边)
(温馨提示:原来的blog可以进行字符删改,可自己尝试)
虽然可以这样做,但是这通常不是文本和图像的编码方式:这些图形表示是多余的,因为所有图像和所有文本都具有非常规则的结构。例如,图像在其邻接矩阵中具有带状结构,因为所有节点(像素)都连接在一个网格中。文本的邻接矩阵只是一条对角线,因为每个单词只连接到前一个单词和下一个单词。
结构更加异构的数据
分子作为图形
这个非常好理解
分子是物质的组成部分,由 3D 空间中的原子和电子构成。所有粒子都在相互作用,但是当一对原子彼此保持稳定的距离时,我们称它们共享共价键。不同的原子对和键具有不同的距离(例如单键、双键)。将这个 3D 对象描述为图形是一种非常方便和常见的抽象方法,其中节点是原子,边是共价键。
我们可以看到最左边和最右边完全一致
同理这个是咖啡因分子的3D展示
社交网络作为图表
社交网络是研究人们、机构和组织的集体行为模式的工具。我们可以通过将个体建模为节点,将他们的关系建模为边来构建一个表示人群的图。
比如这个戏剧《奥赛罗》人物互动的图
与图像和文本数据不同,社交网络没有相同的邻接矩阵。
因为社交网络中的节点(用户)和边(关系)是动态变化的。用户可以随时添加或删除朋友、关注者,导致邻接矩阵频繁变化。而图像和文本数据通常是静态的,数据结构相对固定。
这里是空手道比赛的人物网络图
引用网络作为图表
科学家在发表论文时通常会引用其他科学家的工作。我们可以将这些引文网络可视化为一个图表,其中每篇论文都是一个节点,每条有向边都是一篇论文与另一篇论文之间的引文。此外,我们可以将每篇论文的信息添加到每个节点中,例如摘要的单词嵌入。
引用文章,一般都是单向引用,比如论文最后的参考文献,这里其实就是很多笔记软件给的知识图谱
其他示例
在计算机视觉中,我们有时希望标记视觉场景中的对象。然后,我们可以将这些对象视为节点,将它们的关系视为边来构建图形。
实际图形的结构在不同类型的数据之间可能会有很大差异 — 有些图形有许多节点,但它们之间的连接很少,反之亦然。图形数据集在节点数量、边缘和节点连接方面可能有很大差异(在给定数据集内以及数据集之间)。
这里有作者给出的一些dataset的图的信息
哪些类型的问题具有图结构化数据?
图形上的预测任务有三种常规类型:图形级别、顶点级别和边级别。
在图形级任务中,我们预测整个图形的单个属性。对于顶点级任务,我们预测图形中每个节点的一些属性。对于边级任务,我们想要预测图形中边的属性或是否存在。
图形级任务
我们输入的是一个图标,他能分出具体的分子(每一个子图)
这类似于 MNIST 和 CIFAR 的图像分类问题(这里在我pytorch的教程里有所涉猎),我们希望将标签(tag)与整个图像相关联。
对于文本,一个类似的问题是情感分析,我们想一次识别整个句子的情绪或情感。
顶点级任务
节点级任务涉及预测图形中每个节点的身份或角色。
节点级预测问题的一个典型示例是 Zach 的空手道俱乐部。
该数据集是一个社交网络图,随着故事的发展,Hi 先生(教练)和 John H(管理员)之间的不和在空手道俱乐部造成了分裂。节点表示单个空手道练习者,边缘表示这些成员在 Karate 之外的交互。预测问题是对给定成员在世仇后是否忠于 Hi 先生或 John H 进行分类。在这种情况下,节点与 Instructor 或 Administrator 之间的距离与此标签高度相关。
输入的是具有未标记节点的图,输出的可以看到有两类(颜色标注)
左侧是问题的初始条件,右侧是可能的解决方案,其中每个节点都已根据联盟进行分类。该数据集可用于其他图问题,例如无监督学习。
按照图像类比,节点级预测问题类似于图像分割,我们试图标记图像中每个像素的作用。
对于文本,类似的任务是预测句子中每个单词的词性(例如名词、动词、副词等)
边级任务
边缘级推理的一个例子是图像场景理解。
除了识别图像中的对象之外,深度学习模型还可用于预测它们之间的关系。我们可以将其表述为边缘级分类:给定代表图像中对象的节点,我们希望预测这些节点中的哪些共享一条边或该边的值是多少。
如果我们希望发现实体之间的联系,我们可以将图视为完全连接,并根据它们的预测值修剪边以得到稀疏图。
在上面的 (b) 中,原始图像 (a) 被分割成五个实体:每个战士、裁判、观众和垫子。(C) 显示了这些实体之间的关系。
我们可以看到经过处理,一些边上面出现了一些label
在深度学习中使用图形的挑战
那么,我们如何用神经网络来解决这些不同的图任务呢?
- 第一步是考虑如何表示图以与神经网络兼容。
首先图形包含多达四种类型的信息,我们可能希望使用这些信息进行预测:节点、边、全局信息和连通性。
前三个相对简单,我们可以用Tensor表示:例如,对于节点,我们可以通过为每个节点分配一个索引 i 并将特征存储在 nodei中 N 来形成一个节点特征矩阵 N。虽然这些矩阵的示例数量可变,但它们无需任何特殊技术即可处理。
但是,表示图形的连通性更为复杂。也许最明显的选择是使用邻接矩阵,因为这很容易张量化。(Tensor)
但是,这种表示形式也有一些缺点。
- 从示例数据集表中,我们可以看到图形中的节点数可以达到数百万个,并且每个节点的边数可以高度可变。也就是说矩阵的边长会变的非常大,通常,这会导致稀疏矩阵(大多数的值都为0,存的数据有点过少),这些矩阵的空间效率低下,本身稀疏矩阵的处理就是非常的麻烦
- 另一个问题是,有许多邻接矩阵可以编码相同的连通性,并且不能保证这些不同的矩阵在深度神经网络中会产生相同的结果(也就是说,它们不是排列不变的)
这里就是两个图,但是是一个问题,那么就要保证两边图输进去,要最终是相同的结果。
下面的示例显示了可以描述这个包含 4 个节点的小图的每个邻接矩阵。这已经是相当数量的邻接矩阵了——对于像 Othello 这样的大型示例,这个数字是站不住脚的。
可以看到图多的很夸张,顶点顺序不同会出现极其多的情况
所以引出下一个重要的定义:邻接列表
表示稀疏矩阵的一种优雅且节省内存的方法是作为邻接列表。
这些描述节点 ni之间边 ek 的连接性,并 nj 作为邻接列表的第 k 个条目中的元组 (i,j)。由于我们预计边的数量远低于邻接矩阵 ( n2nodes) 的条目数,因此我们避免在图的断开连接部分进行计算和存储。
上图的Node,Edges,Global都是标量(正常我们需要张量的形式),然后第三个邻接列表的长度和有多少条边相关,这里的0-7代表是点的索引,比如图中我选中的部分,[7,5]的意思是边是由index为5和7的点组成的,然后它的这个边和Edges中是一一对应的
图神经网络(GNN)
GNN 是图的所有属性(节点、边、全局上下文)的可优化转换,它保持图的对称性(排列不变性)。
We’re going to build GNNs using the “message passing neural network” framework proposed by Gilmer et al.
GNN 采用 “graph-in, graph-out” 架构,这意味着这些模型类型接受图形作为输入,将信息加载到其节点、边和全局上下文中,并逐步转换这些嵌入,而无需改变输入图的连通性。
The simplest GNN
此 GNN 在图形的每个组件上使用单独的多层感知器 (MLP)(或您最喜欢的可微模型)我们称之为 GNN 层。对于每个节点向量,我们应用 MLP 并返回一个学习到的节点向量。我们对每条边做同样的事情,学习每条边的嵌入,也对全局上下文向量做同样的事情,学习整个图的单个嵌入。
其实通俗的讲就是我们有三个向量分别是点,边和整体,我们分别把三个向量输入三个感知机进行作用 f ,每个作用都是一个独立的,之后我们返回学习的三个向量就可以了,所以这样就不会改变我们本身图的结构,另外无论你怎么对我的节点做任何的排序都不会产生影响
与神经网络模块或层一样,我们可以将这些 GNN 层堆叠在一起。
GNN Predictions by Pooling Information
我们已经构建了一个简单的 GNN,但是我们如何在上述任务中进行预测呢?
我们将考虑二元分类的情况,但这个框架可以很容易地扩展到多类或回归的情况。如果任务是对节点进行二分类预测,并且图形已经包含节点信息,则方法很简单 — 对于每个节点嵌入,应用线性分类器。(类似于全连接层)
全连接层的每一个输出都可以看成前一层的每一个结点乘以一个权重系数W,最后加上一个偏置值b得到
我们可以想象一个社交网络,我们希望通过不使用用户数据(节点)而只使用关系数据(边缘)来匿名化用户数据(节点)。类似于 Node 任务。在空手道俱乐部的例子中,这只是使用人与人之间的会议次数来确定与 Hi 先生或 John H 的联盟。
但是,您可能将图形中的信息存储在边缘中,但在节点中没有信息,但仍需要对节点进行预测。我们需要一种方法来从边缘收集信息并将其提供给节点进行预测。我们可以通过池化来做到这一点。
我们用字母 ρ 表示池化 操作,并表示我们正在从边收集到节点的信息。 pEn→Vn
比如我取的是右上角的顶点,那么与之相邻的所有的边的信息都拿出来作和,之后还有一个全局的信息(图整体信息)拿出来再作和,所以就是四个边,一个全局,图上可以看的很清楚
因此,如果我们只有边级特征,并且试图预测顶点信息,我们可以使用池化将信息路由(或传递)到它需要去的地方。模型如下所示。
所以如上图我们就是这样一个流程,由于没有顶点信息,将边的信息通过池化层变成顶点的信息,之后经过全连接层来输出每个结点的信息
同理。如果我们只有顶点级特征,并且尝试预测边级信息,则模型如下所示。
也是一样,只不过边的信息会从顶点池化来得到(比如一个边可能由邻接的两个点的向量加上全局向量共同得到)
此类场景的一个例子是我们指定的边缘任务。节点可以被识别为图像实体,我们正在尝试预测实体是否共享关系(二进制边)。
如果我们只有顶点级特征,并且需要预测全局属性,则需要将所有可用的节点信息收集在一起并聚合它们。这类似于 CNN 中的全局平均池化层。边也是如此。
这是预测分子特性的常见情况。例如,我们有原子信息、连接性,我们想知道分子的毒性(有毒/无毒),或者它是否具有特定的气味(玫瑰/非玫瑰)。
在我们的示例中,分类模型 c 可以很容易地替换为任何可微分模型,或者使用广义线性模型适应多类分类。
这个简单的模型过程就是对上面的累加过程,很简单
请注意,在这个最简单的 GNN 公式中,我们根本没有在 GNN 层内使用图的连通性。每个节点都是独立处理的,每条边以及全局上下文也是如此。我们只在汇集信息进行预测时使用连接。
Passing messages between parts of the graph
我们可以使用消息传递来做到这一点,其中相邻的节点或边交换信息并影响彼此更新的嵌入。
(这里的话看原文比较好,翻译的有点不精准)
Message passing works in three steps:
- For each node in the graph, gather all the neighboring node embeddings (or messages), which is the gg function described above.
- Aggregate all messages via an aggregate function (like sum).
- All pooled messages are passed through an update function, usually a learned neural network.
在这个例子中,我选用的是最下面的结点,那么我们更新就会使用最下面的结点以及和其相邻的结点信息进行个相加,然后在进入MLP进行一个更新信息
这让人想起标准卷积:从本质上讲,消息传递和卷积是聚合和处理元素邻居信息以更新元素值的操作。在图形中,元素是一个节点,在图像中,元素是一个像素。但是,图形中相邻节点的数量可以是可变的,这与图像中的每个像素都有一定数量的相邻元素不同。
通过将传递 GNN 的消息层堆叠在一起,节点最终可以合并来自整个图的信息:在三层之后,节点拥有有关距离它三步远的节点的信息。(这里参考一下文章刚开始那张图片,三层之后顶点可能会和他邻居的邻居进行一个信息叠加)
那么我们更新架构图以包含节点的这个新信息源,可以看到顶点的MLP之前进行了一个邻接点信息的相加
GCN 架构的示意图,它通过将距离为 1 度的相邻节点池化来更新图形的节点表示。
Learning edge representations
我们的数据集只有边缘信息时,我们在上面展示了如何使用池化将信息从边缘路由到节点,但仅限于模型的最终预测步骤。我们是否可以在网络前面的层里进行一个节点和边之间的共享。
我们可以像之前使用相邻节点信息一样,通过首先池化边信息,使用 update 函数对其进行转换并存储它,从而合并来自相邻边的信息。
但是,存储在图形中的节点和边信息不一定具有相同的大小或形状,因此尚不清楚如何组合它们。一种方法是学习从边空间到节点空间的线性映射,反之亦然。或者,可以在 update 函数之前将它们连接在一起。
这里其实就是把点的信息先给边,然后再把边的信息再给点就可以解决维度不一样的问题了
我们更新哪些图形属性以及更新它们的顺序是构建 GNN 时的一个设计决策。我们可以选择是在 edge embedding 之前更新 node embeddings,还是相反。这里谁更好分情况
其中我们有四个更新的表示,它们被组合成新的节点和边表示:节点到节点(线性)、边缘到边缘(线性)、节点到边缘(边缘层)、边缘到节点(节点层)。
我们也可以编织特别多层,可以两种同时搞就可以了
Adding global representations
到目前为止,我们描述的网络存在一个缺陷:即使我们多次应用消息传递,图中彼此相距较远的节点也可能永远无法有效地相互传输信息。对于一个节点,如果我们有 k 层,则信息最多会传播 k 步。当预测任务依赖于相距甚远的节点或节点组时,这可能是一个问题。一种解决方案是让所有节点都能够相互传递信息。不幸的是,对于大型图,这很快就会变得计算成本高昂(尽管这种方法称为“虚拟边”,已被用于分子等小图)
说白了,就是有两个离的特别远的顶点,你需要传播好几百次才能到你,这样的计算量是非常恐怖的
此问题的一种解决方案是使用图形 (U) 的全局表示形式,该图形有时称为主节点(master code)或 context 向量
这个全局上下文向量连接到网络中的所有其他节点和边,并且可以充当它们之间的桥梁来传递信息,从而为整个图形构建表示。这创建了比原本可以学习的更丰富、更复杂的图形表示。
其实就是揭示了为啥把全局信息也要全部加进点信息里的原因,U是跟所有的E相连的也是V相连的,更新U的时候也要把V和E的信息加进来
在这个视图中,所有 graph attribute 都有学习到,因此我们可以在池化过程中通过调节我们感兴趣的属性相对于其余属性的信息来利用它们。
例如,对于一个节点,我们可以考虑来自相邻节点、连接边和全局信息的信息。
这就是 a type of featurize-wise attention mechanism
GNN playground
这个非常的nb,把可视化界面嵌入了Javascript,再次感慨谷歌大佬的实力
我们的 playground 显示了一个带有小分子图的图级预测任务。我们使用 Leffingwell 气味数据集,它由具有相关气味感知(标记)的分子组成。预测分子结构(图形)与其气味的关系是一个 100 年前的问题,横跨化学、物理学、神经科学和机器学习。
为了简化这个问题,我们只考虑每个分子进行二分类,根据专业调香师的标记,对分子图是否闻起来“刺鼻”进行分类。如果一个分子具有强烈、醒目的气味,我们就说它具有“刺鼻”的气味。例如,可能含有烯丙醇分子的大蒜和芥末就具有这种品质。分子 piperitone 通常用于薄荷味糖果,也被描述为具有刺激性气味。
我们将每个分子表示为图表,其中原子是包含其原子身份(碳、氮、氧、氟)的 one-hot 编码的节点,键是包含编码其键类型(单、双、三或芳烃)的 one-hot 编码的边。
Our general modeling template for this problem will be built up using sequential GNN layers, followed by a linear model with a sigmoid activation for classification. The design space for our GNN has many levers that can customize the model:
- The number of GNN layers, also called the depth.
- The dimensionality of each attribute when updated. The update function is a 1-layer MLP with a relu activation function and a layer norm for normalization of activations.
- The aggregation function used in pooling: max, mean or sum.
- The graph attributes that get updated, or styles of message passing: nodes, edges and global representation. We control these via boolean toggles (on or off). A baseline model would be a graph-independent GNN (all message-passing off) which aggregates all data at the end into a single global attribute. Toggling on all message-passing functions yields a GraphNets architecture.
这里的模型内容看原文就好,然后他还有一些实验的界面可以自己调一调
这个右图我来解释下,其实就是中间的填充是模型预测是否刺鼻的结果,颜色越绿越不刺鼻,越红越刺鼻,然后外面的圈的颜色代表是否刺鼻,绿色显然不刺鼻,红色是刺鼻,内外颜色不同显然就是代表预测失败,但我们看到2 layers是的模型AUC还是挺高的预测,就是其分类的不错。(其余操作通过原文进行一些调整就可以看看)
Some empirical GNN design lessons
下面就是一些参数的影响
是否有一些明确的 GNN 设计选择可以给我们带来更好的性能?例如,较深的 GNN 模型是否比较浅的 GNN 模型性能更好?或者 Aggregation Functions 之间是否有明确的选择?答案将取决于数据,甚至不同的特征化和构造图形的方式也会给出不同的答案。
散点图中的每个点都代表一个模型:x 轴是超参数的数量,y 轴是性能。将鼠标悬停在某个点上可查看 GNN 架构参数。
我们可以看到随着超参数随指数级别的增长,我们的AUC最低也会变大,说明超参数越多我们训练的效果是更好的
GNN 是一种参数效率非常高的模型类型:即使对于少量参数 (3k),我们也已经可以找到高性能的模型。
接下来,我们可以查看根据不同图形属性的学习表示的维度聚合的性能分布。
这就是三组图形属性的学习。
这里是箱线图,中间的横线表示的是中值,先找出一组数据的上边缘、下边缘、中位数和两个四分位数,然后连接两个四分位数形成箱体,再将上边缘和下边缘与箱体相连接。我们当然希望中线尽量在上面,然后bar长尽量小,不会特别的敏感。
我们可以注意到,具有较高维度的模型往往具有更好的均值和下限性能,但最大值没有发现相同的趋势。对于较小的尺寸,可以找到一些性能最佳的模型。由于更高的维度也将涉及更多的参数,因此这些观察结果与上图相吻合。
接下来,我们可以看到基于 GNN 层数的性能细分。
这个图的右侧是关于神经网络层数的一些箱线图,这个图得出的结论就是你可以把参数的数量调的多点,也要考虑到参数取值的好坏问题。
虽然平均性能往往随着层数的增加而增加,但性能最好的模型没有三层或四层,而是两层。此外,性能的下限会随着 4 层的增加而降低。这种效果以前已经观察到,具有较高层数的 GNN 将在更远的距离广播信息,并且可能会冒着其节点表示在多次连续迭代中被“稀释”的风险(就是可以看到紫色节点比较分散)
我们的数据集是否有首选的聚合操作?下图根据聚合类型对性能进行了细分。
总体而言,sum 似乎对 mean 性能有非常轻微的改进,但 max 或 mean 可以给出同样好的模型。
之前的探索给出了好坏参半的信息。我们可以找到平均趋势,其中复杂性越高,性能越好,但我们可以找到明显的反例,其中参数、层数或维度数较少的模型性能更好。一个更明显的趋势是相互传递信息的属性数量。
在这里,我们根据消息传递的样式对性能进行细分。在这两个极端,我们考虑了不在图形实体之间通信的模型(“无”)和在节点、边和全局之间传递消息的模型。
我们可以看到没有传递信息的情况就非常差。
总的来说,我们看到通信的图形属性越多,平均模型的性能就越好。我们的任务以全局表示为中心,因此显式学习此属性也往往会提高性能。我们的 node 表示似乎也比 edge 表示更有用,这是有道理的,因为这些属性中加载了更多信息。
从这里开始,您可以采取许多方向来获得更好的性能。我们希望两个突出两个一般方向,一个与更复杂的图形算法有关,另一个与图形本身有关。
GNN 研究的前沿之一不是制作新的模型和架构,而是“如何构建图”,更准确地说,为图注入可以利用的额外结构或关系。正如我们粗略地看到的那样,传达的图形属性越多,我们就越倾向于拥有更好的模型。在这种特殊情况下,我们可以考虑通过在节点之间添加额外的空间关系、添加不是键的边或子图之间明确的可学习关系,使分子图更加特征丰富。
Into the Weeds
接下来,我们有几个部分介绍了与 GNN 相关的无数与图形相关的主题。(这里我只介绍了我能看懂的几个部分,这里其实是几个随笔,具体部分可以看原文,博主作为科研小白也会逐渐深入理解)
Other types of graphs (multigraphs, hypergraphs, hypernodes, hierarchical graphs)
虽然我们只描述了每个属性的矢量化信息的图形,但图形结构更加灵活,可以容纳其他类型的信息。幸运的是,消息传递框架足够灵活,通常使 GNN 适应更复杂的图形结构是关于定义新的图形属性如何传递和更新信息。
例如,我们可以考虑多边图或多重图,其中一对节点可以共享多种类型的边,当我们想根据节点的类型对节点之间的交互进行不同的建模时,就会发生这种情况。例如,对于社交网络,我们可以根据关系类型(熟人、朋友、家人)指定边类型。可以通过为每种边类型提供不同类型的消息传递步骤来调整 GNN
例如,一个节点代表一个图,也称为超节点图
嵌套图可用于表示分层信息。例如,我们可以考虑一个分子网络,其中节点代表一个分子,如果我们有将一个分子转换为另一个分子的方法(反应),两个分子之间共享一条边,在这种情况下,我们可以在嵌套图上学习,方法是让一个 GNN 在分子水平上学习表示,另一个 GNN 在反应网络水平上学习,并在训练期间在它们之间交替。
另一种类型的图形是超图,其中一条边可以连接到多个节点,而不仅仅是两个。对于给定的图,我们可以通过识别节点社区并分配连接到社区中所有节点的超边来构建超图。
左边是个多重图,右边是个一个具有三种边类型的三级分层图,而中间那层属于是超节点图
Sampling Graphs and Batching in GNNs
训练神经网络的一种常见做法是使用根据训练数据的随机常量大小(批量大小)子集(小批量)计算的梯度来更新网络参数。
由于彼此相邻的节点和边的数量可变,这种做法给图带来了挑战,这意味着我们不能有一个恒定的批量大小。所以如何对图表进行采样是一个悬而未决的研究问题。
这里有四种不同采样的方法
Inductive biases
在构建模型以解决特定类型数据的问题时,我们希望将模型专业化以利用该数据的特征。当成功完成此操作时,我们通常会看到更好的预测性能、更短的训练时间、更少的参数和更好的泛化。
例如,在对图像进行标记时,我们希望利用狗仍然是狗的事实,无论它在图像的左上角还是右下角。因此,大多数图像模型使用卷积,这是平移不变的。对于文本,标记的顺序非常重要,因此递归神经网络按顺序处理数据。此外,一个词元的存在(例如单词 'not')会影响句子其余部分的含义,因此我们需要能够 “关注” 文本其他部分的组件,像 BERT 和 GPT-3 这样的 transformer 模型可以做到这一点。这些是归纳偏差的一些例子,我们识别数据中的对称性或规律性,并添加利用这些特性的建模组件。
在图的情况下,我们关心每个图分量(边、节点、全局)如何相互关联,因此我们寻找具有关系归纳偏差的模型。其实就是保证图的对称性
模型应保留实体之间的显式关系(邻接矩阵)并保持图对称性(排列不变性)。我们预计实体之间交互很重要的问题将从图形结构中受益。具体来说,这意味着在集合上设计转换:节点或边上的操作顺序无关紧要,操作应该适用于可变数量的输入。
Comparing aggregation operations
汇集来自相邻节点和边缘的信息是任何相当强大的 GNN 架构中的关键步骤。由于每个节点都有可变数量的邻居,并且由于我们需要一种可微分方法来聚合此信息,因此我们希望使用与节点排序和提供的节点数无关的平滑聚合操作。
选择和设计最佳聚合操作是一个开放的研究课题
聚合操作的一个理想属性是相似的输入提供相似的聚合输出,反之亦然。一些非常简单的候选排列不变运算是 sum、mean 和 max。方差等汇总统计量也有效。所有这些都采用可变数量的 inputs,并提供相同的 output,无论 input ordering如何。让我们来探讨一下这些操作之间的区别。
这里我们可以看到右图的Max和Mean池化操作不会区分两个图,至于哪个更好针对你的数据集来说的
作者举了一些例子,当节点的相邻要素数量高度可变或您需要局部邻域特征的标准化视图时,均值运算可能很有用。当您想要高亮显示局部邻域中的单个突出要素时,max 操作可能非常有用。Sum 通过提供特征的局部分布的快照,在这两者之间提供平衡,但由于它未归一化,因此也可以突出显示异常值。在实践中,通常使用 sum。
设计聚合操作是一个开放的研究问题,它与集合上的机器学习相交,新方法,例如 Principal Neighborhood 通过连接多个聚合操作并添加一个扩展函数来考虑这些操作,该函数取决于要聚合的实体的连接程度。同时,还可以设计特定于域的聚合操作。一个例子是 “Tetrahedral Chirality” 聚合运算符(这里为扩充内容)
Final thoughts
图形是一种强大而丰富的结构化数据类型,其优势和挑战与图像和文本截然不同。在本文中,我们概述了研究人员在构建基于神经网络的图形处理模型时提出的一些里程碑。我们已经介绍了使用这些架构时必须做出的一些重要设计选择,希望 GNN playground 可以直观地了解这些设计选择的经验结果是什么。近年来 GNN 的成功为各种新问题创造了巨大的机会,我们很高兴看到该领域将带来什么。
参考内容
【零基础多图详解图神经网络(GNN/GCN)【论文精读】】 https://www.bilibili.com/video/BV1iT4y1d7zP/?share_source=copy_web&vd_source=6f2c6e64a3d1c249158d8a144c506ad6
(强推李沐老师的深度学习!!!)
- Author:Chailyn
- URL:https://own.chailyncui.blog/article/paper-1
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts