图神经网络入门


来源: 个人图书馆-taotao_2016

本文是关于图神经网络入门的一篇推文。文章首先介绍图的基本概念,...

本文是关于图神经网络入门的一篇推文。

文章首先介绍图的基本概念,例如如何使用图来建模场景以及可以解决哪些问题。接下来,比较传统神经网络和图神经网络之间的区别,并解释传播过程。然后,回顾图神经网络的通用框架。最后介绍通用框架背后的数学知识。


(相关资料图)

文章选自:/@bscarleth.gtz/introduction-to-graph-neural-networks-an-illustrated-guide-c3f19da2ba39

为适合中文阅读习惯,阅读更有代入感,原文翻译后有删改。

Bscarleth Gtz| 作者

罗伯特|编辑

1. 图的基础知识

在深入了解图神经网络的机制之前,我们首先来回顾一些关于图的基础知识。

首先,图是非欧几里德的数据结构,用于模拟复杂的现实世界场景。这些场景包括脑网络、化学成分以及典型的社交网络。

可以通过:https://shop108971569.youzan.com/wscvis/course/detail/3621zlrsurvvtm2?kdt_id=108779401 003-小灶课了解更多图的基础知识。

显然,常规的数据结构(如图像、音频或顺序文本)可能无法满足要求。

想象一下像Instagram或Facebook这样的社交网络。

你可以将自己的账号视为一个实体,或者简单来说,是一组数据。这组数据包含了不同的信息,比如你的个人头像、好友列表、点赞和不喜欢等。

你的社交媒体好友,虽然他们可能具有与你类似的信息,但代表着具有特定配置文件的其他实体或数据组。

当你添加另一个人作为新的好友时,就好像你在你自己的数据组和对方的数据组之间创建了一个新的链接。

这就是图的作用,它们使我们能够轻松扩展数据并处理关系,以及其他有趣的事情。因此,社交网络场景经常被建模为图。

那么,下一个问题是我们如何创建一个图呢?

在文献中,我们将定义为,这意味着包含一组节点,表示图的元素,以及一组边,确定节点之间的关系。

除了拓扑信息外,节点和边也可以关联特征,以指示实体和它们所表示的关系的特征。

例如,一个水分子可以被建模为一个图,其中有三个节点:一个氧原子和两个氢原子。每个节点可以包含与电荷或原子直径相关的信息。另外,边的特征可以用于区分连接的原子之间的强弱键。

此外,将分子视为图使我们能够利用分子的自然结构,而无需将样本转换为图像或文本等不同的数据类型。这有助于更好地捕捉节点内部和不同图样本之间的精细关系。

图1:使用图模型化大脑网络、水分子和两个社交网络资料的示例。

另一个例子是大脑网络,可以通过将大脑的某些区域与节点关联起来,并通过它们共享的电信号连接这些节点来生成。

实际上,我们可以使用任何相关信息来确定何时在节点之间添加边。

因此,在这个例子中,如果节点属于对于某些过程(例如识别朋友的面孔、学习新单词等)而言具有重要性的大脑区域,我们也可以连接这些节点。

正如你可以想象的那样,我们可以使用图解决不同类型的问题,这取决于图的哪个部分是相关的。有节点级、链接级和图级任务。

例如,回到分子的例子,模型可以学习检测原子之间应该存在的键的类型(链接级任务)。

在社交网络的例子中,我们可以利用完整图的信息来区分政治家和运动员的资料(图级任务)。

接下来,让我们介绍图神经网络及其主要优势。

2. 图神经网络(GNNs)

图神经网络(GNNs)是一种特殊类型的神经网络架构,专门设计用于处理图形数据。

如果图形既不是图像也不是文本,那么使用与卷积(例如CNN)或递归神经网络(例如LSTM、RNN、GRU)不同的东西来处理这种类型的数据就是合理的。

再次思考一下社交网络的例子,的朋友图与的朋友图是否相同?

如果我们将这两个图与其他一百个图进行比较,它们的节点数量会完全相同吗?

不,它们之间会有很大的不同。

这就是为什么我们说图是非结构化的数据表示,它们允许不固定的大小和形式,即使在同样的上下文中,比如朋友的图。

图2:比较图(graph)和图像(image)数据结构之间元素排序重要性的示例。

