详细内容或原文请订阅后点击阅览
图神经网络:GCN、MPNN 和 GAT,简单解释
图神经网络如何在底层工作的视觉指南《图神经网络:GCN、MPNN 和 GAT,简单解释》一文首先出现在《走向数据科学》上。
来源:走向数据科学简介
神经网络是一项令人难以置信的创新。长期以来,直到现在,它们一直被用作解决复杂人工智能问题的关键组成部分。在幕后,神经网络学习复杂的数学函数,将输入数据转换为所需的目标。
但是,默认情况下,普通神经网络不使用有关输入数据各部分之间关系的任何知识。例如,为了处理图像,卷积通常用作将每个像素与其相邻像素组合的方式,因为它们彼此相关。否则,神经网络将不知道位置 N 处的像素是否与位置 N + 1 处的像素相关。这种额外的上下文可以提高模型的性能。
对于图形也是如此,它表示一组对象以及它们之间的关系。有许多对象可以用图形表示,例如分子、社交网络、足球比赛中的球员、交通或地铁地图。图表可以包含有价值的上下文,了解如何充分发挥其潜力非常重要。因此,存在图神经网络(GNN),顾名思义,它将神经网络应用于图结构。
应用
GNN 的一个伟大之处在于,一旦经过训练,它们就可以应用于具有其他结构的新图。例如,如果 GNN 在某些类型的分子上进行训练,我们仍然可以使用该 GNN 来执行分类任务,方法是给它一个图包含全新的、看不见的结构的分子。例如,GNN 的一个流行用例就是这样使用的,其中包括训练抗生素发现模型。
除此之外,GNN 还可以用于对单个节点或边进行分类。 GNN 的输出还可用于对整个图进行分类。
图卷积网络 (GCN)
概念
让我们回到卷积。众所周知,它们将像素及其邻域作为输入,并将它们组合起来以产生像素的新值。这种方法假设相邻像素之间存在关系,并允许模型考虑像素周围的局部上下文。我们可以自然地将这个想法应用到图上:通过选取一个节点及其相邻节点,我们的方法将它们组合起来,并产生一个具有新特征的新节点。所描述的方法在“更新规则”部分中介绍。
此外,这个想法有趣的地方在于,图可以被视为图像的概括。事实上,图像中的每个像素最多连接到 4 个相邻像素。在这两种情况下,卷积过程都存在共同的语义相似性。
层
一般来说,GNN 包含少量层(通常在 2 到 4 层之间)。通常会避免使用更多层数,因为这可能会导致过度平滑问题,这将在本文后面进行描述。
每层使用应用于它及其邻居的聚合函数来转换来自前一层的特征向量。此过程独立地并行应用于每个节点,并且生成的特征向量可能具有与前一层不同的形状。因此,最后一个 GNN 层的特征向量的形状可能与第一层的输入形状不同。
更新规则
为了描述更新规则,我们需要三个矩阵:
A - 邻接矩阵(如果顶点 i 和 j 连接,则 A[i][j] = A[j][i] = 1,否则 A[i][j] = A[j][i] = 0)。
对于非线性函数 σ,GNN 中通常选择 ReLU 或 LeakyReLY。
H - 特征矩阵。矩阵的第i行表示第i个节点的特征向量。
W - GNN 使用的可学习线性变换。该矩阵在图的所有节点之间共享。
通过将 A 乘以 H,我们得到一个邻居特征和矩阵。换句话说,对于 A 中的每个节点,AH 仅将 H 中定义的与其相邻的节点的特征值相加。对于非相邻节点,忽略特征值(乘以0)。让我们看一下下面的例子。
通过获取 AH 的结果,我们可以将其乘以神经网络学习的矩阵 W。最后一步,我们应用非线性变换 σ。由此,更新规则可以写为:
由于矩阵乘法是结合律,为了优化,特别是为了降低计算成本,在计算AHW时,先计算HW,然后在左侧乘以A。
但是,当前方法存在几个问题,我们需要在下一节中解决。
中心节点
首先,在对每个节点进行计算时,它不会考虑有关节点本身的任何信息。例如,我们可以清楚地看到,当我们获得第一个节点的元素(AH)[1][1]时,该节点(3)对应的特征值乘以零,因为在邻接矩阵中我们有A[1][1] = 0。这个问题可以通过在A的对角线元素上加1来轻松解决:
鉴于此,更新公式变为:
特征标准化
其次,通过执行矩阵乘法,特征的尺度发生变化。为了解决这个问题,使用从 A 获得的度矩阵 D 进行归一化,其中 D[i][i] 等于节点 i 的邻居数(包括其自身),而当 i ≠ j 时,D[i][j] = 0。
例如,对于上例中的图形,矩阵 D 将具有以下形式:
更新规则变为:
这个公式也可以在节点级别重写(也称为均值池更新公式):
对称标准化
在 GCN 中固定尺度的另一种流行方法是使用对称归一化(Kipf & Welling, ICLR 2017),其中 D 的倒数平方根应用于 Ā 的两侧:
或者,在节点级别,公式可以重写如下:
训练与推理
GNN 的一个伟大之处在于它们可以推广到新的图结构。训练逻辑不仅仅应用于用于训练的图。 GNN 学习单独应用于节点的变换,无论图有多少个节点或边。他们所需要的只是一个学习的、共享的矩阵 W,它可以跨层转换任何节点的特征向量。例如,这个想法与全连接神经网络非常不同,全连接神经网络的权重数量与输入大小相关。
尽管如此,重要的是要理解,当新图的结构仍然与 GNN 训练的原始图相似时,GNN 推理通常效果很好。如果推理过程中的新图与原始图完全不同,性能可能会变差。
说到训练,GNN 中的反向传播的工作方式与普通神经网络类似。 GNN 可以在单个大图上进行训练,也可以同时在多个图上进行训练。通常,当 GNN 在多个图上进行训练时,它可以更好地泛化到新图。
优点
消息传递神经网络 (MPNN)
图注意力网络 (GAT)
过度平滑
了解 GNN 生成节点嵌入也很重要,然后通常将其传递给单独的较小模型以执行下游任务(例如,节点、边或图分类)。在此设置中,GNN 充当中间特征提取器,用于计算损失值并从而训练 GNN 的标签来自下游任务。然而,在极少数情况下情况并非如此,GNN 可以直接在系统中产生最终的预测。
如前所述,GNN 每层特征向量的维度在不同层之间可以不同,它是 GNN 的主要超参数之一。
与 CNN 一样,GCN 成功地使用了给定节点周围的本地上下文,从而提高了整体模型的性能。
除此之外,GCN 的一个很好的特性是它们的计算相对于图大小是线性的 (O(|V| + |E|))。
由于权重矩阵 W 是在图节点之间共享的,因此卷积的参数数量不依赖于输入图的大小。
对于特定的图结构,GCN 根据节点与其他节点的邻接关系来对待不同重要性的节点。
凭借 GCN 可以提供的所有优势,现在让我们看看两个更先进的图网络,它们可以进一步发挥 GNN 的最大潜力。
我们刚刚看到了 GCN 如何使用有关图结构的信息。然而,它主要只对节点特征进行操作。我们可以更进一步,使对图边进行操作成为可能。为此,我们可以引入消息传递的概念,我们将在聚合过程中使用它。消息是一个抽象概念,描述计算过程中沿边缘流动的值。
更具体地说,让我们想象一对连接的节点 i 和 j,通过边 e[i][j] 连接。从节点 i 发送到 j 的消息可以在数学上描述为以下函数(fₑ 称为消息函数):
下一步包括聚合进入给定节点的所有消息(fᵥ 称为读出函数):
下面我们可以看到过程的可视化,显示消息函数 fₑ 和读出函数 fᵥ 如何结合节点和边来获取下一个图状态:
一方面,MPNN 很强大,但需要大量计算和内存。在实践中,它们通常与小图一起使用。
实际上,f ₑ 和 f ᵥ 通常是小型 MLP(多层感知器)。
GAT 是 GCN 的泛化。它们的工作方式与 GCN 相同,只是网络在计算中不使用节点度的原始值,而是自行学习重要性值。这就是为什么这个概念被称为注意力,类似于 Transformers 中所做的,它可以自行决定给定输入序列中成对元素的重要性。
通过使用注意力权重修改 GCN 的原始更新公式,更新公式现在变为:
学习到的权值α[i][j]可以从字面上理解为节点i对于节点j的重要性。与 GCN 相比,其中系数 aij 明确定义为 1 / √(|Ni| ⋅ |Nj|)。
GAT 的一个优点是它们需要更少的内存,因为学习系数 α[i][j] 只是每条边的标量值,而在 MPNN 中,计算的消息是每条边的学习向量。
与 Transformers 类似,GAT 通常使用多个头来捕获更多信号并进一步提高模型性能。
过度平滑是在实践中 GNN 通常具有少量层(例如 2 到 4 层)的原因之一。
结论
过度平滑是一个问题,当 GNN 中的堆叠层太多时,节点特征表示会变得几乎相同。这往往发生在深度 GNN 中,因为通过重复的聚合函数(例如取平均值),每个节点逐渐从其邻居那里吸收越来越多的信息并向它们收敛。
减少过度平滑的常见技术包括添加跳跃连接(将节点特征向量直接传递到下一层)或边缘丢弃(与丢弃技术类似,在训练期间删除随机选择的边缘以减少信息开销)。
在本文中,我们了解了 GNN 的底层工作原理并探索了主要架构。事实证明,它们并没有什么特别复杂的地方:它们的运行方式就像标准神经网络(包括反向传播)一样,除了如何重新定义卷积运算之外。
GNN 特别适合解决涉及图结构数据的问题。通过学习线性变换 W(对于 GAT,还包括注意力权重),他们可以自动识别图中最重要的关系。根据问题要求、图大小和所需的复杂性,可以选择这些选项中的任何一个:GCN、MPNN、GAT 或其他变体。
资源
除非另有说明,所有图片均由作者提供
