图卷积神经网络笔记——第三章:空域图卷积介绍(1)

上一小节: 链接.
空域图卷积主要是围绕什么是卷积展开,介绍四个空域卷积模型,分别是:GNN、GraphSAGE、GAT、PGC

目录

  • 一、简介
      • 1、回顾谱域图卷积
      • 2、谱域图卷积的缺陷
  • 二、四个空域卷积模型
      • 1、GNN
      • 2、GraphSAGE
      • 3、GAT
      • 4、PGC
      • 5、小结
      • 6、代码

一、简介

1、回顾谱域图卷积

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第1张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第2张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第3张图片

2、谱域图卷积的缺陷

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第4张图片

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第5张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第6张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第7张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第8张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第9张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第10张图片
空域卷积没有涉及太多的数学知识,所以直接开始四种模型的介绍。

二、四个空域卷积模型

1、GNN

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第11张图片
GNN回答卷积就是:固定数量领域节点排序后,与相同数量的卷积核参数相乘求和。这有点绕口,实际上就是说,GNN认为卷积分为两步,第一步构建领域,第二步对领域上的节点与卷积核参数进行内积操作(相乘求和)。上图是经典卷积的例子,比如第一步,我们要对下标为1x1的节点(下标从0开始)构建领域,根据图片的特点,很容易构建3x3大小的领域,因为图片本身像素之间有8领域的内在的结构,同时这个领域有从左上角到右下角的固有的顺序,第二步,对领域的点进行卷积操作,具体而言就是将卷积核参数和领域上的信号进行内积,GNN就是按这个思想展开工作(即采用固定数量的卷积核,而且卷积核是有顺序的)。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第12张图片
第二步和经典卷积一样,没什么难度,难点在于第一步构建领域,即怎么找固定数量的邻居节点找到的邻居节点如何排序,下面回答这个问题。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第13张图片
使用随机游走的方法来选择邻居节点,这涉及到马尔可夫模型(不懂的需要查阅相关知识),但是大致可以这么认为,所谓随机游走可以认为是一个东西会从一个节点以一定的概率转移到相邻的另一个节点,所有节点的转移矩阵构成一个随机游走矩阵P, P i j P_{ij} Pij 表示由 i i i 节点到 j j j 节点的转移概率, P P P 的定义依靠于相似度矩阵 S S S,可以理解为邻接矩阵,就是我们前面讲的 W W W,这里和论文符号保持一致。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第14张图片
根据概率转移矩阵 P P P,可以求的 k k k步内由 i i i 节点出发到 j j j 节点的期望访问数。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第15张图片
上图是三个状态下某个节点到其他节点的期望访问数,0步就是单位阵,只能自己到自己,1步是一个一阶转移矩阵,表示走了一步,依此类推,走 k k k 步就是 P k P^k Pk(和马尔可夫模型中的概率转移矩阵是一模一样的)。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第16张图片
实际上上面就是说,当我们知道了概率转移矩阵 P P P 之后,对于 i i i 节点我们可以选择期望最大的 p p p 个节点作为 i i i节点的邻域,并且根据期望的大小对 p p p个节点由大到小排序。

执行1D卷积就是前面说的第二步,那么邻居节点有 p p p个,自然地卷积核地参数也有 p p p个。

总的来说GNN就是使用了随机游走的方法,给每个节点选择了最紧密相联的 p p p个节点作为邻域,然后再与固定大小的卷积核参数来进行内积。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第17张图片
如果还不懂,下面来看一个示例,就很明白了。

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第18张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第19张图片
上面就是邻接矩阵 S S S和度矩阵 D D D
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第20张图片
那么概率转移矩阵 P P P 就可以由上面这样得到,实际上就是对邻接矩阵 S S S做了归一化,使得每一行加起来为一,它就可以代表概率, P i j P_{ij} Pij 表示由 i i i 节点到 j j j 节点的转移概率,注意 P P P不是对称矩阵。

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第21张图片
比如1号节点走两步到不了6号节点,那概率就是0。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第22张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第23张图片
前面说过, Q Q Q矩阵代表k步内 i i i节点出发到 j j j节点的期望访问数,也就是把前面走的步数的概率都加起来,上面是k=3,加起来是4,因为k是从0开始的,0步就代表它本身。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第24张图片
可以看到,5号节点最终没有选择4号节点,而是选择了1,2号节点和它本身,这个就是 P P P矩阵的作用,找到固定大小的节点并且排序之后,接下来就可以执行1D卷积了。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第25张图片

