通俗理解图卷积神经网络(GCN)

写完昨天那篇GNN博客,我其实觉得有些困惑,为什么?

首先,我在那篇博客里讲了什么是GNN层,就是一个用来处理图这种数据结构的神经网络,具体来说,就是保留点与边关系不发生变化,而单独对点、边以及图的特征做单独的处理,比较简单的方法就是使用三个MLP,分别让所有的点、边各自共享两个MLP,整张图单独使用一个MLP。到这个地方,当然了,与卷积神经网络还没有什么关系,你听我继续往下说。

我们为这层网络加入一些信息交换,比如点在通过MLP后汇聚之前,我们让他学到它相邻点的特征,或者我们让点学到边的特征,或者我们可以让边学到点的特征,或者我们也可以让点或者边学到整张图的整体特征等等,我们有各种组合方案,详见我的上一篇博客

GNN通俗理解

问题在于,这为什么单纯的叫GNN?学*临*点的特征,这其实已经把卷积的思想拿过来使用了,只不过卷积有窗口的概念,对学*到的临*的特征有一个权重的倾向,而我们单纯地使用GNN做信息传递,没有这个权重的概念,因为我们没办法用一个规则的东西去赋权重,因为每个点相邻的点的数量是不固定的。但是,一旦我们加入一些attention的概念,让这些点在汇聚之前有一个加权的过程,那这不就是妥妥的卷积神经网络吗?

其实啊,和我想的也大差不差,在直觉上这么理解是完全没问题的,但是今天我们就是要看一看公式。

 

在此之前,我们先理解一个更加简单的东西,公式为:

 

 在这个里面,A是邻接矩阵,H是点的特征矩阵,那么这么一个公式,就是一个很常规的网络啦。具体做了什么?我们简单的画一下:

 

 可以看到,A作为一个邻接矩阵,H作为一个点的特征矩阵,我们用A乘以H,其实就是对每一个点的特征做了一次更新,而这种更新体现在对其周围相连点的求和上,有点类似Transformer的selfattention了。

但是我们考虑到一个问题,就是说,这个操作虽然会对点周围的点做一个特征的汇聚(求和),但是,他把自己的特征弄丢了啊!因为邻接矩阵对角线为0,所以在求和的时候,我们不会求自己的和,如我笔记中的“1”号node。那怎么办?加一个单位矩阵就可以给“自己”置为1,这样汇聚的时候就可以算上自己。

但是,我们没有标准化,或者说归一化,这样子直接矩阵乘法,得到的新的矩阵的特征分布会被改变,因此我们要对这个矩阵做一个标准化处理。首先让A的每一行加起来为1,可以通过乘以一个度矩阵的逆来实现。(所谓的度矩阵其实就是一个对角阵,每个对角线上的数值代表当前这个点的度数)。而把度矩阵拆开,与A相乘,就可以得到一个对称的归一化矩阵了,那这样的话,最终我们就能得到整体的图卷积神经网络的公式:

 换句话说,我们需要让A这个邻接矩阵,变成一个归一化的矩阵,行和为1,列和也为1.那当然是求*均了,因此就出现了度矩阵的逆矩阵乘法,这样可以让A矩阵的行和为1.

 

 但是这仍然存在一个问题,就是说,我的行和为1了,但是我的列和不为1,那我在计算每个维度特征和的时候,它就是一个不归一的结果,那这就会导致我某些值比较大的特征越来越大,值比较小的特征维度越来越小,因此我们需要从A矩阵后面再次乘以一个D矩阵的逆:

 

 这样,我们得到的结果就是一个行和列和都是1的权重矩阵A了,就可以做乘法了。但是我们求*均了两次,因此度矩阵需要的不是单纯的逆矩阵,而是改成二分之一次幂。

 在输入层,H就是X。

和卷积神经网络不同的是,卷积神经网络的卷积核是很重要的汇聚特征时的对特征做的权重分配,这个权重是训练出来的,但是GCN却是写死在网络中的,这个权重不能被训练。因为点和点的关系是被边决定的,边的权重决定了一个点的邻居谁更重要,因此没办法也不应该有一个可以被训练的权重矩阵。

 

 

原文里有一段很牛逼的话术:

 

 

 即使不训练,完全使用随机初始化的参数W,GCN提取出来的特征就以及十分优秀了!这跟CNN不训练是完全不一样的,后者不训练是根本得不到什么有效特征的。

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

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

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

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

 

其他关于GCN的点滴:

  1. 对于很多网络,我们可能没有节点的特征,这个时候可以使用GCN吗?答案是可以的,如论文中作者对那个俱乐部网络,采用的方法就是用单位矩阵 I 替换特征矩阵 X。
  2. 我没有任何的节点类别的标注,或者什么其他的标注信息,可以使用GCN吗?当然,就如前面讲的,不训练的GCN,也可以用来提取graph embedding,而且效果还不错。
  3. GCN网络的层数多少比较好?论文的作者做过GCN网络深度的对比研究,在他们的实验中发现,GCN层数不宜多,2-3层的效果就很好了。

 

参考:

何时能懂你的心——图卷积神经网络(GCN) https://zhuanlan.zhihu.com/p/71200936

图卷积神经网络GCN:https://zhuanlan.zhihu.com/p/540707208

 

不能说的秘密:

*期*成系奥特曼的人气越来越高,严重影响了学生的学*和生活。

学*吗?我的天哪太*了,*摊费用吧

posted @ 2023-03-10 18:09  爱和九九  阅读(823)  评论(0编辑  收藏  举报