点击上方“计算机视觉life”,选择“星标”
快速获得最新干货
来源:浅梦的学习笔记
“ 本文的内容包括图卷积的基础知识以及相关辅助理解的知识点,相信同学们看完后一定能平滑上手理解GCN!”
作者:苘郁蓁
来源:知乎专栏 郁蓁的机器学习笔记。
编辑:happyGirl
具体来说,本文包括什么:
在最开始,我们先梳理一下经常被提到的几个术语的区别和联系,也就是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 拉普拉斯矩阵和拉普拉斯算子的关系
欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿、合作也欢迎联系:simiter@126.com
长按关注计算机视觉life
最新AI干货,我在看