另一方面,图像(images)如果来自同一来源,更有可能共享长度、大小、分辨率等特征,因此它们比图(graphs)更适合应用卷积。

图的另一个重要特点是它们是无序的,这意味着节点的顺序对于表示整个图并不重要。

对于图像,情况恰恰相反,这意味着如果我们以与原始位置不同的顺序处理像素,图像将不再相同。也就是重新排序图像的像素将直接影响它所代表的数据。

所以,我们可以应用GNN来处理图,它不仅可以从特征中学习,还可以从样本之间可能变化的结构信息中学习,而不像CNN一样期望数据像图像那样固定。

3. 图神经网络中的传播

图神经网络是如何学习的呢?

在常规神经网络的传播过程中,数据通过输入层的神经元进入,并在前向处理过程中一直传递到网络的最后一层。

我们可以说传播过程中存在一种层次结构,由接收和发送数据到下一层的层序列定义,比如第1层将其输出传递给第2层,第2层传递给第3层...等等。

在图神经网络中,与其他类型的网络一样,传播是在神经元之间没有相同层次结构的情况下进行的。所不同的是,传播同时在图的所有节点中进行,没有初始节点或初始传播层。

总体思想是利用节点之间的连接,从图的多个子结构中创建表示,就像我们关注于单独理解某些部分一样。

这是通过在预定义次数上更新每个节点的信息来实现的,在文献中通常称为传播层数K。

注意:不要将图神经网络中的传播层与常规神经网络中的层混淆。

节点的新值将受到它本身以及与之相连的节点(即其邻居)的影响。

动画1: 节点a在不同层中的传播范围。

那么,我们如何知道需要通过GNN传播数据的次数呢?

嗯,答案是......我们并不确定。

这是一个超参数,在训练模型时我们需要进行调试,但当然也有一些技巧和要记住的提示。

让我们以图2中的图为例进行一些示例,想象一下如果数据只传播一次会发生什么。

在这种情况下,我们将得到一些微小的子图,但由于原始图的规模,一次迭代可能无法提供足够的信息来识别模式和识别重要特征。

只有直接位于中心节点邻域的节点将影响其值,因此其余节点将超出这种新表示的范围。

另一方面,如果传播发生多次,比如这个例子中的十次,节点将逐渐包含整个图的数据。

图3: 只有1层时节点a、h和i的传播范围(左上)。节点a传播100次(右上)。节点h传播100次(左下)。节点i传播100次(右下)。

在每个单独节点中具有完整图的表示并不能告诉我们节点和图的子结构如何相互作用。

因此,选择适当的层数对于模型的学习过程至关重要。

理想情况下,我们希望在邻域中覆盖足够的区域,同时不包括大部分图中的节点。

在文献中,传播层数的接受范围为2到7层,通常不需要更多层数。

最后,让我们详细了解图神经网络的一般框架。

4. 图神经网络的一般框架

在前面的部分,我们简要讨论了节点邻域对其在传播过程中所取的新值的影响。这实际上是图神经网络学习的核心部分,我们只需要添加一些细节来完整了解整体情况。

形式上,数据在节点之间的共享过程分为两个步骤,即聚合(Aggregation)组合(Combination)

在第一步中,收集与中心节点共享边的所有节点的信息,并对其进行转换,以创建邻域的表示。

然后,在第二步中,将聚合的结果与节点的当前值相结合,产生节点的新值。

你可能注意到,到目前为止,与我们上面讨论的内容没有什么不同。我们只是将过程分为了两个步骤,并将继续看到它们在内部的运作方式。

在聚合和组合过程中,输入通过一个无序函数(也称为置换不变函数),例如求和、平均、最大值等进行处理。

这些函数还可以与可学习权重的矩阵相结合(例如,以为输入,为可学习权重:等)。

这些无序函数通常在图神经网络中使用,因为节点处理的顺序不会对输出产生任何影响。因此,它们与图的无序性质很匹配。

类似于卷积神经网络,图神经网络也有不同类型的层。

例如,最流行的是卷积图神经网络和图注意力网络。而所有这些图神经网络层都有一个共同点,你能猜到是什么吗?没错,它们都应用了我们一直在讨论的这两个函数,它们通过聚合和组合来运作。

这就是为什么涉及这两个步骤的过程被称为图神经网络的一般框架。因为它就像一种配方或蓝图,指示了一个图神经网络层需要遵循的最基本操作。

