通俗易懂的GCN原理讲解

GCN,图卷积神经网络,实际上跟CNN的作用一样,就是一个特征提取器,只不过它的对象是图数据。GCN精妙地设计了一种从图数据中提取特征的方法,从而让我们可以使用这些特征去对图数据进行节点分类、图分类、边预测,还可以顺便得到图的嵌入表示(graph embedding),可见用途广泛。

为什么要使用GCN


深度学习一直都是被几大经典模型给统治着,如CNN、RNN等等,它们无论再CV还是NLP领域都取得了优异的效果,那这个GCN是怎么跑出来的?是因为我们发现了很多CNN、RNN无法解决或者效果不好的问题——图结构的数据。

图的结构一般来说是十分不规则的,可以认为是无限维的一种数据,所以它没有平移不变性。每一个节点的周围结构可能都是独一无二的,这种结构的数据,就让传统的CNN、RNN瞬间失效。这里涌现出了很多方法,例如GNN、DeepWalk、node2vec等等,GCN只是其中一种。

GCN公式


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTg7kGNB-1665993567026)(C:\Users\龚剑波\AppData\Roaming\Typora\typora-user-images\image-20221017153810517.png)]

这个公式中:

  • A波浪:=A+I,I是单位矩阵,代表领接矩阵
  • D波浪:是A波浪的度矩阵(degree matrix)
  • H: 是每一层的特征,对于输入层的话,H就是X
  • σ: 是非线性激活函数

这个公式看上去非常难理解,而且论文中的推导公式也用到了图拉普拉斯算子和切比雪夫多项式,这里我们就当看不见这个公式的推导过程,就好比我们得到了一个公式,可以基于图结构,从原始节点的特征中提取特征信息。

这样,通过若干层GCN,每个node的特征就从X变成了Z,但是无论中间有多少层,node之间的连接关系,即A,都是共享的。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SdE5EQR7-1665993567027)(C:\Users\龚剑波\Desktop\通俗易懂的GCN原理讲解.assets\image-20221017154152670.png)]

GCN公式推导


推导比较长,如果想了解整体过程的话可以跳过这个部分~

这里参考了江南綿雨博客内容:

Step1: 求图模型的邻接矩阵和度矩阵

对于传统的GNN,一个图网络需要节点特征矩阵和邻接矩阵的输入,这样才能进行节点的聚合操作。但是GCN中还需要引入一个度矩阵,这个矩阵用来表示一个节点和多少个节点相关联,对于后面的步骤有巨大的作用,如图所示:在这里插入图片描述

Step2:进行特征计算
求得矩阵A , D , X A,D,XA,D,X后,进行特征的计算,来聚合邻居节点的信息。GCN中的聚合方式和传统GNN中的方式有较大差异,这里分解为几个细节点:

① 邻接矩阵的改变
邻接矩阵 A AA 没有考虑自身的加权,所以GCN中的邻接矩阵实际上等于 A AA +单位对角矩阵 I II。
在这里插入图片描述

② 度矩阵的改变
首先对度矩阵的行和列进行了归一化(具体格式看下图),为什么这么做呢?行归一化系数代表着节点自身的一个变化程度,关联的节点越少,系数越大,越容易随波主流,更易受别人影响。而列归一化系数,代表关联节点对当前节点的影响程度,关系网越复杂的节点,它对其他节点的作用就越小,比如我认识一个亿万富翁,但富翁认识很多人,我们也就是一面之缘,那么能说因为我和他认识,我就是个百万富翁了嘛,显然有点草率了。通过行和列归一化系数,相互制衡,秒不可言。

同时,归一化的系数还开了根号,就是因为考虑到归一化后的行和列系数都加权给了节点特征,均衡一点。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Step3:训练参数 w ww 的加权
进行完聚合操作后,新的节点特征向量再乘上 w ww,往往会改变一下特征的维度,具体见下图:

在这里插入图片描述

Step 4:层数的迭代

接下来重复step1~3,每重复一次算一层,GCN正常只需要3–5层即可,这里就和CNN、RNN很不一样。因为节点每更新一次,感受野就变大一些,如果网络太深,那么每个节点就会受无关节点的影响,效果反而下降。

举例


假如对于一个图分类任务,我们构造一个两层的GCN,激活函数分别采用ReLU和Softmax,则整体的正向传播公式为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-020tckwT-1665993567027)(C:\Users\龚剑波\Desktop\通俗易懂的GCN原理讲解.assets\image-20221017154508989.png)]

通过整体正向传播公式,我们可以提取节点的特征和位置信息,但并不是所有节点都带有标签信息。

这里针对所有带标签的节点计算交叉熵损失函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pLZ85Us7-1665993567028)(C:\Users\龚剑波\Desktop\通俗易懂的GCN原理讲解.assets\image-20221017154622312.png)]

利用交叉熵损失函数训练优化W权重矩阵,最终就可以训练得到一个node classification的模型了。由于即使只有很少的node有标签也能训练,作者称他们的方法为半监督分类。

实验:使用一个俱乐部会员的关系网络,使用随机初始化的GCN进行特征提取,得到各个node的embedding,然后可视化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nsZEklxj-1665993567028)(C:\Users\龚剑波\Desktop\通俗易懂的GCN原理讲解.assets\image-20221017154910447.png)]

可以发现,在原数据中同类别的node,经过GCN的提取出的embedding,已经在空间上自动聚类了。

而这种聚类结果,可以和DeepWalk、node2vec这种经过复杂训练得到的node embedding的效果媲美了。

说的夸张一点,比赛还没开始,GCN就已经在终点了。看到这里我不禁猛拍大腿打呼:“NB!”

还没训练就已经效果这么好,那给少量的标注信息,GCN的效果就会更加出色。

作者接着给每一类的node,提供仅仅一个标注样本,然后去训练,得到的可视化效果如下:

img

GCN的好处


1、没有节点特征也可以使用GCN,例如论文中的俱乐部网络就用单位矩阵I代替了特征矩阵X

2、不训练的GCN的效果就已经非常优秀了,相比CNN、RNN如果不训练根本得不到什么有效特征

3、即使节点没有任何类别标准或者其他标准,也可以使用GCN,因为通过随机化权重参数也可以将节点的位置信息聚类到一起,做到不训练也有分类的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听弧丶

你的鼓励将是我最大的前进动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值