2、GraphSAGE

论文: 链接.
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第26张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第27张图片
GraphSAGE的思想是采样+聚合,第一步通过采样得到邻域节点,第二步使用聚合函数聚合邻居节点的信息,获得目标节点的embeddi,也就是特征。上面列举的第三步,实际上是输出层的事情。下面具体来看前两步。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第28张图片
这里需要说明一下,GNN采用随机游走的方法找到邻居节点之后,这些邻居节点就不再变化了,而GraphSAGE每次迭代都会进行一次采样,所以对于同样的节点,它的邻居可能是会变化的,如果还没看懂,后面会通过举例来直观的说明。

GraphSAGE使用聚合函数聚合邻居节点的信息,上面是作者提供的三个聚合函数。

(1)均值聚合:就是说对于邻域内的节点取一个平均值,这个显然与顺序无关,比如有五个数取均值,它们的顺序是与最终的均值无关的,或者说不会影响均值。

(2)使用LSTM函数来聚合,但是严格来说这个函数并不是与顺序无关的,作者假设LSTM是与输入无关的函数(或者说是网络),LSTM是长短时记忆模型,是RNN网络的一种(不知道RNN和LSTM的赶紧搜索相关博客或论文),GraphSAGE主要是利用了LSTM比较强的非线性的能力,因为取平均和最大值Pooling(第三点)太简单了。

(3)Pooling聚合,上面是使用了最大值的Pooling聚合,显然也是与顺序无关。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第29张图片
上面是GraphSAGE的伪代码,看起来复杂,实际上很简单,下面一步步看上面的代码:

第一步输入 Input:图 G ( V , E ) G(V,E) G(V,E) V V V表示节点的集合, E E E表示边的集合。输入特征用 x v x_v xv 表示, x v x_v xv代表 V V V节点上的特征。depth K K K 代表网络的深度,也就是这个网络有 K K K 层。权重矩阵 W k W^k Wk 代表第 k k k 层的卷积核参数, σ \sigma σ 是非线性的函数,一般来说使用Relu和sigmoid函数, A G G R E G A T E k AGGREGATE_k AGGREGATEk就是聚合函数,我们前面讲的三种, k k k就表示第 k k k层,最后GraphSAGE通过均匀采样来构建邻域。

第二步输出 Output: h v 0 h^0_v hv0代表第0层的 v v v节点上的信号或者特征,第0层就是输入信号 x v x_v xv,然后进入两个for循环,外面的这个循环是针对每一层而言的,从 k = 1 k=1 k=1 k = K k=K k=K,在每层之内使用for循环就是依此遍历这层的每个节点。我们看看一层内的每个节点是怎么处理的:

首先通过 A G G R E G A T E k AGGREGATE_k AGGREGATEk函数进行聚合,聚合出邻域节点的信息, u u u就是 v v v节点的邻域, h u k − 1 h^{k-1}_u huk1就是上一层的特征,是 k k k层的输入。假设通过取平均值的方式进行聚合,那么对于 v v v节点而言实际上就是把它邻域的节点加起来取一个平均,得到了邻域的信息。

然后对邻域的节点的信息再CONCAT v v v节点本身的信息(CONCAT操作就是串联,就是将两个向量首尾相接的拼起来),这个和经典卷积是一样的,比如说我们在进行3x3的卷积操作的时候,我们不仅仅时考虑周围的8个节点的信息,中心节点自己也要参与计算。串联之后再经过了一个可学习的参数 W k W^k Wk做了一个线性变换, W k W^k Wk 是第 k k k 层的线性变换的参数,是可学习的,实际上,这里的 W k W^k Wk担任了卷积核参数的角色。再通过一个激活函数得到输出。

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第30张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第31张图片
来看一个示例:

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第32张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第33张图片
前面说过,GraphSAGE每次迭代都会进行一次采样,对于同样的节点,它的邻居可能是会变化的,下面是直观的感受:
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第34张图片

3、GAT

