大名鼎鼎的GCN的论文,由于这篇论文相当的出名,并且有很多大手子的详细的解读,我就不在这里班门弄斧,摆公式列理论啥的分析论文了,仅仅写一些个人的理解。
阅读这篇论文的时间点大概是在2019年11月左右,当时ITAG的改进方案没有头绪,导师让我尝试一下将GCN塞到ITAG的中去,理由是itag只利用了文本本身的信息,而GCN利用了数据之间的结构信息,因而如果能同时利用这两个信息,应该能提升tag推荐的效果。
从图神经网络(GNN)开始
神经网络这东西有各种结构的,线性的、非线性的,但归根结底,神经网络是在各个节点间进行数据交换,并交换时进行一定的计算。因而,自然也有人使用图(graph)结构来构建神经网络。


通过聚合周围邻居节点的信息,可以增加当前节点的信息量,这点和图片的卷积依然很类似。另外,由于图的结构是不规整的,哪怕节点本身不含有任何信息,图的结构就已经包含一些信息。例如:

图中的节点的分类实际上可以由人眼从结构中直接看出来。
事实上,GCN有两个信息流通途径,一种是节点本身带有的有效信息的,在这个信息路径下,GCN主要起到的的是聚合邻域信息的作用,通过和附近的节点交换信息。使得在空间上接近的节点拥有类似的特征。
另一个信息路径是,哪怕节点本身完全不含有任何有效特征,只进行随机初始化,GCN也能挖掘隐藏在图结构中的信息,最终令同类节点获得类似的特征。方法一二的出发点是完全不同,但最终的目的是一样的,GCN能同时聚合这两类信息。
图神经网络的本质就是:图中的任何一个节点,都受到和它相连的其他节点的影响,距离越近,影响越大。而一个图中的所有节点间的互动关系,和每个节点本身的信息,就构成了这整张图的全部信息。
GCN的创新点
由于CNN已经是个相当成熟的技术了,聚合“邻居”的信息并不是什么少见的思路。显然,从GNN出现开始,就必然会有人尝试在GNN上进行类似CNN的“聚合节点信息”操作。事实上在GCN之前,就已经有一些关于类似的研究了。但不外乎存在计算量大、聚合效果差、卷积核复杂的问题。
GCN的创新之处在于,提出了一种简化到在计算量上可行且效果好的“卷积”计算方案。
这个部分,网上能找到许多大手子对于这个卷积方案的推导和证明,GCN论文前面的大部分内容也是在进行这个工作:从拉普拉斯变换推出GCN滤波器,并且证明能用这个滤波器来进行快速逼近卷积。
我懒外加底力有限,就不在这里推一遍GCN的公式了。而选择直接逼近的本质:这个滤波器干了啥,以及怎么用。
GCN计算流程
图的信息传播
首先定义图的组成,一张图由两个要素组成,图中的点和边,有了一张图中的所有的点和边的信息,自然就能描述一张图。
在GCN中,图中所有的点的信息依靠一个特征矩阵X进行表示。X为NxD维,N为节点个数,D为每个节点的特征个数。而边信息通过邻接矩阵A进行表示,邻接矩阵为NxN维。
这样可以将每层图的计算写成一个函数形式

其中A是邻接矩阵,H是每层的节点信息,l是层数,f(,)是计算规则。
这个公式的意思是,通过一定的运算规则,结合本层的各节点状态,和节点间的关系,获得下一层的节点状态。在整个计算过程中,节点间的关系(边)是不发生变化的。
而GCN(以及其他图的信息传播算法)的重点就是这个计算规则。
GCN的信息传播规则
GCN定义了这样一个层间的传播规则

其中,H是每层的节点信息,W是每层的节点权重(需要进行学习),A~是通过邻接矩阵计算出的一个滤波矩阵。而:

其中

上式只是对邻接矩阵添加了自连接。之所以添加自连接,是因为如果不添加自连接,则层间传播只会聚合邻居节点的信息,而不会使用节点自身的信息。
而D^是A~的对角节点度矩阵,计算公式如下:

简单来说,就是GCN利用邻接矩阵算出了这个滤波矩阵,然后利用这个滤波矩阵进行层间传播
至于啥是滤波矩阵,为什么作者用了这个东西进行计算,就涉及到GCN的数学推论部分了,这是GCN的核心创新点。作者从拉普拉斯变换出发,推出了这个滤波矩阵,并证明了其有效性,这也是许多人看的头大的地方。
但如果只是想用GCN的话,也不是非要看懂。A~和D^的计算本身都不难,可以自己实现,进而自己实现整个GCN也不会太难。如果连A~和D^的计算代码都完不成,常见的集成了GCN的包都内置了这个滤波矩阵的计算方法,只需要传入邻接矩阵即可。
GCN的输出
GCN的重点就是上面的传播规则,几乎可以说是唯一的重点。剩下的工作就是利用聚合后的信息。
GCN的信息聚合通常进行两到三次,作者的实验表明,叠加更多的GCN层无益于性能提升,甚至是有害的,如果有必要叠加较多GCN层,建议使用残差连接——这也是模仿了CNN中的残差连接。
在完成数层GCN的计算后,会获得一张图,图的结构和最初输入的一样,但每个节点的特征值已经发生了很大的改变,这些改变后的特征值既隐含了每个节点周围节点信息,也隐含了每个节点和邻居节点间的结构信息。接下来就是对获得的特征值进行后续计算。
仅考虑作者在本论文中进行的相关工作的话(包括作者在其一篇博客文章中对于GCN的分析),作者没有进行复杂的后续计算,而是直接通过softmax输出了结果。而后续的针对GCN的一些改良有出现许多使用了复杂输出的模型。
实验结果、baseline的分析等就不进行了。