CNN只能在欧几里得数据(Euclidean data),比如二维图片和一维文本数据上进行处理,而这些数据只是图结构的特例而已,对于一般的图结构,可以发现很难将CNN中的卷积核(convolutional filters)和池化操作(pooling operators)迁移到图的操作上。
GNN和传统NN的区别
首先,标准的神经网络比如CNN和RNN不能够适当地处理图结构输入,因为它们都需要节点的特征按照一定的顺序进行排列,但是,对于图结构而言,并没有天然的顺序而言,如果使用顺序来完整地表达图的话,那么就需要将图分解成所有可能的序列,然后对序列进行建模,显然,这种方式非常的冗余以及计算量非常大,与此相反,GNN采用在每个节点上分别传播(propagate)的方式进行学习,由此忽略了节点的顺序,相当于GNN的输出会随着输入的不同而不同。
另外,图结构的边表示节点之间的依存关系,然而,传统的神经网络中,依存关系是通过节点特征表达出来的,也就是说,传统的神经网络不是显式地表达中这种依存关系,而是通过不同节点特征来间接地表达节点之间的关系。通常来说,GNN通过邻居节点的加权求和来更新节点的隐藏状态。
最后,就是对于高级的人工智能来说,推理是一个非常重要的研究主题,人类大脑的推理过程基本上都是基于图的方式,这个图是从日常的生活经历中学习得到的。GNN尝试从非结构化数据比如情景图片和故事文本中产生结构化的图,并通过这些图来生成更高级的AI系统。
将graph作为原始数据输入的最大好处是保留了结构信息,如果是以向量或者矩阵的形式进行处理的话,就会丢失很多结构信息。
2005年,Marco Gori等人发表了论文,首次提出了GNN的概念,在此之前,处理图数据的方法是在数据的预处理阶段将图转换为用一组向量表示。这种处理方法会丢失很多的结构信息,得到的结果会严重依赖于对图的预处理,GNN的提出能够将学习过程直接架构在图数据之上。
GNN(一)走进GNN这里有一些很直观的图片
Embedding在数学上是一个函数,将一个空间的点映射到另一个空间,通常是从高维抽象的空间映射到低维的具象空间。
kernel函数是由低维映射到高维;
图领域的应用主要可以分为两种类型:专注于图的应用(graph-focused)和专注于节点的应用(node-focused)。对于graph-focused的应用,函数 [公式] 和具体的节点无关,(即 [公式] ),训练时,在一个图的数据集中进行分类或回归。对于node-focused的应用, [公式] 函数依赖于具体的节点 [公式] ,即 [公式] ,如下例子初探GNN:《The Graph Neural Network Model 》