当前位置: 首页 > 科技观察

GNN入门必看!GoogleResearch教你从零开始构建sotagraph神经网络

时间:2023-03-16 11:41:10 科技观察

近年来,神经网络在自然语言、图像、语音等数据方面取得了令人瞩目的突破,使模型性能达到了前所未有的高度,但如何在Trainingon图数据仍然是一个可研究的点。传统神经网络输入的数据通常各个样本之间没有关系,但图数据更为复杂,各个节点之间存在联系,更符合现实世界中的数据存储方式。现实世界中的对象通常是根据它们与其他事物的联系来定义的。一组对象以及它们之间的联系可以很自然地表示为图(graph)。基于图数据的神经网络也称为图神经网络(GraphNeuralNetwork,GNNs)。图神经网络的发展逐渐受到更多的关注,在推理、常识等方面取得了很多成果。谷歌的研究人员最近发表了一篇博客,介绍了图神经网络的发展历程,同时也对现代图进行了研究神经网络。探索和解释。图由顶点和边组成。在人类思维中,社交网络等数据可以自然地表示为图形。你有没有想过如何将图像和文本表示为图形?通常将图像视为具有通道的矩形网格,将它们表示为例如244x244x3的三维矩阵。查看图像的另一种方式是具有规则结构的图像,其中每个像素代表一个节点并通过边缘连接到相邻像素。每个非边界像素恰好有8个相邻节点,每个节点上存储的信息是表示像素RGB值的3D向量。可视化图形连通性的一种方法是邻接矩阵。对这些节点进行排序,在一个25像素的5x5图像中,构造一个矩阵,如果两个节点之间有一条边,那么邻接矩阵中就有一个条目。对于文本,索引可以与每个字符、单词或标记相关联,文本可以表示为有向图,其中每个字符或索引是一个节点,通过边连接到下一个节点。然而,文本和图像在实际使用中通常不会使用这种编码方式,用图形来表示它们是多余的步骤,因为所有的图像和文本都有一个非常规则的结构。例如,图像的邻接矩阵通常具有带状结构,因为所有节点或像素都连接并包含在网格结构中。文本的邻接矩阵只包含一条对角线,因为每个词只与前一个词和下一个词相连。当使用神经网络来表示图形任务时,最重要的表示之一是它的连通性。更好的选择是邻接矩阵,但是如前所述,邻接矩阵过于稀疏,空间利用率不高;另一个问题是同一个图的邻接矩阵有很多种表示方式,神经网络不能保证这些邻接矩阵的输出结果是一样的,也就是说不存在置换不变量。并且不同形状的图也可能包含相同的邻接矩阵。表示稀疏矩阵的一种优雅而有效的方法是邻接表。他们将节点之间边的连通性描述为邻接表第k个条目中的元组(i,j)。由于边的数量远低于邻接矩阵的条目数量,因此避免了图的不连续部分(不包括边)的计算和存储。由于图是以置换不变矩阵格式描述的,因此图神经网络(GNN)可用于解决图预测任务。GNN是图的所有属性(节点、边、全局上下文)的可优化转换,它保留了图的对称性(置换不变性)。GNN采用“图入图出”架构,这意味着这些模型类型接受图作为输入,将信息加载到其节点、边和全局上下文中,并在不改变输入图的连通性的情况下逐渐转换这些嵌入。最简单的GNN模型架构不使用图的连通性,在图的每个组件上使用单独的多层感知器(MLP)(其他可微模型也可以)可以称为GNN层。对于每个节点向量,使用MLP并返回一个可学习的节点向量。对每条边执行相同的操作,学习每个边嵌入,对全局上下文向量执行相同的操作,为整个图学习单个嵌入。像神经网络模块或层一样,我们可以将这些GNN层堆叠在一起。由于GNN不更新输入图的连通性,因此可以使用与输入图相同的邻接表和相同数量的特征向量来描述GNN的输出图。在构建了一个简单的GNN之后,下一步就是考虑如何在上述任务中进行预测。首先考虑二分类情况,这个框架也可以很容易地扩展到多分类或回归情况。如果任务是对图节点进行二分类预测,并且图中已经包含节点信息,那么可以对每个节点嵌入应用线性分类器。实际情况可能更复杂,比如图中的信息可能存储在边上,而节点中没有任何信息,但仍然需要对节点进行预测。因此,需要一种从边缘收集信息并将其提供给节点进行预测的方法。这可以通过池化来实现。池化分两步进行:对于每个要池化的项目,收集它们的每个嵌入并将它们连接成一个矩阵,通常通过求和运算聚合收集到的嵌入。更复杂的是,可以通过在GNN层中使用池化来做出更复杂的预测,从而使学习到的嵌入更加了解图的连通性。这可以使用消息传递来完成,其中相邻节点或边缘交换信息并影响彼此更新的嵌入。消息传递包括三个步骤:1.对于图中的每个节点,收集所有相邻节点嵌入(或消息)。2.通过聚合函数(如sum)聚合所有消息。3.所有聚合消息都通过一个更新函数传递,通常是一个学习过的神经网络。这些步骤是利用图的连通性的关键,并且还可以在GNN层中构建更复杂的消息传递变体,以生成表现力更高的GNN模型。本质上,消息传递和卷积是聚合和处理元素的邻居信息以更新元素值的操作。在图形中,元素是节点,在图像中,元素是像素。然而,图中相邻节点的数量是可变的,这与每个像素都有一定数量的相邻元素的图像不同。通过将传递给GNN层的消息堆叠在一起,节点最终可以在整个图中合并信息。节点学习嵌入后的下一步是边缘。在实际场景中,数据集并不总是包含所有类型的信息(节点、边和全局上下文),当用户想对节点进行预测,而提供的数据集只有边缘信息时,上面显示了如何使用Poolingroutes信息从边缘到节点,但也仅限于模型的最后一步预测。除此之外,消息传递还可用于在GNN层内的节点和边之间共享信息。来自相邻边的信息可以按照与之前使用相邻节点信息相同的方式合并,首先合并边信息,使用更新函数对其进行转换,然后存储。然而,图中存储的节点和边信息不一定具有相同的大小或形状,因此没有明确有效的方式将它们组合起来。更好的方法是学习从边缘空间到节点空间的线性映射,反之亦然。或者,它们可以在更新功能之前连接在一起。最后一步是获取全局节点和边表示。前面描述的网络有一个缺陷:即使多次应用消息传递,图中没有直接连接的节点也可能永远无法相互有效地传递信息。对于一个节点,如果有k层网络,那么信息最多传播k步。在预测任务依赖于相距很远的节点或节点组的情况下,这可能是一个问题。一种解决方案是让所有节点能够相互传递信息。不幸的是,对于大图,所需的计算成本相当高,但它已经可以用于小图。此问题的一种解决方案是使用图(U)的全局表示,有时称为主节点或上下文向量。这个全局上下文向量连接到网络中的所有其他节点和边,可以作为它们之间传递信息的桥梁,为整个图构建表示。这可以创建比其他方法更丰富和更复杂的图形表示。从这个角度来看,图中的所有属性都已经学习了相应的表示,因此可以通过调整感兴趣属性相对于其余属性的信息来在池中利用它们。例如,对于一个节点,可以考虑来自相邻节点的信息、连接边和全局信息。为了在所有这些可能的信息源上嵌入新节点,它们也可以简单地连接起来。此外,它们还可以通过线性映射映射到同一空间,并应用特征调制层。通过上面的过程,相信大家对一个简单的GNN是如何发展成sota模型有了一个了解。得到图的节点和边表示后,可以为后续任务单独设计网络。GNN为神经网络提供了一种处理图数据的方法。在原博客中,还包含了GNN的一些真实案例和数据集,了解了GNN在其中的具体作用。如果想了解更多,可以访问参考链接阅读。