文章: 链接.
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第35张图片
不知道注意力机制的: 点击这里.

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第36张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第37张图片
需要说明的是“||”其实就是串联操作,即两个向量首尾相接。上面右图中表示的很明白, W h ^ i W \hat h_i Wh^i W h ^ j W \hat h_j Wh^j串联,然后与 a ^ \hat a a^做内积,得到 e i j e_{ij} eij
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第38张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第39张图片
上面就是图卷积操作,现在我们假设忽略注意力系数,即 α i j = 1 \alpha_{ij}=1 αij=1,那么实际上就是对每个节点做了一个线性变换,然后再求和,GAT的卷积核参数 W W W也是所有领域内节点所共享的,当加入注意力系数之后,那么就是说在对周围的邻域节点信息进行聚合的时候,我们要考虑这个 α i j \alpha_{ij} αij α i j \alpha_{ij} αij比较大,那么就意味着这个 j j j节点对中心的 i i i节点关系紧密,贡献比较大,反之则贡献就小,这个就是Attention机制的目的,即更加关注于重要的节点,而较少关注不重要的节点(是较少,不是忽略)。

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第40张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第41张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第42张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第43张图片
为了更好的理解,下面来看示例:

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第44张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第45张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第46张图片

4、PGC

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第47张图片
实际上,PGC是从经典卷积出发来得出卷积是特定的取样函数与特定的权重函数相乘后求和,看上面的公式我们来举例,比如说一个3x3的卷积核就有9个信号,当 h = 1 h=1 h=1, w = 1 w=1 w=1时,则取 x 11 x_{11} x11,也就是3x3的左上角的节点,当 h = 3 h=3 h=3, w = 3 w=3 w=3时,则取 x 33 x_{33} x33,也就是3x3的右下角的节点,总之随着 h 和 w h和w hw的不断地变化(1-3,1-3),就可以取到3x3邻域上的9个不同的节点,权重函数 W W W也是一样的,每取到一个节点的时候,对该节点分配一个卷积核的参数,这样3x3的邻域内就是9个节点上的信号和9个卷积核参数的内积。以上是在经典卷积中对于取样函数和权重函数的定义。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第48张图片
其中, B B B为集合, B ( v i ) B(v_i) B(vi)代表 i i i节点的邻域,邻域的定义就是:只要 j j j节点和 i i i节点的距离小于等于 D D D,则 j j j就是 i i i的邻域节点。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第49张图片
可以看出,权重函数这样设计是有很强的泛化性的,比如划分成 K = 1 K=1 K=1,也就是划分成1类,则这样,就是所有的节点共享一个卷积核参数。现在假如邻域大小等于类别数,意思就是说每一个节点划分到一个类中去,每个节点享用的卷积核参数都不一样,这就有点类似与GNN的方法。而介于这两者中间,则成为一种中间态。

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第50张图片
前两个好理解,解释一下第三个(图d):第三个就是说“x”代表人体骨架中心,若“x”到邻域节点的距离小于到中心节点的距离,则划成一类(蓝色),若大于,则划分成另一类(黄色),等于当然也划成一类(绿色)。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第51张图片

解释一下这个公式:

首先就是一个取样函数,是在一阶邻域内依次取样,取到了 j j j节点之后;
然后 f i n ( v j ) f_{in}(v_j) fin(vj)就表示将 j j j节点转换成它的特征;
接着就是分配权重,给 j j j节点分类, l i l_i li就表示分类,根据不同的类别给 j j j节点分配一个不同的权重函数,实际上就是特征与卷积核参数的内积;
最后使用一个归一化系数。

下面是实验结果,PGC主要是基于人体骨架来实验的。
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第52张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第53张图片
下面来看一个操作示例:
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第54张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第55张图片

5、小结

图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第56张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第57张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第58张图片
图卷积神经网络笔记——第三章:空域图卷积介绍(1)_第59张图片

6、代码

(1)详读文献:
图网络综述文章:A Comprehensive Survey on Graph Neural Networks.

(2)运行代码:

GCN: https://github.com/tkipf/gcn.

ChebNet: https://github.com/mdeff/cnn_graph.

GNN: https://github.com/hechtlinger/graph_cnn.

GraphSAGE: http://snap.stanford.edu/graphsage/.

GAT: https://github.com/PetarV-/GAT.

PGC: https://github.com/yysijie/st-gcn.

你可能感兴趣的:(图卷积神经网络笔记,图神经网络,深度学习)