那么我们如何区分不同类型的图神经网络层呢?

简单,它们在使用的无序函数上有所不同,有些特殊情况下还可能有其他额外的操作。但总体来说,我们可以说更好理解图神经网络层机制的一个技巧是将算法分为两部分,尝试识别聚合步骤和组合步骤。

图4:一个有五个节点的图的例子,其属性以彩色数字表示(左)。从节点a的角度表示聚合和组合步骤(右)。

现在,让我们通过一个例子回到这个主题。看一下上面的图片,在左侧你可以看到一个具有五个节点和一些多彩图形的图。暂时来说,我们可以将这些图形看作是节点的属性,并最终用一些值来替换它们。但首先,必须清楚一般框架的过。

如果我们只关注节点a,那么该节点的更新过程将如右侧的图片所示。来自节点b、c和d的信息将被传递给一个聚合函数,节点a的当前值将与上述操作的结果组合,返回节点a的新值。非常简单,对吧?

在继续之前,花点时间思考一下这个过程对于其他节点来说会是什么样子,以及它是如何并行地应用于所有节点的。

5. 数学原理

本文的最后一部分是关于图神经网络背后的数学原理。

我们将开始用更真实的值替换多彩的图形。

在文献中,节点的属性被表示为一个矩阵,其中,其中表示图中的节点数,是每个节点的特征数。

图5:右侧图形的属性矩阵(左侧)的表示。

在上面的图片中,再次显示了包含五个节点的图。这次,图形被替换为数字的数组或列表。你可以看到每个节点有三个属性,它们可以表示例如神经元的数量、投票的概率、酸度等。

无论如何,对于这个图,矩阵将有个元素。X的值被一般框架用于在传播过程(时间步0)的开始时初始化矩阵。让我们首先看一下公式,然后我们可以在我们在图中定义的数字上应用这些操作。

对于每个迭代,其中k是当前层,是前一层,是最大传播层数,执行以下步骤:

其中是节点(中心节点)的邻居节点集合,是上一次迭代中节点的特征矩阵。对于节点的邻居节点列表中的每个节点,将上一层节点的特征进行聚合,并将结果存储在矩阵中(表示第k次迭代中节点v的聚合)。然后将与节点的先前属性进行组合,得到矩阵中节点的新属性。一旦计算出属性矩阵,就可以将其输入可微分的可训练函数(例如完全连接层或多层感知机),或者换句话说,可以乘以一个可学习的权重矩阵。接下来使用的配置取决于您要解决的问题,无论是图级任务还是节点级任务。还可以添加其他图神经网络层,如dropout或全局池化,但这些细节可以留待以后再讨论。

那么,我们完成了吗?

基本上是的。这些就是我们需要的所有计。

现在我们知道了图神经网络的一般框架是如何运作的,我们可以使用这些公式来说明图4中节点a的更新过程:

图6:图4中呈现的聚合和组合步骤以及它们在第1层中以节点a为例的公式的表示方式。

对于这张图片我们还满意吗?还有最后一个示例要检查。

还记得我们说过不同的图神经网络层可以通过它们使用的函数来识别吗?

对于最后一个示例,我们将使用常规求和进行聚合,并使用最大函数进行组合。可能存在或可能不存在具有此配置的图神经网络层,但我们将使用它来完成对图的更新过程的整体描述。

在下面的图像中,你可以看到我们需要更新每个节点的变量,以及我们定义为节点属性的值。例如,在节点d的聚合中(是的,我知道除了节点还有其他节点),邻居节点是节点a,其属性定义为,以及节点,其属性矩阵为。求和的结果设置为(第1层中节点的聚合),其值为。对于组合,我们使用最大函数,将上一步的值与节点的当前值作为输入。因此,应用最大函数后,(第1层中节点的属性)的值将为

大功告成 。

继续处理其他节点,可以按照相同的步骤得到类似的结果。

图7:使用为节点属性定义的值,对图像5中每个节点的聚合和组合步骤进行概述。步骤1和步骤2使用求和和最大函数。

最后,原始图像将更新为图像右侧的样子,新的值可以用于馈送MLP或任何其他类型的层,具体取决于你设置的配置。

6. 结语

介绍结束。

祝学习愉快!

[责任编辑:]

网罗天下