文章目录

  • 一:GCN与GNN的区别
  • 二:GCN原理
      • Step1: 求图模型的邻接矩阵和度矩阵
      • Step2:进行特征计算
        • ① 邻接矩阵的改变
        • ② 度矩阵的改变
        • ③ Attention机制
      • Step3:训练参数
        w
        w
        w
        的加权
      • Step 4:层数的迭代
  • 三:总结

一:GCN与GNN的区别

GNN指的是图神经网络,而GCN指的是图卷积网络。在本人另一篇文章中详细讲解了GNN的应用背景和工作原理,在此不再赘述,今天主要讲解GCN。

有人一听到“卷积”就两眼冒金光,于是CNN中的卷积操作便涌上脑中,但在我看来此卷积非彼卷积,完全不是一码事,只是说GCN也可以做多层罢了。。。如下图:
浅谈GCN

话不多说,下面我将分步对GCN原理进行讲解。

二:GCN原理

※※先附上GCN的核心计算公式:
浅谈GCN
接下来,我将带领大家分步骤理解该公式。

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

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

Step2:进行特征计算

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

① 邻接矩阵的改变

邻接矩阵
A
A
A
没有考虑自身的加权,所以GCN中的邻接矩阵实际上等于
A
A
A
+单位对角矩阵
I
I
I

浅谈GCN

② 度矩阵的改变

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

同时,归一化的系数还开了根号,就是因为考虑到归一化后的行和列系数都加权给了节点特征,均衡一点。
浅谈GCN
浅谈GCN
浅谈GCN
浅谈GCN
浅谈GCN

③ Attention机制

在部分GCN中,还会引入注意力机制,根据关联节点的重要性来分配权重,最后乘到邻接矩阵上。传统计算权重的方法有两种,第一种方法,两节点特征向量直接相乘,关联节点都算完后,经过softmax算出权重值。还有第二种方法,就是将本节点和关联节点拼接成一个特征向量后,传入FC中,最后经过softmax算出权重值。如图所示:
浅谈GCN
浅谈GCN

Step3:训练参数
w
w
w
的加权

进行完聚合操作后,新的节点特征向量再乘上
w
w
w
,往往会改变一下特征的维度,具体见下图:
浅谈GCN

Step 4:层数的迭代

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

正如六度分割空间理论——“只需6个人,你就可以认识全世界”,见下图所示:
浅谈GCN

三:总结

可见,GCN中加入了许多不同于传统GNN的新元素,达到的效果也是很好的。github上也有相关的GCN工具包,安装好后便可直接使用,附上链接工具包地址


  至此我对GCN的基本概念和工作原理,进行了简单讲解,希望对大家有所帮助,有不懂的地方或者建议,欢迎大家在下方留言评论。

我是努力在CV泥潭中摸爬滚打的江南咸鱼,我们一起努力,不留遗憾!