图卷积:从GCN到GAT、GraphSAGE

4a1892b0c34b0fcfa6847fcf274351bf.png

 图模型总体上可以分为两大类:一是random-walk游走类模型,另一类就是GCN、GAT等卷积模型了。

1. 为什么出现GCN来处理图结构

在图像领域,CNN被拿来自动提取图像特征的结构,但是CNN处理的图像或者视频数据中像素点(pixel)是排列成成很整齐的矩阵,虽然图结构不整齐(不同点具有不同数目neighbors),但是不是可以用同样的方法去抽取图的的特征呢?

于是就出现了两种方式来提取图的特征。一是空间域卷积(spatial domain),二是频域卷积(spectral domain)。第一种方式由于每个顶点提取出来的neighbors不同,处理上比较麻烦,同时它的效果没有频域卷积效果好,没有做深究。因此,现在比较流行、工程上应用较多的为频域卷积。

2.GCN

GCN的卷积核心公式: Hl+1=σ(D−1/2AD−1/2HlWl)

GCN计算方式上很好理解,本质上跟CNN卷积过程一样,是一个加权求和的过程,就是将邻居点通过度矩阵及其邻接矩阵,计算出各边的权重,然后加权求和。

D负责提供权值的矩阵,邻接A矩阵控制应该融合哪些点, H表示上一层的embedding参数

 

GCN首次提出了卷积的方式融合图结构特征,提供一个全新的视角。

主要缺点:1.融合时边权值是固定的,不够灵活。2.可扩展性差,因为它是全图卷积融合,全图做梯度更新,当图比较大时,这样的方式就太慢了,不合适。3.层数加深时,结果会极容易平滑,每个点的特征结果都十分相似。

GAT就来解决问题1的,GraphSAGE就来解决这个问题2的,DeepGCN等一系列文章就来讨论问题3的。基本上,GCN提出之后,后续就是各路神仙打架了,都是针对GCN的各个不同点进行讨论改进了

3. 带attention的图注意网络GAT

attention这么流行,看完GCN就容易想到,GCN每次做卷积时,边上的权重每次融合都是固定的,那能不能灵活一点,加个attention,让模型自己去学,那GAT就来干这个事了。

2b8e1e80c8e6a26d4959ab33a0f1720d.jpeg

 结合下面这两各公式,看看这个attention是怎么定义的。 

f273b2a048fdd4ac85051e092795c1a4.png

 

 αi,j 表示第i个点与第j个点之间的attention系数,是node feature,其他a、W的为模型参数。

αi,j 就是通过计算 LeakycReLU(concat[Whi,Whj]) ,在经过Normalize处理一下得到。

得到各条边的 αi,j 之后,第i个点的融合attention过后的node feature可以表示下面这个公式,实质上还是一个加权的feature求和过程,只是每次融合中的权重系数是随模型训练学习的,最后在经过一个非线性的激活函数去做对应的任务。

233d55af327b8f0016736422c3302d69.png

GAT中的attention机制还是很直观的,通过给每条边加了一个模型可学习的系数 αi,j ,进行带attention系数的node feature融合,使得在做卷积融合feature的过程,能够根据任务调整模型参数,变得自适应使得效果更好

 4.可扩展的图网络Graph-SAGE

前面说到,GCN中做卷积融合是全图的,梯度是基于全图更新,若是图比较大,每个点邻居节点也较多,这样的融合效率必然是很低的。于是GraphSAGE出现了。

在提GraphSAGE前,先解释下transductive learning、inductive learning的概念,这也是GraphSAGE与其他图模型的区别。

  1. transductive是说要预测的数据在训练时模型也能看到。进一步解释一下,就是说训练前,构建的图结构已经是固定的,你要预测的点或边关系结构都应该已经在这个图里了,训练跟预测时的图结构都是一样的。
  2. inductive是说要预测的数据在训练时模型不用看到,也就是我们平常做算法模型的样子,训练预测时的数据是分开的,也就是上面说的可以图结构不是固定的,加入新的节点。

GraphSAGE就是inductive的模式,GraphSAGE提出随机采子图的方式去采样,通过子图更新node embedding, 这样采出的子图结构本身就是变化,从而让模型学到的是一种采样及聚合的参数的方式,有效解决了unseen nodes问题,同时避免了训练中需要把整个图的node embedding一起更新的窘境,有效的增加了扩展性。

e37c7dcfda0bfdd6914f412b84626131.jpeg

 具体的思想就是分三步:

  1. 采子图:训练过程中,对于每一个节点采用切子图的方法,随机sample出部分的邻居点,作为聚合的feature点。如上图最左边,对于中心点,采两度,同时sample出部分邻居节点组成训练中的子图。
  2. 聚合:采出子图后,做feature聚合。这里与GCN的方式是一致的,从最外层往里聚合,从而聚合得到中心点的node embedding。聚合这里可操作的地方很多,比如你可以修改聚合函数(一般是用的mean、sum,pooling等),或增加边权值都是可以的。
  3. 任务预测:得到node embedding后,就可以接下游任务了,比如做node classification,node embedding后接一个linear层+softmax做分类即可。

GraphSAGE主要解决了两个问题:1.解决了预测中unseen nodes的问题,原来的GCN训练时,需要看到所有nodes的图数据。2.解决了图规模较大,全图进行梯度更新,内存消耗大,计算慢的问题

以上两点都是通过一个方式解决的,也就是采子图的方式,由于采取的子图是局部图且是随机的,从而大大增加模型的可扩展性

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值