文章目录
- 一:GCN与GNN的区别
- 二:GCN原理
-
-
- Step1: 求图模型的邻接矩阵和度矩阵
- Step2:进行特征计算
-
- ① 邻接矩阵的改变
- ② 度矩阵的改变
- ③ Attention机制
- Step3:训练参数
w
w
w 的加权 - Step 4:层数的迭代
-
- 三:总结
一:GCN与GNN的区别
GNN指的是图神经网络,而GCN指的是图卷积网络。在本人另一篇文章中详细讲解了GNN的应用背景和工作原理,在此不再赘述,今天主要讲解GCN。
有人一听到“卷积”就两眼冒金光,于是CNN中的卷积操作便涌上脑中,但在我看来此卷积非彼卷积,完全不是一码事,只是说GCN也可以做多层罢了。。。如下图:
话不多说,下面我将分步对GCN原理进行讲解。
二:GCN原理
※※先附上GCN的核心计算公式:
接下来,我将带领大家分步骤理解该公式。
Step1: 求图模型的邻接矩阵和度矩阵
对于传统的GNN,一个图网络需要节点特征矩阵和邻接矩阵的输入,这样才能进行节点的聚合操作。但是GCN中还需要引入一个度矩阵,这个矩阵用来表示一个节点和多少个节点相关联,对于后面的步骤有巨大的作用,如图所示:
Step2:进行特征计算
求得矩阵
A
,
D
,
X
A,D,X
A,D,X后,进行特征的计算,来聚合邻居节点的信息。GCN中的聚合方式和传统GNN中的方式有较大差异,这里分解为几个细节点:
① 邻接矩阵的改变
邻接矩阵
A
A
A 没有考虑自身的加权,所以GCN中的邻接矩阵实际上等于
A
A
A +单位对角矩阵
I
I
I。
② 度矩阵的改变
首先对度矩阵的行和列进行了归一化(具体格式看下图),为什么这么做呢?行归一化系数代表着节点自身的一个变化程度,关联的节点越少,系数越大,越容易随波主流,更易受别人影响。而列归一化系数,代表关联节点对当前节点的影响程度,关系网越复杂的节点,它对其他节点的作用就越小,比如我认识一个亿万富翁,但富翁认识很多人,我们也就是一面之缘,那么能说因为我和他认识,我就是个百万富翁了嘛,显然有点草率了。通过行和列归一化系数,相互制衡,秒不可言。
同时,归一化的系数还开了根号,就是因为考虑到归一化后的行和列系数都加权给了节点特征,均衡一点。
③ Attention机制
在部分GCN中,还会引入注意力机制,根据关联节点的重要性来分配权重,最后乘到邻接矩阵上。传统计算权重的方法有两种,第一种方法,两节点特征向量直接相乘,关联节点都算完后,经过softmax算出权重值。还有第二种方法,就是将本节点和关联节点拼接成一个特征向量后,传入FC中,最后经过softmax算出权重值。如图所示:
Step3:训练参数
w
w
w 的加权
进行完聚合操作后,新的节点特征向量再乘上
w
w
w,往往会改变一下特征的维度,具体见下图:
Step 4:层数的迭代
接下来重复step1~3,每重复一次算一层,GCN正常只需要3–5层即可,这里就和CNN、RNN很不一样。因为节点每更新一次,感受野就变大一些,如果网络太深,那么每个节点就会受无关节点的影响,效果反而下降。
正如六度分割空间理论——“只需6个人,你就可以认识全世界”,见下图所示:
三:总结
可见,GCN中加入了许多不同于传统GNN的新元素,达到的效果也是很好的。github上也有相关的GCN工具包,安装好后便可直接使用,附上链接工具包地址
至此我对GCN的基本概念和工作原理,进行了简单讲解,希望对大家有所帮助,有不懂的地方或者建议,欢迎大家在下方留言评论。
我是努力在CV泥潭中摸爬滚打的江南咸鱼,我们一起努力,不留遗憾!