“ 本文的内容包括图卷积的基础知识以及相关辅助理解的知识点,相信同学们看完后一定能平滑上手理解GCN!”
作者:苘郁蓁
来源:知乎专栏 郁蓁的机器学习笔记。
编辑:happyGirl
具体来说,本文包括什么:
本文不包括
一文读懂系列文章:
《一文读懂Transformer和Attention》(https://zhuanlan.zhihu.com/p/90033981) 《一文读懂残差网络ResNet》(https://zhuanlan.zhihu.com/p/91385516)
图神经网络GNN相关系列文章:
《什么是Weisfeiler-Lehman(WL)算法和WL Test?》 (https://zhuanlan.zhihu.com/p/90645716)
《图神经网络库PyTorch geometric(PYG)零基础上手教程》 (https://zhuanlan.zhihu.com/p/91229616)
在最开始,我们先梳理一下经常被提到的几个术语的区别和联系,也就是Graph Embedding,Graph Neural Network和Graph Convolutional Network的区别和联系是什么。
图嵌入(Graph Embedding/Network Embedding,GE),属于表示学习的范畴,也可以叫做网络嵌入,图表示学习,网络表示学习等等。通常有两个层次的含义:
图嵌入的方式主要有三种:
图神经网络(Graph Neural Network, GNN)是指神经网络在图上应用的模型的统称,根据采用的技术不同和分类方法的不同,又可以分为下图中的不同种类,例如从传播的方式来看,图神经网络可以分为图卷积神经网络(GCN),图注意力网络(GAT,缩写为了跟GAN区分),Graph LSTM等等,本质上还是把文本图像的那一套网络结构技巧借鉴过来做了新的尝试。但在这篇文章中并不会细细介绍下面的每一种,作为入门篇,我们着重理解最经典和最有意义的基础模型GCN,这也是理解其他模型的基础。
图卷积神经网络(Graph Convolutional Network, GCN)正如上面被分类的一样,是一类采用图卷积的神经网络,发展到现在已经有基于最简单的图卷积改进的无数版本,在图网络领域的地位正如同卷积操作在图像处理里的地位。
如图2所示,这三个比较绕的概念可以用一句话来概括:图卷积神经网络GCN属于图神经网络GNN的一类,是采用卷积操作的图神经网络,可以应用于图嵌入GE。
要理解图卷积网络的核心操作图卷积,可以类比卷积在CNN的地位。
如下图所示,数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。
用随机的共享的卷积核得到像素点的加权和从而提取到某种特定的特征,然后用反向传播来优化卷积核参数就可以自动的提取特征,是CNN特征提取的基石 。
然而,现实中 更多重要的数据集都是用图的形式存储的,例如社交网络信息,知识图谱,蛋白质网络,万维网等等。这些图网络的形式并不像图像,是排列整齐的矩阵形式,而是非结构化的信息,那有没有类似图像领域的卷积一样,有一个通用的范式来进行图特征的抽取呢 ?这就是图卷积在图卷积网络中的意义。
对于大多数图模型,有一种类似通式的存在,这些模型统称GCNs。因此可以说,图卷积是处理非结构化数据的大利器,随着这方面研究的逐步深入,人类对知识领域的处理必将不再局限于结构化数据( CV,NLP),会有更多的目光转向这一存在范围更加广泛,涵盖意义更为丰富的知识领域。
接下来我们就来逐步拆解这个范式。
对于图,我们有以下特征定义:
对于图 , 为节点的集合, 为边的集合,对于每个节点 , 均有其特征 ,可以用矩阵 表示。其中 表示节点数, 表示每个节点的特征数,也可以说是特征向量的维度。
在一头扎进图卷积公式之前,我们先从其他的角度理解一下这个操作的物理含义,有一个形象化的理解,我们在试图得到节点表示的时候,容易想到的最方便有效的手段就是利用它周围的节点,也就是它的邻居节点或者邻居的邻居等等,这种思想可以归结为一句话:
图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。
实际上从邻居节点获取信息的思想在很多领域都有应用,例如word2vec,例如pagerank。关于这个点展开的内容文章[2]有非常详细的解释。
更加细节的如何从傅立叶变换到拉普拉斯算子到拉普拉斯矩阵的数学推倒可以转向博客[7],为了避免数学功底没有那么强的初学者(比如我)被绕晕,我们先建立大纲,不要太发散。
那么有什么东西来度量节点的邻居节点这个关系呢,学过图论的就会自然而然的想到邻接矩阵和拉普拉斯矩阵。举个简单的例子,对于下图中的左图(为了简单起见,举了无向图且边没有权重的例子)而言,它的度矩阵 ,邻接矩阵 和拉普拉斯矩阵 分别如下图所示,度矩阵 只有对角线上有值,为对应节点的度,其余为0;邻接矩阵 只有在有边连接的两个节点之间为1,其余地方为0;拉普拉斯矩阵 为 。但需要注意的是,这是最简单的一种拉普拉斯矩阵,除了这种定义,还有接下来介绍的几种拉普拉斯矩阵。
任何一个图卷积层都可以写成这样一个非线性函数:
为第一层的输入, , 为图的节点个数, 为每个节点特征向量的维度, 为邻接矩阵,不同模型的差异点在于函数 的实现不同。
下面介绍几种具体的实现,但是每一种实现的参数大家都统称拉普拉斯矩阵。
其中 为第 层的权重参数矩阵, 为非线性激活函数,例如ReLU。
这种思路是基于节点特征与其所有邻居节点有关的思想。邻接矩阵 与特征 相乘,等价于,某节点的邻居节点的特征相加。这样多层隐含层叠加,能利用多层邻居的信息。
但这样存在两个问题:
因此实现二和实现三针对这两点进行了优化。
拉普拉斯矩阵 ,学名Combinatorial Laplacian,是针对实现一的问题1的改进:
对于这里的拉普拉斯矩阵 ,学名Symmetric normalized Laplacian,也有论文或者博客写 , 就是一个符号的差别,但本质上还是实现一的两个问题进行的改进:
其中 分别为节点 的度,也就是度矩阵在节点 处的值。
可能有一点比较疑惑的是怎么两边乘以一个矩阵的逆就归一化了? 这里需要复习到矩阵取逆的本质是做什么。
我们回顾下矩阵的逆的定义,对于式子 ,假如我们希望求矩阵X,那么当然是令等式两边都乘以 ,然后式子就变成了 。
举个例子对于,单个节点运算来说,做归一化就是除以它节点的度,这样每一条邻接边信息传递的值就被规范化了,不会因为某一个节点有10条边而另一个只有1条边导致前者的影响力比后者大,因为做完归一化后者的权重只有0.1了,从单个节点上升到二维矩阵的运算,就是对矩阵求逆了,乘以矩阵的逆的本质,就是做矩阵除法完成归一化。但左右分别乘以节点i,j度的开方,就是考虑一条边的两边的点的度。
常见的拉普拉斯矩阵除了以上举的两种,还有 等等[3][4],归一化的方式有差别,根据论文[5]的实验,这些卷积核的形式并没有一种能够在任何场景下比其他的形式效果好,因此在具体使用的时候可以进行多种尝试,但主流的还是实现三,也就是大多数博客提到的。
上面是以矩阵的形式计算,可能会看起来非常让人疑惑,下面从单个节点的角度来重新看下这些个公式(本质是一样的,上文解释过,对于单个节点就是除法,对于矩阵就是乘以度矩阵的逆),对于第 层的节点的特征 ,对于它的邻接节点 , 是节点 的所有邻居节点的集合,可以通过以下公式计算得到:
其中, , , 为 的邻居节点, 为 的度,这跟上面的公式其实是等价的,所以有些地方的公式是这个,有些的上面那个。
码字不易,觉得有收获记得点赞哦~
更多内容,欢迎点击文末阅读原文关注作者的专栏和作者交流!
[1] https:// zhuanlan.zhihu.com/p/77729049 图嵌入的分类
[2] https://www.zhihu.com/question/54504471/answer/630639025 关于图卷积的物理学解释
[3] https://www.zhihu.com/question/54504471/answer/332657604拉普拉斯公式推倒细节,包括谱分解和傅立叶变换
[4] http://tkipf.github.io/graph-convolutional-networks 两篇论文细讲
[5] https://github.com/conferencesub/ICLR_2020各种图卷积核比较
[6] https://persagen.com/files/misc/scarselli2009graph.pdfGNN首次被提出的paper
[7] https://zhuanlan.zhihu.com/p/85287578 拉普拉斯矩阵和拉普拉斯算子的关系
本文转载自公众号:浅梦的学习笔记,作者苘郁蓁
推荐阅读
AI界最危险武器 GPT-2 使用指南:从Finetune到部署
T5 模型:NLP Text-to-Text 预训练模型超大规模探索
BERT 瘦身之路:Distillation,Quantization,Pruning
Transformer (变形金刚,大雾) 三部曲:RNN 的继承者
我们建了一个免费的知识星球:AINLP芝麻街,欢迎来玩,期待一个高质量的NLP问答社区
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。