本文主要是介绍gcn(从空间域理解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、背景
常见的神经网络,如BP神经网络可以用来处理表格型的数据,卷积神经网络可以用来处理图片数据,循环神经网络则可以用来处理序列数据,这些数据都是结构化的数据,当我们需要处理的数据为图这种非结构化的数据,例如:城市交通的每个路口上的传感器所记录的数据;化学分子结构;人际关系网;推荐系统中每个人构成的图。并不是说以上的神经网络处理不了图这种类型的数据,只是在处理图这种数据上存在欠缺,图数据有一个很明显的特征,相邻或相近的节点存在一定的空间依赖关系,这种关系传统神经网络很难捕获,为此,图神经网络应运而出。
二、什么是图网络?
图网络的核心思想就是依据图结构的空间依赖关系来表征现实世界中真实的特征之间的相互作用关系,通过对节点特征进行聚合生成新的节点特征表示用于后续工作。这句话非常重要,是整个图神经网络的构建的基本原则!!!举个例子,下图为一张交通系统的图结构,在6个位置上分别有一个传感器记录了一段时间的交通流量数据,现在的目标是要预测接下来每个位置上未来一段时间的流量。该怎么去思考?从时间序列本身的角度来思考,未来的数据一定是与过去的数据相关,因此我们可以对6个位置的时间序列单独进行预测生成6个位置未来的预测值,但是这样做有一个缺点,没有考虑到节点之间的空间依赖关系,假设4节点流量非常大,那么他相邻的3/5/6节点大概率流量也是非常大的,既然已经用图结构表示出了这种空间关系,那么我们怎么去应用它?这就是图网络所要解决的问题。
现在再来理解下背景中的几种网络,对于BP神经网络其实就是仅仅考虑了历史数据而没有考虑空间关系;卷积网络可以考虑空间中每个像素点之间的关系,但并不适用于图这种非结构化的数据;循环神经网络也是仅考虑了时间上的关系。当然有各种组合网络模型,既考虑了时间依赖关系又考虑了空间依赖关系,能够用来解决该问题,但是图神经网络是专门为了解决图这种数据结构而诞生的一种网络,值得重点学习。
三、图卷积网络——GCN
图卷积网络的本质就是提取图结构的空间特征,基于提取方式的不同可以分为:基于空间域的图网络(GraphSAGE,GAT,MPNN等)、基于谱域的图网络(Spectral CNN、ChebyNet、GCN等)。
①基于空间的方法就是直接从图结构出发,聚合邻居节点的信息作为新的特征,不断的进行消息传递的过程。 ②基于谱域的方法就是将原始数据转换至谱域中,利用图谱理论,引入滤波器进行滤波,在转换回时域的一个过程。
下面分别就这两个角度对GCN进行讲解。
四、从空间域理解
本文假定你已经拥有图结构的相关知识,不再进行赘述。
4.1 邻接矩阵A
首先让我们和BP神经网络对比一下,设输入为X,网络权重为W,则一层的BP网络可以表示为: f=σ(XW) ;图卷积网络可以表示为: f=σ(AXW) ,其中A为图结构的表示矩阵。他们分别是什么含义?
对于BP网络,输入X经过网络的计算后,表示对每个样本的各个特征进行线性组合生成新的特征,再施加激活函数激活的一个过程。 而图神经网络在输入X前多乘了一个图结构矩阵A,假设样本数为n,则A的形状为n*n, nij 表示第 i 个节点与第 j 节点之间的关系,那么AX就表示利用图的结构对各个样本的特征进行重新整合作为新的输入,再输入至BP神经网络中,这样就将空间依赖关系考虑到了。
以上仅是简单的介绍,下面将详细的介绍下具体原理,假设现在有这样一个图结构,有ABCDE五个节点,每个节点之间的相互关系以及每个节点的特征如下图。
现在我要重新计算E的特征,根据GCN的基本思想,就是要聚合其邻居节点的信息,也就是ABCD的特征以一定方式进行聚合(平均、求和、拼接等),以求和为例:
引入图的邻接矩阵A,则以上聚合可以表示为:
设n为节点数,f为每个节点的特征维度,则邻接矩阵A的形状为 (n,n) ,特征矩阵的形状为 (n,f) ,AX相乘后表示考虑到邻居节点信息的新的特征矩阵,形状为 (n,f) ,每一行表示一个节点的特征,可以看出新的E节点,也就是矩阵相乘后的最后一行就是ABCD节点的相加。相比于手动计算,采用邻接矩阵,我们能一次性将所有的节点特征表示出来。
4.2 考虑自身信息的邻接矩阵
上面有一个问题,不知道大家发现没有,两个不同的节点B和C在经过邻接矩阵的运算后,新的特征向量竟然一模一样,这是两个具有不同位置信息、不同特征的不同节点啊,得出来一样的结果明显是不合理的。因此为了防止这种情况,在计算新的节点特征时,不仅要考虑邻居节点的信息,也可以将自身节点的信息考虑进去。在邻接矩阵上面的表现就是加上了一个单位阵:
A~=A+I
则,新的邻接矩阵为:
将新的邻接矩阵 A~ 左乘特认矩阵X,得:
可以看出,避免的上述的情况,B和C虽然具有相同的邻居,但是由于自身的特征不一样,所以空间变换后的特征也不一样,主要是由于单位矩阵的加入,使得矩阵相乘时,考虑到了自身节点的信息的因素。
4.3 求平均(归一化)
采用以上的方式,相当于我们队所有邻居及自身进行了求和,但是这种聚合方式是有问题的,相当于我们变相的改变了特征的量级,我们每进行一次聚合,就加大了一次量级,随着迭代的增加,量级会越来越大,假设现在我要求小明的收入,那么采用求和的方式就会将小明的邻居朋友们及自己的收入加起来这是不对的。因此更好地方式是求平均,类比到图结构中就是左乘我们的度矩阵。
度矩阵就是与该节点相邻节点的数据,因此就是邻接矩阵A每一行的求和组成的对角阵, D=∑jAij ,如下:
同样的这种方式只考虑到了邻居节点的个数,没有考虑到自身的信息,因此在度矩阵D上在加上单位阵 I ,也即 A~ 的每一行的求和, D~=D+I=∑jA~ij ,如下:
所以最终的求平均的操作就为 D~−1A~X ,由于矩阵乘法满足结合律,所以 D~−1A~X=D~−1(A~X) ,又由于 D~−1 为初等矩阵,左乘初等矩阵相当于行变换,所以相当于对 A~X 的每一行除以度,这不就是对每一个节点求和后的特征做平均么!,如下
这实际上就是邻接矩阵的归一化。
4.4 renormalization
以上求平均的方式仍然有点不合理,想象一下,仍然是要求小明的收入,按照图网络原理,他的收入是与自身及其图上的邻居有关,假设小明收入很低,但他在图上有且只有一个土豪朋友,那么经过土豪的平均,他的收入也会变得很高,所以上面 D~−1A~X 是有问题的,先讲是怎么改进的,后面将为什么这么改进,改进的公式为:
D~−12A~D~−12X
其中, ,D~=D+I,A~=A+I 。公式中 A~ 左乘和右乘一个初等矩阵,相当于分别对 A~ 做初等行列变换, A~ij 表示 A~ 中第 i 行第 j 列的元素,就是 i 节点与 j 节点的关系,那么这个变换就相当于 i 节点与 j 节点的关系系数再除以 i 节点度的平当根与 j 节点系数平方根的积,这样节点之间的关系系数(权重)不再与某一个节点优点,而分别考虑到了两个节点的度,邻居节点的度越大,权重越小,也即一个节点的边越多,由于节点的总的信息是一定的,那么他通过每条边的信息量越少,即通过某条边向外发送的信息越少。
拿上面的例子解释一下,小明的收入很低且只有土豪一个邻居,但是土豪有很多邻居,因此土豪的度很大,在计算小明与土豪之间的关系权重时,小明只是土豪众多邻居中的一个,因此分配到的权重很小,所以土豪并不会对小明的收入产生很大的影响。映射到公式中就是把土豪的度当做分母了,因此计算出来的关系权重比较小。
这篇关于gcn(从空间域理解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!