博客依托于国外GNN综述
结合沐神视频
什么是图:
图是一种对节点和节点间关系建模的数据结构,是机器学习中唯一的非欧几里得数据,图分析可用于节点分类、链接预测和聚类。
GNN的来源:
CNN:CNN可以提取大量本地紧密特征并组合为高阶特征,但CNN只能够操作欧几里得数据。CNN的关键在于局部连接、权值共享、多层使用;
graph embedding:在低维向量上学习表示图节点、边或者子图。思想源于特征学习和单词嵌入,第一个图嵌入学习方法是DeepWalk,它把节点看做单词并在图上随机游走,并且在它们上面使用SkipGram模型;
基于以上两种思想,GNN会在图结构上聚合信息,因此可以对输入/输出的元素及元素间的独立性进行建模。GNN还可以同时使用RNN核对图上的扩散过程进行建模。
GNN的优势:
GNN不足:
1、 全局U:包含节点数、最长路径。是全局的图,有时称为主节点,是一个虚构的节点,用一种抽象的方法与点和边相连。
2、 顶点V:包含节点身份、邻居数量
3、 边E:包含边缘身份、边缘权重。可以通过将方向性与边(有向、无向)相关联来专门化图。
图片与稀疏矩阵与图之间的转换:
1、 image Pixels:图片的像素点位置
2、 Adjacency Matrix:稀疏矩阵
3、 Graph:无向图网络
可以看见image Pixels的1-1和2-2的像素位置信息可以通过二维稀疏矩阵和三维图网络表达出来,一个像素可以通过与邻居像素确定坐标方位,从而固定所在区域。
机器学习模型通常采用矩形或网格状数组作为输入。图有多达四种类型的信息,希望使用这些信息进行预测:节点V、边E、全局上下文U和边与点的连接性。
其中图的连接性更为复杂,也许最较好的选择是使用邻接矩阵去表达,因为这较容易使用张量表示。然而这种表示存在一些缺点。一些复杂的图中节点数可能达到数百万级,每个节点的边距可能变化很大,这会产生非常稀疏的邻接矩阵,不仅空间效率低下,而且想通过GPU去处理较大的稀疏矩阵,还是一个比较难的基础问题。
除此之外,还有一个问题就是有许多邻接矩阵可以通过不同的编码方式来表达相同的连通性,但这不能保证这些不同的矩阵在深度神经网络中会产生相同的结果(也就是说,它们不是置换不变的)。意思也就是对于同一张图片有多种编码方式来将他转换成不同的邻接矩阵,但这些邻接矩阵表达的点边连接性是一样的,是同一张图片,而神经网络面对这些不同矩阵迭代学习出来的结果区别可能很大。就像下图ABCD四个相连节点就已经存在24种邻接矩阵方案。
对于这些问题,有人提出了一种优雅且节省内存的方法——邻接列表。
邻接列表包含了边的数量和节点之间连接关系,有多少条边就有多少个项,每个项都记载了对应边所连接的两个节点序号。可以避免在图的不连接部分进行计算和存储,另一个方面来说顺序对邻接列表影响不大,既是储存高效也是与顺序无关。
GNN 采用“图入图出”架构,这些模型类型接受图作为输入,加载到其节点、边和全局上下文到模型中,并逐步更新这些传入信息,而不改变输入的连接性图形,也就是只对属性进行变化但是不改变图的结构。
比如说对U、V、E使用单独的多层感知器 (MLP),对于每个节点向量应用 MLP 并返回一个学习的节点向量。对每条边做同样的事情并返回学习每个边的信息。对于全局上下文向量并返回学习整个图的信息。
与神经网络模块或层一样,我们可以将这些 GNN 层堆叠在一起构建一个简单的 GNNs。
GNN最后一层的输出如何在任务中进行预测呢,比如面对二分类的情况,可以很容易地扩展到多类或回归的情况。
向量信息储存在节点时,进行二元或N分类预测,并且图已经包含节点信息,那么方法很简单——对于每个节点更新,应用全连接层+softmax得到输出。
向量信息存储在边时,但节点中没有信息仍需要对节点进行预测时,可以从边E收集信息并将这些信息提供给节点进行预测。可以通过pooling汇聚来做到这一点,应用全连接层+softmax得到输出。池化分两步进行:
还有很多比如向量信息储存在边时预测边,向量信息储存在节点时预测边,向量信息储存在节点和边时预测全局上下文等等方案,不管
向量信息存储在哪里都可以通过汇聚操作得到想要的那个属性的向量信息。
但在这个最简单的 GNNs 模型中,我们根本没有在 GNN 层内使用图的连通性。每个节点都是独立处理的,每条边也是如此,以及全局上下文。我们只在汇集信息进行预测时使用连接性,并没有很充分利用好图的信息。
这里是复用pooling汇聚来做到这一点,在把节点V传入MLP模型前,根据点线连接找到对应的邻接节点也就是一近邻,并把他们进行汇聚层产生新的向量后,再传入MLP中,也就是加多了一个简单聚合步,类似于没有加权和的卷积操作,这也是图卷积神经网络的思路。
通过将消息传递 GNN 层堆叠在一起,一个节点最终可以整合获取来自整个图的信息,比如在三层之后,一个节点拥有离它三步之遥的节点的信息,完成整个图的较长距离的信息传递过程。
从点与点之间引出一个问题,关于VE两者之间的信息交换。
根据之前的点边聚合信息思路,组合成新的节点和边表示:节点到节点(线性)、边到边(线性)、节点到边(边缘层)、边到节点(节点层),多种组合方式,不同方式有不同结果:
网络存在一个缺陷:当图中存在两个相距很远的节点,可能无法有效的快速的相互传递信息。对于一个节点,如果我们有 k 层,则信息将最多传播 k 步,从而产生信息滞后。如果这个处于网络边缘的节点很重要的话,那可能会造成一定的影响。一种解决方案是让所有节点能够相互传递信息。不幸的是,对于大型图,这很快就会变得计算成本高昂(尽管这种称为“虚拟边”的方法已用于诸如分子之类的小型图)。
这个问题的一种解决方案是使用图 (U) 的全局表示,有时称为主节点 或上下文向量。这个全局上下文向量连接到网络中的所有其他节点和边,并且可以充当它们之间的桥梁以传递信息。
GCN也是一个神经网络层。它的层与层之间的传播方式是:
其中:
图卷积神经网络是用其他节点的信息来推导该节点的信息。
另外,图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。
图数据中的空间特征具有以下特点:
1) 节点特征:每个节点有自己的特征;(体现在点上)
2) 结构特征:图数据中的每个节点具有结构特征,即节点与节点存在一定的联系。(体现在边上)
总地来说,图数据既要考虑节点信息,也要考虑结构信息,图卷积神经网络就可以自动化地既学习节点特征,又能学习节点与节点之间的关联信息。
所有图属性都学习了表示,因此我们可以在池化期间通过调节我们感兴趣的属性相对于其余属性的信息来利用它们。例如,对于一个节点,可以考虑来自相邻节点、连接边和全局信息的信息。为了使新节点嵌入所有这些可能的信息源,可以简单地将它们连接起来。此外,还可以通过线性映射将它们映射到同一空间并添加它们或应用特征调制层,这可以被认为是一种特征化注意机制。
建议去看一下这篇国外博客,尝试去操作一下这些交互图,可以有效提高理解。