知乎主页https://www.zhihu.com/people/shuang-shou-cha-dai-53https://www.zhihu.com/people/shuang-shou-cha-dai-53
备注:本篇博客摘自某培训机构上的图神经网络讲解的视频内容,该视频关于图神经网络入门讲解、经典算法的引入和优缺点的介绍比较详细,逻辑主线也比较清晰。因此记录分享下。
之前两篇介绍了谱域图卷积神经网络:
图卷积神经网络1-谱域卷积:拉普拉斯变换到谱域图卷积
图卷积神经网络2-谱域卷积:SCNN/ChebNet/GCN的引入和介绍
本篇接着开始介绍空域图卷积神经网络
目录
1:简介
1.1:回顾谱域卷积
1.2:谱域图卷积的缺陷
2:空域卷积模型
2.1:GNN
2.1:GraphSAGE
2.3:GAT
2.4:PGC
3:总结
6:相关GitHub代码
GNN回答卷积就是:固定数量领域节点排序后,与相同数量的卷积核参数相乘求和。这有点绕口,实际上就是说,GNN认为卷积分为两步,第一步构建领域,第二步对领域上的节点与卷积核参数进行内积操作(相乘求和)。上图是经典卷积的例子,比如第一步,我们要对下标为1x1的节点(下标从0开始)构建领域,根据图片的特点,很容易构建3x3大小的领域,因为图片本身像素之间有8领域的内在的结构,同时这个领域有从左上角到右下角的固有的顺序,第二步,对领域的点进行卷积操作,具体而言就是将卷积核参数和领域上的信号进行内积,GNN就是按这个思想展开工作(即采用固定数量的卷积核,而且卷积核是有顺序的)。
第二步和经典卷积一样,没什么难度,难点在于第一步构建领域,即怎么找固定数量的邻居节点,找到的邻居节点如何排序?
使用随机游走的方法来选择邻居节点, 这涉及到马尔可夫模型(不懂的需要查阅相关知识),但是 大致可以这么认为, 所谓随机游走可以认为是一个东西会从一个节点以一定的概率转移到相邻的另一个节点, 所有节点的转移矩阵构成一个随机游走矩阵P, 表示由 节点到 节点的转移概 率, 的定义依靠于相似度矩阵 , 可以理解为邻接矩阵,就是我们前面讲的 , 这里和论文符号保持一致。
根据概率转移矩阵 ,可以求的 k 步内由 节点出发到 节点的期望访问数。
上图是三个状态下某个节点到其他节点的期望访问数,0步就是单位阵,只能自己到自己,1步是一个一阶转移矩阵,表示走了一步,依此类推,走 k 步就是 (和马尔可夫模型中的概率转移矩阵是一样的)。
实际上上面就是说,当计算得出概率转移矩阵 之后,对于 节点我们可以选择期望最大的 p 个节点作为 节点的邻域,并且根据期望的大小对 p 个节点由大到小排序。执行1D卷积就是前面说的第二步,那么邻居节点有p 个,自然地卷积核地参数也有p 个。总的来说GNN就是使用了随机游走的方法,给每个节点选择了最紧密相联的 p 个节点作为邻域,然后再与固定大小的卷积核参数来进行内积。
下面列出一个计算示例:
上面就是邻接矩阵S 和度矩阵 D。
那么概率转移矩阵 P 就可以由上面这样得到,实际上就是对邻接矩阵S 做了归一化,使得每一行加起来为一,它就可以代表概率,表示由 节点到 节点的转移概率,注意P 不是对称矩阵。
比如1号节点走两步到不了6号节点,那概率就是0。
前面说过,Q 矩阵代表 k 步内 节点出发到 节点的期望访问数,也就是把前面走的步数的概率都加起来,上面是k=3,加起来是4,因为k是从0开始的,0步就代表它本身。
可以看到,5号节点最终没有选择4号节点,而是选择了1,2号节点和它本身,这个就是P 矩阵的作用,找到固定大小的节点并且排序之后,接下来就可以执行1D卷积了。
原始论文:《Inductive Representation Learning on Large Graphs》
论文链接
卷积的概述:
GraphSAGE的思想是采样+聚合,第一步通过采样得到邻域节点,第二步使用聚合函数聚合邻居节点的信息,获得目标节点的embeddi,也就是特征。上面列举的第三步,实际上是输出层的事情。下面具体来看前两步。
这里需要说明一下,GNN采用随机游走的方法找到邻居节点之后,这些邻居节点就不再变化了,而GraphSAGE每次迭代都会进行一次采样,所以对于同样的节点,它的邻居可能是会变化的,如果还没看懂,后面会通过举例来直观的说明。
GraphSAGE 的采样方法:
出于对计算效率的考虑,对每个顶点采样一定数量的邻居顶点作为待聚合信息的顶点。设需要的邻居数量,即采样数量为S,若顶点邻居数少于S,则采用有放回的抽样方法,直到采样出S个顶点。若顶点邻居数大于S,则采用无放回的抽样。(即采用有放回的重采样/负采样方法达到 S)
当然,若不考虑计算效率,完全可以对每个顶点利用其所有的邻居顶点进行信息聚合,这样是信息无损的。GraphSAGE经常在大规模数据使用,因此,经常采样一个固定大小的邻域集,以保持每个batch的计算占用空间是固定的(即 GraphSAGE并不是使用全部的相邻节点,而是做了固定size的采样)。
GraphSAGE 的聚合函数:
在过对邻接节点采样后,GraphSAGE 通过聚合函数将采样得到的节点的信息聚合到中心节点,主要的聚合函数有:Mean aggregator,LSTM aggregator,Pooling aggregator。
GraphSAGE使用聚合函数聚合邻居节点的信息,下面是作者提供的三个聚合函数:
上面是GraphSAGE的伪代码,看起来复杂,实际上很简单,下面一步步看上面的代码:
第一步输入 Input: 图 表示节点的集合, 表示边的集合。输入特征用 表示, 代表 V 节点上的特征。depth 代表网络的深度, 也就是这个网络有 层。权重矩阵 代表第 层的卷积核参数, 是非线性的函数, 一般来说使用Relu和sigmoid函数,就是聚合函数,就是上面讲的三种, 就表示第 层, 最后GraphSAGE通过均匀采样来构建邻域。
第二步输出 Output: 代表第0层的 节点上的信号或者特征, 第0层就是输入信号 ,然后进入两个for循环,外面的这个循环是针对每一层而言的, 从 到 在每层之内使用for循环就是依此遍历这层的每个节点。我们看看一层内的每个节点是怎么处理的:
首先通过 函数进行聚合,聚合出邻域节点的信息, 就是 节点的邻域, 就是上一层的特征, 是 层的输入。假设通过取平均值的方式进行聚合, 那么对于 节点而言实际上就是把它邻域的节点加起来取一个平均, 得到了邻域的信息。
然后对邻域的节点的信息再CONCAT 节点本身的信息(CONCAT操作就是串联,就是将两个向量 首尾相接的拼起来), 这个和经典卷积是一样的, 比如说我们在进行3x3的卷积操作的时候, 我们 不仅仅时考虑周围的8个节点的信息, 中心节点自己也要参与计算。串联之后再经过了一个可学习 的参数 做了一个线性变换, 是第 层的线性变换的参数, 是可学习的, 实际上, 这里的担任了卷积核参数的角色。再通过一个激活函数得到输出。
下面继续以一个案例讲解:
上面讲到,GraphSAGE每次迭代都会进行一次采样,对于同样的节点,它的邻居可能是会变化的,下面是直观的感受:
原始论文:《Graph attention networks》
论文地址
需要说明的是“||"其实就是串联操作, 即两个向量首尾相接。上面右图中表示的很明白, 和 串联, 然后与做内积, 得到 。
上面就是图卷积操作,现在我们假设忽略注意力系数,即=1,那么实际上就是对每个节点做了一个线性变换,然后再求和,GAT的卷积核参数也是所有领域内节点所共享的,当加入注意力系数之后,那么就是说在对周围的邻域节点信息进行聚合的时候,要考虑这个,比较大,那么就意味着这个 节点对中心的 节点关系紧密,贡献比较大,反之则贡献就小,这个就是Attention机制的目的,即更加关注于重要的节点,而较少关注不重要的节点,注意是较少,不是完全忽略。
同样为了更好的理解,这里继续以一个案例来说明计算过程:
实际上,PGC是从经典卷积出发来得出卷积是特定的取样函数与特定的权重函数相乘后求和,看上面的公式我们来举例,比如说一个3x3的卷积核就有9个信号,当h = 1 h=1,w=1时,则取 ,也就是3x3的左上角的节点,当h = 3,w=3时,则取,也就是3x3的右下角的节点,总之随着h 和 w 的不断地变化(1-3,1-3),就可以取到3x3邻域上的9个不同的节点,权重函数W 也是一样的,每取到一个节点的时候,对该节点分配一个卷积核的参数,这样3x3的邻域内就是9个节点上的信号和9个卷积核参数的内积。以上是在经典卷积中对于取样函数和权重函数的定义。
其中, 为集合, )代表 节点的邻域,邻域的定义就是:只要 节点和 节点的距离小于等于,则 就是 的邻域节点。
可以看出,权重函数这样设计是有很强的泛化性的,比如划分成K = 1,也就是划分成1类,这样就是所有的节点共享一个卷积核参数。现在假如邻域大小等于类别数,意思就是说每一个节点划分到一个类中去,每个节点享用的卷积核参数都不一样,这就有点类似与GNN的方法。而介于这两者中间,则成为一种中间态。
前两个好理解,解释一下第三个(图d):第三个就是说“x”代表人体骨架中心,若“x”到邻域节点的距离小于到中心节点的距离,则划成一类(蓝色),若大于,则划分成另一类(黄色),等于也划成一类(绿色)。
解释一下这个公式:
首先就是一个取样函数,是在一阶邻域内依次取样,取到了j 节点之后;
然后就表示将 节点转换成它的特征;接着就是分配权重,给 节点分类, 就表示分类,根据不同的类别给 节点分配一个不同的权重函数,实际上就是特征与卷积核参数的内积;
最后使用一个归一化系数。
下面是实验结果,PGC主要是基于人体骨架来实验的。
下面继续看一个计算示例:
代码链接:
GCN
CheNet
GNN
GraphSage
GAT
PGC
下一篇:
图卷积神经网络4-空域卷积:空域卷积局限性分析和过平滑解决方案
图卷积神经网络5:图卷积的应用
知乎主页https://www.zhihu.com/people/shuang-shou-cha-dai-53https://www.zhihu.com/people/shuang-shou-cha-dai-53