【引言】
神经网络已经适应于利用图的结构和属性。 我们探索构建图神经网络所需的组件 - 并激发它们背后的设计选择。
【注】我们可以看到每一个节点是和下层某几个节点计算而来。顶部的节点由他的邻居的节点计算,越顶层,关系的邻居越多。这也是图神经网络如何利用图的结构化信息来处理信息的。
本文是关于图神经网络的两篇 Distill 出版物之一。 查看了解图上的卷积以了解图像上的卷积如何自然地推广到图上的卷积。【有两篇关于图卷积,本篇比较基础】
图表就在我们身边;现实世界中的对象通常是根据它们与其他事物的联系来定义的。一组对象,以及它们之间的联系,自然地表示为一个图。十多年来,研究人员开发了对图形数据进行操作的神经网络(称为图形神经网络或 GNN)。最近的发展提高了他们的能力和表现力。我们开始在抗菌发现、物理模拟、假新闻检测、交通预测和推荐系统等领域看到实际应用。【图神经网络刚开始应用,比较新的领域。】
【这篇文章要干什么?】
本文探索并解释了现代图神经网络。我们将这项工作分为四个部分。首先,我们看看什么样的数据最自然地表述为图表,以及一些常见的例子。其次,我们探讨了图表与其他类型数据的不同之处,以及我们在使用图表时必须做出的一些专门选择。第三,我们构建了一个现代 GNN,遍历模型的每个部分,从该领域的历史建模创新开始。我们逐渐从简单的实现转向最先进的 GNN 模型。第四也是最后一点,我们提供了一个 GNN Playground,您可以在其中玩弄真实的任务和数据集,以建立对 GNN 模型的每个组件如何对其做出的预测做出贡献的更强烈的直觉。【作者将本文分成四块,后面也是按照四部分进行展开】
【什么是图?】
首先,让我们确定什么是图表。图表示实体(节点)集合之间的关系(边)。
【其中像数据结构中的图结构,拥有顶点属性(比如包含节点信息,邻居个数),边属性,和图的界限U】
为了进一步描述每个节点、边或整个图,我们可以将信息存储在图中的每个片段中
【每个属性通过一个向量来表示其中的信息】
我们还可以通过将方向与边(有向、无向)相关联来专门化图。
边可以是定向的,其中边𝑒 具有源节点𝑣𝑠𝑟𝑐 和目标节点𝑣𝑑𝑠𝑡。在这种情况下,信息从𝑣𝑠𝑟𝑐 流向𝑣𝑑𝑠𝑡。它们也可以是无向的,没有源节点或目标节点的概念,信息双向流动。请注意,拥有一条无向边相当于拥有一条从𝑣𝑠𝑟𝑐 到𝑣𝑑𝑠𝑡的有向边,以及一条从𝑣𝑑𝑠𝑡到𝑣𝑠𝑟𝑐的有向边。
图是非常灵活的数据结构,如果现在看起来很抽象,我们将在下一节中通过示例将其具体化。
图结构的应用
您可能已经熟悉某些类型的图形数据,例如社交网络。然而,图表是一种非常强大和通用的数据表示,我们将展示两种您可能认为无法建模为图表的数据:图像和文本。虽然违反直觉,但可以通过将图像和文本视为图形来了解更多关于图像和文本的对称性和结构的信息,并建立一种有助于理解其他不太像网格的图形数据的直觉,我们将在后面讨论。
图像作为图结构表示
我们通常将图像视为具有图像通道的矩形网格,将它们表示为数组(例如,244x244x3 浮点数)。将图像视为具有规则结构的图的另一种方式,其中每个像素代表一个节点,并通过边缘连接到相邻像素。每个非边界像素恰好有 8 个邻居,每个节点存储的信息是一个 3 维向量,表示该像素的 RGB 值。
可视化图的连通性的一种方法是通过其邻接矩阵。我们对节点进行排序,在这种情况下,在一张简单的 5x5 笑脸图像中每个 25 个像素,如果两个节点共享一条边,则使用条目填充n𝑛𝑜𝑑𝑒𝑠×n𝑛𝑜𝑑𝑒𝑠的矩阵。请注意,下面这三种表示形式中的每一种都是同一条数据的不同视图。
文字用图结构表示
我们可以通过将索引与每个字符、单词或标记相关联,并将文本表示为这些索引的序列来对文本进行数字化。这将创建一个简单的有向图,其中每个字符或索引都是一个节点,并通过一条边连接到它后面的节点。
当然,在实践中,文本和图像通常不是这样编码的:这些图形表示是多余的,因为所有图像和所有文本都将具有非常规则的结构。例如,图像在其邻接矩阵中具有带状结构,因为所有节点(像素)都连接在一个网格中。文本的邻接矩阵只是一条对角线,因为每个单词只连接到前一个单词,并连接到下一个单词。
野外的图值数据
图表是描述您可能已经熟悉的数据的有用工具。让我们继续讨论结构更加异构的数据。在这些示例中,每个节点的邻居数量是可变的(与图像和文本的固定邻居大小相反)。除了图表,这些数据很难用任何其他方式表达。
分子的图表示
分子是物质的组成部分,由 3D 空间中的原子和电子构成。所有粒子都在相互作用,但是当一对原子彼此保持稳定距离时,我们说它们共享一个共价键。不同的原子和键对具有不同的距离(例如单键、双键)。将这个 3D 对象描述为图形是一种非常方便且常见的抽象,其中节点是原子,边是共价键。这是两个常见的分子,以及它们的相关图表。
(左)香茅醛分子的 3d 表示(中)分子中键的邻接矩阵(右)分子的图形表示
(左)咖啡因分子的 3d 表示(中)分子中键的邻接矩阵(右)分子的图形表示。
社交网络的图表示
社交网络是研究人员、机构和组织的集体行为模式的工具。我们可以通过将个人建模为节点并将他们的关系建模为边来构建表示人群的图。
(左)戏剧“奥赛罗”中的场景图像。 (中)剧中人物互动的邻接矩阵。 (右)这些交互的图形表示。
与图像和文本数据不同,社交网络没有相同的邻接矩阵。
(左)空手道比赛的图像。 (中)空手道俱乐部中人与人之间互动的邻接矩阵。 (右)这些交互的图形表示。
引文网络的图表示
科学家在发表论文时经常引用其他科学家的工作。我们可以将这些引用网络可视化为一个图,其中每篇论文都是一个节点,每条有向边是一篇论文和另一篇论文之间的引用。此外,我们可以将有关每篇论文的信息添加到每个节点中,例如摘要的词嵌入。
其它例子
在计算机视觉中,我们有时想要标记视觉场景中的对象。然后,我们可以通过将这些对象视为节点并将它们的关系视为边来构建图形。机器学习模型、编程代码和数学方程也可以表述为图,其中变量是节点,边是以这些变量作为输入和输出的操作。您可能会在其中一些上下文中看到术语“数据流图”。
现实世界图的结构在不同类型的数据之间可能会有很大差异 — 有些图有很多节点,它们之间的连接很少,反之亦然。就节点数、边数和节点的连通性而言,图数据集的差异很大(既在给定的数据集内,也在数据集之间)。
在现实世界中发现的图表的汇总统计数据。数字取决于特征化决策。更多有用的统计数据和图表可以在 KONECT 中找到
图结构化数据有哪些类型的问题?
我们已经描述了一些野外图表的例子,但是我们想对这些数据执行什么任务呢?图上的预测任务一般分为三种类型:图级、节点级和边级。
在图级任务中,我们预测整个图的单个属性。对于节点级任务,我们预测图中每个节点的一些属性。对于边缘级任务,我们希望预测图中边缘的属性或存在。
对于上述三个级别的预测问题(图级、节点级和边缘级),我们将证明以下所有问题都可以使用单个模型类 GNN 来解决。但首先,让我们更详细地了解这三类图预测问题,并提供每一类的具体示例。
还有其他相关任务是积极研究的领域。例如,我们可能想要生成图表,或者在图表上解释预测。更多主题可以在进入附录部分找到。
图级任务
在图级任务中,我们的目标是预测整个图的属性。例如,对于以图形表示的分子,我们可能想要预测该分子的气味,或者它是否会与与疾病有关的受体结合。
这类似于 MNIST 和 CIFAR 的图像分类问题,我们希望将标签与整个图像相关联。对于文本,一个类似的问题是情绪分析,我们希望一次识别整个句子的情绪或情绪。
节点级任务
节点级任务与预测图中每个节点的身份或角色有关。
节点级预测问题的一个典型例子是 Zach 的空手道俱乐部。该数据集是一个单一的社交网络图,由在政治分歧后宣誓效忠于两个空手道俱乐部之一的个人组成。随着故事的发展,Hi先生(教练)和John H(管理员)之间的争执在空手道俱乐部造成了分裂。节点代表单个空手道练习者,边缘代表这些成员在空手道之外的交互。预测问题是在争执之后对给定成员是否忠于 Mr. Hi 或 John H 进行分类。在这种情况下,节点与讲师或管理员之间的距离与此标签高度相关。
左边是问题的初始条件,右边是可能的解决方案,其中每个节点都根据联盟进行了分类。该数据集可用于其他图形问题,例如无监督学习。
按照图像类比,节点级预测问题类似于图像分割,我们试图标记图像中每个像素的作用。对于文本,类似的任务是预测句子中每个单词的词性(例如名词、动词、副词等)。
边级任务
图中剩下的预测问题是边缘预测。
边级推理的一个例子是图像场景理解。除了识别图像中的对象之外,深度学习模型还可用于预测它们之间的关系。我们可以将其表述为边级分类:给定表示图像中对象的节点,我们希望预测这些节点中的哪些节点共享一条边或该边的值是什么。如果我们希望发现实体之间的连接,我们可以考虑完全连接的图,并根据它们的预测值修剪边以得到稀疏图。
在上面的(b)中,原始图像(a)被分割成五个实体:每个战士、裁判、观众和垫子。 (C) 显示了这些实体之间的关系。
在左侧,我们有一个从之前的视觉场景构建的初始图。右侧是根据模型输出修剪某些连接时该图可能的边缘标记。
在机器学习中使用图的挑战
那么,我们如何用神经网络解决这些不同的图形任务呢?第一步是考虑我们将如何表示图形以与神经网络兼容。
机器学习模型通常采用矩形或网格状数组作为输入。因此,如何以与深度学习兼容的格式来表示它们并不是很直观。图有多达四种类型的信息,我们可能希望使用这些信息进行预测:节点、边、全局上下文和连接性。前三个相对简单:例如,对于节点,我们可以通过为每个节点分配索引𝑖并将𝑛𝑜𝑑𝑒𝑖的特征存储在𝑁 中来形成节点特征矩阵𝑁。虽然这些矩阵具有可变数量的示例,但它们可以在没有任何特殊技术的情况下进行处理。
但是,表示图的连通性要复杂得多。也许最明显的选择是使用邻接矩阵,因为这很容易变成张量。然而,这种表示有一些缺点。从上面示例数据集表中,我们看到图中的节点数可能达到数百万级,每个节点的边数可能变化很大。通常,这会导致非常稀疏的邻接矩阵,这是空间效率低下的。
另一个问题是有许多邻接矩阵可以编码相同的连通性,并且不能保证这些不同的矩阵在深度神经网络中会产生相同的结果(也就是说,它们不是置换不变的)。
例如,之前的奥赛罗图可以用这两个邻接矩阵等价地描述。它也可以用节点的所有其他可能排列来描述。
下面的示例显示了可以描述这个由 4 个节点组成的小图的每个邻接矩阵。这已经是大量的邻接矩阵了——对于像奥赛罗这样的更大的例子,这个数字是站不住脚的。
所有这些邻接矩阵都代表同一个图。单击边以将其删除,然后在“虚拟边”上添加它,矩阵将相应更新。
表示稀疏矩阵的一种优雅且节省内存的方法是邻接表。这些将节点 𝑛𝑖 和 𝑛𝑗之间的边 𝑒𝑘 的连通性描述为邻接列表的第 k 个条目中的元组 (i,j)。由于我们期望边数远低于邻接矩阵的条目数(𝑛2𝑛𝑜𝑑𝑒𝑠),因此我们避免在图的不连接部分进行计算和存储。
另一种表述方式是使用 Big-O 表示法,最好使用 𝑂(𝑛𝑒𝑑𝑔𝑒𝑠),而不是 𝑂(
𝑛𝑜𝑑𝑒𝑠)。
为了使这个概念具体化,我们可以看到不同图表中的信息如何在本规范下表示
悬停并单击边、节点和全局图形标记以查看和更改属性表示。一方面我们有一个小图,另一方面是张量表示中的图信息。
应该注意的是,该图使用每个节点/边/全局的标量值,但大多数实际的张量表示具有每个图属性的向量。而不是大小的节点张量[n𝑛𝑜𝑑𝑒𝑠]我们将处理大小的节点张量[n𝑛𝑜𝑑𝑒𝑠,node𝑑𝑖𝑚]. 其他图形属性相同。
图神经网络
既然图的描述是置换不变的矩阵格式,我们将描述使用图神经网络 (GNN) 来解决图预测任务。GNN 是对图的所有属性(节点、边、全局上下文)的可优化转换,它保留了图的对称性(置换不变性)。我们将使用 Gilmer 等人提出的“消息传递神经网络”框架来构建 GNN。使用 Battaglia 等人介绍的 Graph Nets 架构示意图。 GNN 采用“图入图出”架构,这意味着这些模型类型接受图作为输入,将信息加载到其节点、边和全局上下文中,并逐步转换这些嵌入,而不改变输入的连接性图形。
最简单的 GNN
使用我们上面构建的图的数字表示(使用向量而不是标量),我们现在可以构建 GNN。我们将从最简单的 GNN 架构开始,我们在其中学习所有图属性(节点、边、全局)的新嵌入,但我们尚未使用图的连通性。
此 GNN 在图的每个组件上使用单独的多层感知器 (MLP)(或您最喜欢的可微模型);我们称之为 GNN 层。对于每个节点向量,我们应用 MLP 并返回一个学习的节点向量。我们对每条边做同样的事情,学习每个边的嵌入,对于全局上下文向量,学习整个图的单个嵌入。
简单 GNN 的单层。图是输入,每个组件 (V,E,U) 由 MLP 更新以生成新图。每个函数下标表示 GNN 模型第 n 层的不同图形属性的单独函数。
与神经网络模块或层一样,我们可以将这些 GNN 层堆叠在一起。
因为 GNN 不会更新输入图的连通性,所以我们可以用与输入图相同的邻接表和相同数量的特征向量来描述 GNN 的输出图。但是,输出图更新了嵌入,因为 GNN 更新了每个节点、边和全局上下文表示。
通过汇集信息进行 GNN 预测
我们已经构建了一个简单的 GNN,但是我们如何在上面描述的任何任务中进行预测?
我们将考虑二进制分类的情况,但这个框架可以很容易地扩展到多类或回归的情况。如果任务是对节点进行二进制预测,并且图已经包含节点信息,那么方法很简单 - 对于每个节点嵌入,应用线性分类器。
我们可以想象一个社交网络,我们希望通过不使用用户数据(节点)而仅使用关系数据(边缘)来匿名化它们。这种场景的一个实例是我们在节点级任务小节中指定的节点任务。在空手道俱乐部的例子中,这将只是使用人们之间的会议次数来确定与 Mr. Hi 或 John H 的联盟。
然而,事情并不总是那么简单。例如,您可能将图中的信息存储在边中,但节点中没有信息,但仍需要对节点进行预测。我们需要一种从边缘收集信息并将它们提供给节点进行预测的方法。我们可以通过池化来做到这一点。池化分两步进行:
- 对于要合并的每个项目,收集它们的每个嵌入并将它们连接成一个矩阵。
- 然后聚合收集的嵌入,通常通过求和操作。
有关聚合操作的更深入讨论,请转到比较聚合操作部分。
我们用字母𝜌表示池化操作,并表示我们正在收集从边缘到节点的信息为𝑝𝐸𝑛→𝑉𝑛。
将鼠标悬停在一个节点(黑色节点)上,以可视化收集和聚合哪些边以生成该目标节点的嵌入。
因此,如果我们只有边缘级特征,并且试图预测二进制节点信息,我们可以使用池化将信息路由(或传递)到它需要去的地方。模型看起来像这样。
如果我们只有节点级特征,并试图预测二进制边缘级信息,模型看起来像这样。
这种场景的一个例子是我们在边缘级任务小节中指定的边缘任务。节点可以被识别为图像实体,我们试图预测实体是否共享关系(二元边缘)。
如果我们只有节点级别的特征,并且需要预测二进制全局属性,我们需要将所有可用的节点信息收集在一起并聚合它们。这类似于 CNN 中的全局平均池化层。边缘也可以这样做。
这是预测分子特性的常见场景。例如,我们有原子信息、连通性,我们想知道一个分子的毒性(有毒/无毒),或者它是否具有特定的气味(玫瑰/非玫瑰)。
在我们的示例中,分类模型 𝑐 可以轻松地替换为任何可微模型,或使用广义线性模型适应多类分类。
现在我们已经证明我们可以构建一个简单的 GNN 模型,并通过在图的不同部分之间路由信息来进行二元预测。这种池化技术将作为构建更复杂的 GNN 模型的基石。如果我们有新的图属性,我们只需要定义如何将信息从一个属性传递到另一个属性。
请注意,在这个最简单的 GNN 公式中,我们根本没有在 GNN 层内使用图的连通性。每个节点都是独立处理的,每条边也是如此,以及全局上下文。我们只在汇集信息进行预测时使用连通性。
在图表的各个部分之间传递消息
我们可以通过在 GNN 层中使用池化来做出更复杂的预测,以使我们学习的嵌入意识到图的连通性。我们可以使用消息传递来做到这一点,其中相邻节点或边缘交换信息并影响彼此更新的嵌入
消息传递分三个步骤进行:
- 对于图中的每个节点,收集所有相邻节点的嵌入(或消息),这就是上面描述的 𝑔 函数。
- 通过聚合函数(如 sum)聚合所有消息。
- 所有汇集的消息都通过一个更新函数传递,通常是一个学习的神经网络。
您还可以 1) 收集消息,3) 更新它们,2) 聚合它们并且仍然具有置换不变操作。
正如池可以应用于节点或边缘一样,消息传递可以发生在节点或边缘之间。
这些步骤是利用图表连接性的关键。我们将在 GNN 层中构建更精细的消息传递变体,从而产生具有增强表现力和功能的 GNN 模型。
将鼠标悬停在一个节点上,以突出显示相邻节点并可视化将被合并、更新和存储的相邻嵌入。
这一系列操作,当应用一次时,是最简单的消息传递 GNN 层类型。
这让人想起标准卷积:本质上,消息传递和卷积是聚合和处理元素邻居信息以更新元素值的操作。在图中,元素是一个节点,而在图像中,元素是一个像素。但是,图形中相邻节点的数量可以是可变的,这与图像中每个像素都有一定数量的相邻元素不同。
通过将消息传递 GNN 层堆叠在一起,一个节点最终可以整合来自整个图的信息:在三层之后,一个节点拥有离它三步之遥的节点的信息。
我们可以更新我们的架构图以包含节点的新信息源:
GCN 架构的示意图,它通过汇集距离为 1 度的相邻节点来更新图的节点表示。
学习边缘表示
我们的数据集并不总是包含所有类型的信息(节点、边缘和全局上下文)。当我们想对节点进行预测,但我们的数据集只有边缘信息时,我们在上面展示了如何使用池化将信息从边缘路由到节点,但仅限于模型的最后预测步骤。我们可以使用消息传递在 GNN 层内的节点和边之间共享信息。
我们可以使用与之前使用相邻节点信息相同的方式合并来自相邻边的信息,首先将边信息池化,使用更新函数对其进行转换,然后存储它。
但是,存储在图中的节点和边信息不一定是相同的大小或形状,因此目前还不清楚如何组合它们。一种方法是学习从边空间到节点空间的线性映射,反之亦然。或者,可以在更新函数之前将它们连接在一起。
消息传递层的架构示意图。第一步“准备”一条由来自边缘及其连接节点的信息组成的消息,然后将消息“传递”到节点
我们更新哪些图属性以及更新它们的顺序是构建 GNN 时的一项设计决策。我们可以选择是否在边缘嵌入之前更新节点嵌入,或者相反。这是一个具有多种解决方案的开放研究领域——例如,我们可以以“编织”方式更新,其中我们有四个更新的表示,它们组合成新的节点和边表示:节点到节点(线性),边到边(线性),节点到边缘(边缘层),边缘到节点(节点层)。
我们可能会在 GNN 层中结合边缘和节点表示的一些不同方式。
添加全局表示
到目前为止,我们描述的网络存在一个缺陷:即使我们多次应用消息传递,图中彼此相距很远的节点也可能永远无法有效地相互传递信息。对于一个节点,如果我们有 k 层,则信息将最多传播 k 步。对于预测任务依赖于相距很远的节点或节点组的情况,这可能是一个问题。一种解决方案是让所有节点能够相互传递信息。不幸的是,对于大型图,这很快就会变得计算成本高昂(尽管这种称为“虚拟边”的方法已用于诸如分子之类的小型图)。
这个问题的一种解决方案是使用图 (U) 的全局表示,它有时被称为主节点或上下文向量。这个全局上下文向量连接到网络中的所有其他节点和边,并且可以充当它们之间的桥梁以传递信息,从而为整个图建立表示。这创建了一个比其他方式学习的更丰富、更复杂的图表示。
利用全局表示的 Graph Nets 架构示意图。
在这个视图中,所有图属性都学习了表示,因此我们可以在池化期间通过调整我们感兴趣的属性相对于其余属性的信息来利用它们。例如,对于一个节点,我们可以考虑来自相邻节点、连接边和全局信息的信息。为了使新节点嵌入所有这些可能的信息源,我们可以简单地将它们连接起来。此外,我们还可以通过线性映射将它们映射到同一空间并添加它们或应用特征调制层,这可以被认为是一种特征化注意力机制。
基于其他三个嵌入(相邻节点、相邻边、全局)调节一个节点信息的示意图。这一步对应于 Graph Nets Layer 中的节点操作。
GNN playground
我们在这里描述了广泛的 GNN 组件,但它们在实践中实际上有何不同?这个 GNN 游乐场可让您了解这些不同的组件和架构如何有助于 GNN 学习实际任务的能力。
我们的 Playground 展示了一个带有小分子图的图级预测任务。我们使用 Leffingwell 气味数据集,它由具有相关气味感知(标签)的分子组成。预测分子结构(图)与其气味的关系是一个跨越化学、物理学、神经科学和机器学习的 100 年历史问题。
为了简化问题,我们只考虑每个分子一个二进制标签,对分子图是否闻起来“刺鼻”进行分类,由专业调香师标记。如果一个分子具有强烈、醒目的气味,我们就说它具有“刺鼻”气味。例如,可能含有烯丙醇分子的大蒜和芥末就具有这种性质。分子胡椒酮,通常用于薄荷味糖果,也被描述为具有刺激性气味。
对分子图是否闻起来“刺鼻”进行分类,由专业调香师标记。如果一个分子具有强烈、醒目的气味,我们就说它具有“刺鼻”气味。例如,可能含有烯丙醇分子的大蒜和芥末就具有这种性质。分子胡椒酮,通常用于薄荷味糖果,也被描述为具有刺激性气味。
我们针对这个问题的通用建模模板将使用顺序 GNN 层构建,然后是带有 sigmoid 激活的线性模型用于分类。我们 GNN 的设计空间有许多可以定制模型的杠杆:
- GNN 层数,也称为深度
- 更新时每个属性的维度。更新函数是一个 1 层 MLP,具有一个 relu 激活函数和一个用于规范化激活的层范数。
- 池化中使用的聚合函数:max、mean 或 sum。
- 被更新的图属性,或消息传递的样式:节点、边和全局表示。我们通过布尔切换(开或关)控制这些。基线模型将是一个独立于图的 GNN(所有消息传递),它将最后的所有数据聚合到一个全局属性中。切换所有消息传递函数会产生一个 GraphNets 架构。
为了更好地理解 GNN 如何学习图的任务优化表示,我们还查看了 GNN 的倒数第二层激活。这些“图嵌入”是 GNN 模型在预测之前的输出。由于我们使用广义线性模型进行预测,因此线性映射足以让我们了解我们如何在决策边界周围学习表示。
由于这些是高维向量,我们通过主成分分析 (PCA) 将它们简化为 2D。一个完美的模型将可见性分离标记的数据,但由于我们正在减少维度并且也有不完美的模型,这个边界可能更难看到。
尝试不同的模型架构来建立你的直觉。例如,看看是否可以编辑左侧的分子以使模型预测增加。对于不同的模型架构,相同的编辑是否具有相同的效果?
这个游乐场在 tf.js 中的浏览器上实时运行。 链接
编辑分子以查看预测如何变化,或更改模型参数以加载不同的模型。在散点图中选择不同的分子。
【实验】
GNN 设计
在探索上述架构选择时,您可能会发现某些模型比其他模型具有更好的性能。是否有一些明确的 GNN 设计选择可以为我们带来更好的性能?例如,较深的 GNN 模型是否比较浅的模型表现更好?还是在聚合函数之间有明确的选择?答案将取决于数据,甚至不同的特征化和构建图的方式也可以给出不同的答案。
通过下面的交互图,我们探索了 GNN 架构的空间以及该任务在几个主要设计选择中的性能:消息传递的风格、嵌入的维度、层数和聚合操作类型。
散点图中的每个点代表一个模型:x 轴是可训练变量的数量,y 轴是性能。将鼠标悬停在某个点上可查看 GNN 架构参数。 链接
每个模型的性能与其可训练变量数量的散点图。将鼠标悬停在某个点上可查看 GNN 架构参数。
首先要注意的是,令人惊讶的是,更多的参数确实与更高的性能相关。 GNN 是一种参数效率非常高的模型类型:即使是少量参数(3k),我们也已经可以找到具有高性能的模型。
接下来,我们可以查看基于不同图属性的学习表示的维度聚合的性能分布。
跨不同节点、边缘和全局维度的模型的聚合性能。
我们可以注意到,具有更高维度的模型往往具有更好的均值和下限性能,但没有发现最大值的相同趋势。对于较小的尺寸,可以找到一些性能最好的模型。由于更高的维度也将涉及更多数量的参数,因此这些观察结果与前面的图一致。
接下来我们可以看到基于 GNN 层数的性能细分。
层数与模型性能的图表,以及模型性能与参数数量的散点图。每个点都按层数着色。将鼠标悬停在某个点上可查看 GNN 架构参数。
箱线图显示了类似的趋势,虽然平均性能随着层数的增加而增加,但性能最好的模型不是三层或四层,而是两层。此外,性能的下限随着四层而降低。这种效果之前已经观察到,具有更多层数的 GNN 将在更远的距离广播信息,并且可能会冒着使其节点表示从许多连续迭代中“稀释”的风险 。
我们的数据集是否有首选的聚合操作?我们的下图根据聚合类型细分了性能。
聚合类型与模型性能的图表,以及模型性能与参数数量的散点图。每个点都按聚合类型着色。将鼠标悬停在某个点上可查看 GNN 架构参数。
总体而言,sum 似乎对平均性能有非常轻微的改进,但 max 或 mean 可以提供同样好的模型。在查看聚合操作的区分/表达能力时,这对于上下文化很有用。
先前的探索给出了不同的信息。我们可以找到更复杂的性能更好的平均趋势,但我们可以找到明显的反例,其中参数、层数或维度更少的模型表现更好。一个更清晰的趋势是关于相互传递信息的属性的数量。
在这里,我们根据消息传递的方式分解性能。在这两个极端中,我们考虑不在图实体之间进行通信的模型(“无”)和在节点、边和全局之间传递消息的模型。
消息传递与模型性能的图表,以及模型性能与参数数量的散点图。每个点都由消息传递着色。将鼠标悬停在某个点上可查看 GNN 架构参数
总的来说,我们看到越多的图属性进行通信,平均模型的性能就越好。我们的任务以全局表示为中心,因此明确学习此属性也倾向于提高性能。我们的节点表示似乎也比边缘表示更有用,这是有道理的,因为在这些属性中加载了更多信息。
你可以从这里有很多方向来获得更好的性能。我们希望两个突出两个大方向,一个与更复杂的图算法有关,另一个与图本身有关。
到目前为止,我们的 GNN 是基于基于邻域的池化操作。有一些图概念很难以这种方式表达,例如线性图路径(连接的节点链)。设计可以在 GNN 中提取、执行和传播图信息的新机制是当前的研究领域之一
GNN 研究的前沿之一不是制作新的模型和架构,而是“如何构建图”,更准确地说,为图注入可以利用的额外结构或关系。正如我们粗略地看到的那样,越多的图属性交流,我们就越倾向于拥有更好的模型。在这种特殊情况下,我们可以考虑通过在节点之间添加额外的空间关系、添加不是键的边或子图之间的显式可学习关系来使分子图的特征更加丰富。
【相关技术】
接下来,我们有几个部分介绍了与 GNN 相关的无数图相关主题。
其他类型的图(多重图、超图、超节点、分层图)
虽然我们只为每个属性描述了带有矢量化信息的图,但图结构更灵活,可以容纳其他类型的信息。幸运的是,消息传递框架足够灵活,通常使 GNN 适应更复杂的图结构是关于定义如何通过新的图属性传递和更新信息。
例如,我们可以考虑多边图或多重图,其中一对节点可以共享多种类型的边,当我们想根据节点类型对节点之间的交互进行不同建模时,就会发生这种情况。例如,对于社交网络,我们可以根据关系类型(熟人、朋友、家人)指定边缘类型。可以通过为每种边缘类型设置不同类型的消息传递步骤来调整 GNN。我们还可以考虑嵌套图,例如一个节点代表一个图,也称为超节点图。嵌套图对于表示层次信息很有用。例如,我们可以考虑一个分子网络,其中一个节点代表一个分子,如果我们有一种方法(反应)将一个分子转换为另一个分子,则两个分子之间共享一条边。在这种情况下,我们可以在嵌套图上学习,方法是让 GNN 在分子级别学习表示,另一个在反应网络级别学习表示,并在训练期间在它们之间交替。
另一种类型的图是超图,其中一条边可以连接到多个节点,而不仅仅是两个。对于给定的图,我们可以通过识别节点社区并分配连接到社区中所有节点的超边来构建超图。
更复杂图形的示意图。在左侧,我们有一个具有三种边类型的多重图示例,包括有向边。在右边我们有一个三层的层次图,中间层的节点是超节点。
如何训练和设计具有多种图属性的 GNN 是当前的研究领域
GNN 中的图采样和批处理
训练神经网络的一种常见做法是使用根据训练数据(小批量)的随机常数大小(批量大小)子集计算的梯度来更新网络参数。由于彼此相邻的节点和边的数量的可变性,这种做法对图提出了挑战,这意味着我们不能拥有恒定的批量大小。使用图进行批处理的主要思想是创建保留较大图的基本属性的子图。这种图采样操作高度依赖于上下文,并且涉及从图中子选择节点和边。这些操作在某些情况下(引文网络)可能有意义,而在其他情况下,这些操作可能过于强大(分子,其中子图仅代表一个新的较小的分子)。如何对图进行采样是一个开放的研究问题。如果我们关心在邻域级别保留结构,一种方法是随机采样均匀数量的节点,即我们的节点集。然后添加与节点集相邻的距离为 k 的相邻节点,包括它们的边。每个邻域可以被认为是一个单独的图,并且可以在这些子图的批次上训练一个 GNN。损失可以被掩盖以仅考虑节点集,因为所有相邻节点都将具有不完整的邻域。更有效的策略可能是首先随机采样单个节点,将其邻域扩展到距离 k,然后在扩展集中选择另一个节点。一旦构建了一定数量的节点、边或子图,就可以终止这些操作。如果上下文允许,我们可以通过选择初始节点集然后对恒定数量的节点进行二次采样(例如随机,或通过随机游走或 Metropolis 算法)来构建恒定大小的邻域。
种不同的方式对同一图进行采样。采样策略的选择很大程度上取决于上下文,因为它们会生成不同的图统计分布(# 个节点、#edges 等)。对于高度连通的图,边也可以进行二次采样。
当图足够大以至于无法放入内存时,对图进行采样尤为重要。启发新的架构和训练策略,例如 Cluster-GCN 和 GraphSaint。我们预计未来图形数据集的规模将继续增长。
感应偏差
在构建模型以解决特定类型数据的问题时,我们希望专门化我们的模型以利用该数据的特征。当这成功完成时,我们通常会看到更好的预测性能、更短的训练时间、更少的参数和更好的泛化能力。
例如,在图像上标记时,我们希望利用狗仍然是狗的事实,无论它位于图像的左上角还是右下角。因此,大多数图像模型使用卷积,它是平移不变的。对于文本,标记的顺序非常重要,因此循环神经网络按顺序处理数据。此外,一个标记(例如单词“not”)的存在会影响句子其余部分的含义,因此我们需要可以“关注”文本其他部分的组件,例如 BERT 和 GPT 等转换器模型-3 可以。这些是归纳偏差的一些示例,我们在其中识别数据中的对称性或规律性,并添加利用这些属性的建模组件。
在图的情况下,我们关心每个图组件(边、节点、全局)如何相互关联,因此我们寻找具有关系归纳偏差的模型。模型应保留实体之间的显式关系(邻接矩阵)并保留图对称性(置换不变性)。我们预计实体之间的交互很重要的问题将受益于图结构。具体来说,这意味着在集合上设计转换:节点或边上的操作顺序应该无关紧要,并且操作应该在可变数量的输入上工作。
比较聚合操作
从相邻节点和边缘汇集信息是任何相当强大的 GNN 架构中的关键步骤。因为每个节点都有可变数量的邻居,并且因为我们想要聚合这些信息的可微方法,所以我们希望使用对节点排序和提供的节点数量不变的平滑聚合操作。
选择和设计最优聚合操作是一个开放的研究课题。聚合操作的一个理想特性是相似的输入提供相似的聚合输出,反之亦然。一些非常简单的候选排列不变运算是 sum、mean 和 max。像方差这样的汇总统计数据也有效。所有这些都采用可变数量的输入,并提供相同的输出,无论输入顺序如何。让我们探讨一下这些操作之间的区别。
没有一种池化类型可以始终区分图对,例如左侧的最大池化和右侧的总和/均值池化。
没有一种手术是一致的最佳选择。当节点具有高度可变的邻居数量或您需要对局部邻域的特征进行归一化视图时,均值运算可能很有用。当您想要突出显示本地邻近中的单个显着特征时,最大操作会很有用。 Sum 提供了这两者之间的平衡,通过提供特征局部分布的快照,但由于它没有进行归一化,也可以突出异常值。在实践中,通常使用 sum。
设计聚合操作是一个开放的研究问题,与集合上的机器学习相交。诸如 Principal Neighborhood 聚合之类的新方法通过将它们连接起来并添加一个缩放函数来考虑多个聚合操作,该缩放函数取决于要聚合的实体的连接程度。同时,还可以设计特定领域的聚合操作。一个例子是“四面体手性”聚合算子。
GCN 作为子图函数逼近器
另一种查看具有 1 度邻居查找的 k 层的 GCN(和 MPNN)的方法是作为神经网络,它对大小为 k 的子图的学习嵌入进行操作
当关注一个节点时,在 k 层之后,更新的节点表示对所有邻居的视点有限,直到 k 距离,本质上是一个子图表示。边缘表示也是如此。
因此,GCN 正在收集所有可能的大小为 k 的子图,并从一个节点或边的有利位置学习向量表示。可能的子图的数量可以组合增长,因此从一开始就枚举这些子图而不是像在 GCN 中那样动态地构建它们,可能会令人望而却步。
边和图对偶
需要注意的一点是,边缘预测和节点预测虽然看似不同,但通常会归结为同一个问题:图 𝐺 上的边缘预测任务可以表述为 𝐺对偶的节点级预测。
为了获得 𝐺 的对偶,我们可以将节点转换为边(并将边转换为节点)。图及其对偶包含相同的信息,只是以不同的方式表示。有时,此属性使得在一种表示中解决问题比在另一种表示中更容易,例如傅立叶空间中的频率。简而言之,为了解决 𝐺 上的边分类问题,我们可以考虑在 𝐺 的对偶上进行图卷积(这与在 𝐺 上学习边表示相同),这个想法是由 Dual-Primal Graph Convolutional Networks 开发的。
图卷积作为矩阵乘法,矩阵乘法作为图上的游走
我们已经讨论了很多关于图卷积和消息传递的问题,当然,这里提出了我们如何在实践中实现这些操作的问题?在本节中,我们将探讨矩阵乘法、消息传递及其与遍历图的联系的一些属性。
我们想要说明的第一点是邻接矩阵𝐴(𝑛𝑛𝑜𝑑𝑒𝑠×𝑛𝑛𝑜𝑑𝑒𝑠)和节点特征矩阵X(𝑛𝑛𝑜𝑑𝑒𝑠×𝑛𝑜𝑑𝑒𝑑𝑖𝑚)的矩阵乘法实现了具有求和聚合的简单消息。令矩阵为𝐵=𝐴𝑋,我们可以观察到任何条目𝐵𝑖𝑗可以表示为
因为 𝐴𝑖,𝑘当 𝑛𝑜𝑑𝑒𝑖 和 𝑛𝑜𝑑𝑒𝑘之间存在边时才是二进制条目,所以内积本质上是“收集”所有与 𝑛𝑜𝑑𝑒𝑖共享边的维度为 𝑗 的节点特征值。需要注意的是,这个消息传递并没有更新节点特征的表示,只是将相邻节点特征池化。但这可以通过在矩阵相乘之前或之后通过𝑋您最喜欢的可微变换(例如 MLP)来轻松调整。
从这个观点,我们可以体会到使用邻接表的好处。由于 𝐴的预期稀疏性,我们不必对所有 𝐴𝑖,𝑗为零的值求和。只要我们有一个基于索引收集值的操作,我们应该能够只检索正条目。此外,这种无矩阵乘法的方法使我们不必使用求和作为聚合操作。
我们可以想象,多次应用这个操作可以让我们在更远的距离传播信息。从这个意义上说,矩阵乘法是一种遍历图的形式。当我们查看邻接矩阵𝐴的 𝐾幂 时,这种关系也很明显。如果我们考虑矩阵𝐴平方,项𝐴𝑖𝑗平方 计算从𝑛𝑜𝑑𝑒𝑖到𝑛𝑜𝑑𝑒𝑗 的所有长度为2 的行,并且可以表示为内积。【数据结构中学习过此算法】
推导式中第一项𝑎𝑖,1,𝑎1,𝑗在两个条件下为正,有一条边连接𝑛𝑜𝑑𝑒𝑖 到𝑛𝑜𝑑𝑒1和另一条边连接
𝑛𝑜𝑑𝑒1 到𝑛𝑜𝑑𝑒𝑗。换句话说,两条边形成一条长度为 2 的路径,从 𝑛𝑜𝑑𝑒𝑖到 𝑛𝑜𝑑𝑒𝑗 并经过 𝑛𝑜𝑑𝑒1。由于求和,我们正在计算所有可能的中间节点。当我们考虑 𝐴立方=𝐴乘𝐴平方.. 以此类推到 𝐴的𝑘方时,这种推导式就会延续。
关于我们如何将矩阵视为要探索的图形有更深层次的联系
图注意网络
在图属性之间传递信息的另一种方式是通过注意力。例如,当我们考虑一个节点及其 1 度相邻节点的总和聚合时,我们还可以考虑使用加权和。那么挑战是以排列不变的方式关联权重。一种方法是考虑基于节点对(𝑓(𝑛𝑜𝑑𝑒𝑖,𝑛𝑜𝑑𝑒𝑗))分配权重的标量评分函数。在这种情况下,评分函数可以解释为衡量相邻节点与中心节点相关程度的函数。可以对权重进行归一化,例如使用 softmax 函数将大部分权重集中在与任务相关的节点最相关的邻居上。这个概念是 Graph Attention Networks (GAT) 和 Set Transformers 的基础。保留了排列不变性,因为评分适用于节点对。一个常见的评分函数是内积,并且节点通常在评分之前通过线性映射转换为查询和关键向量,以增加评分机制的表现力。此外,为了可解释性,评分权重可用作衡量边缘相对于任务的重要性的度量。
一个节点相对于其相邻节点的注意力示意图。对于每条边,计算、归一化并用于加权节点嵌入的交互分数。
图表解释和属性
在野外部署 GNN 时,我们可能会关心模型可解释性以建立可信度、调试或科学发现。我们关心解释的图形概念因上下文而异。例如,对于分子,我们可能关心特定子图的存在与否,而在引文网络中,我们可能关心文章的关联程度。由于图形概念的多样性,构建解释的方法有很多种。 GNN 解释者 将此问题转换为提取对任务最重要的最相关子图。归因技术将排序的重要性值分配给与任务相关的图表部分。由于可以综合生成现实且具有挑战性的图问题,GNN 可以作为评估归因技术的严格且可重复的测试平台。
图上一些可解释性技术的示意图。属性将排名值分配给图形属性。排名可以用作提取可能与任务相关的连接子图的基础。
生成模型
除了学习图上的预测模型外,我们可能还关心学习图的生成模型。使用生成模型,我们可以通过从学习分布中采样或通过完成给定起点的图来生成新图。一个相关的应用是新药的设计,其中需要具有特定特性的新分子图作为治疗疾病的候选者。
图生成模型的一个关键挑战在于对图的拓扑进行建模,该拓扑的大小可能会有很大差异,并且有𝑁𝑛𝑜𝑑𝑒𝑠平方项。一种解决方案是像使用自动编码器框架的图像一样直接对邻接矩阵进行建模。边缘是否存在的预测被视为二元分类任务。 𝑁𝑛𝑜𝑑𝑒𝑠平方项可以通过仅预测已知边和不存在的边的子集来避免。 图VAE 学习在邻接矩阵中对连接的正模式和非连接模式进行建模。
另一种方法是按顺序构建图,从图开始并迭代地应用离散动作,例如节点和边的加法或减法。为了避免估计离散动作的梯度,我们可以使用策略梯度。这是通过自回归模型(如 RNN)或在强化学习场景中完成的。此外,有时图可以被建模为具有语法元素的序列。
最后的想法
图表是一种强大而丰富的结构化数据类型,其优势和挑战与图像和文本截然不同。在本文中,我们概述了研究人员在构建基于神经网络的图形处理模型方面提出的一些里程碑。我们已经介绍了使用这些架构时必须做出的一些重要设计选择,希望 GNN 游乐场可以直观地了解这些设计选择的经验结果是什么。近年来 GNN 的成功为解决各种新问题创造了绝佳机会,我们很高兴看到该领域将带来什么。