初入图神经网络,记录其中的一些理论知识。
上一篇文章中简单的介绍了几种与图数据相关的名词以及它们之间的联系与区别,这篇文章中主要介绍图卷积神经网络(GCN)的实现原理。
图卷积操作的思想实际上是直接受到卷积操作的影响而来,将二者对比学习,比直接啃理论公式要好理解的多,要理解图卷积网络的核心操作图卷积,可以类比卷积在CNN的地位。
1、卷积
我们来看一个最简单的例子:“边界检测(edge detection)”,假设我们有这样的一张图片,大小8×8:
图片中的数字代表该位置的像素值,我们知道,像素值越大,颜色越亮,所以为了示意,我们把右边小像素的地方画成深色。图的中间两个颜色的分界线就是我们要检测的边界。
怎么检测这个边界呢?我们可以设计这样的一个 滤波器(filter,也称为kernel),大小3×3:
然后,我们用这个filter,往我们的图片上“盖”,覆盖一块跟filter一样大的区域之后,对应元素相乘,然后求和。计算一个区域之后,就向其他区域挪动,接着计算,直到把原图片的每一个角落都覆盖到了为止。这个过程就是 “卷积”。
(我们不用管卷积在数学上到底是指什么运算,我们只用知道在CNN中是怎么计算的。)
这里的“挪动”,就涉及到一个步长了,假如我们的步长是1,那么覆盖了一个地方之后,就挪一格,容易知道,总共可以覆盖6×6个不同的区域。
那么,我们将这6×6个区域的卷积结果,拼成一个矩阵:
这个图片,中间颜色浅,两边颜色深,这说明咱们的原图片中间的边界,在这里被反映出来了!
从上面这个例子中,我们发现,我们可以通过设计特定的filter,让它去跟图片做卷积,就可以识别出图片中的某些特征,比如边界。用随机的共享的卷积核得到像素点的加权和从而提取到某种特定的特征,然后用反向传播来优化卷积核参数就可以自动的提取特征,是CNN特征提取的基石 。
然而,现实中 更多重要的数据集都是用图的形式存储的,例如社交网络信息,知识图谱,蛋白质网络,万维网等等。这些图网络的形式并不像图像,是排列整齐的矩阵形式,而是非结构化的信息,那有没有类似图像领域的卷积一样,有一个通用的范式来进行图特征的抽取呢 ?这就是图卷积在图卷积网络中的意义。
对于大多数图模型,有一种类似通式的存在,这些模型统称GCNs。因此可以说,图卷积是处理非结构化数据的大利器,随着这方面研究的逐步深入,人类对知识领域的处理必将不再局限于结构化数据( CV,NLP),会有更多的目光转向这一存在范围更加广泛,涵盖意义更为丰富的知识领域。
2、图卷积
在学习图卷积之前,需要先了解相关的一些基本知识。
(1)图的定义:
对于图 G = ( V , E ) G = (V,E) G=(V,E), V V V为节点的集合, E E E 为边的集合,对于每个节点 i i i,均有其特征 x i x_{i} xi ,可以用矩阵 X N ∗ D {X^{N*D}} XN∗D表示。其中 N N N表示节点数, D D D表示每个节点的特征数,也可以说是特征向量的维度。
(2)拉普拉斯矩阵的定义和使用原因:
定义:
与图相关的矩阵,我们最熟悉的莫过于邻接矩阵了,但在这里主要介绍一种名叫拉普拉斯的矩阵,其实就我本人感觉,这两种矩阵本质上是一样的,都是来刻画当前节点与邻居节点的关系的。举个简单的例子,对于下图中的左图(为了简单起见,举了无向图且边没有权重的例子)而言,它的度矩阵 D D D,邻接矩阵 A A A 和拉普拉斯矩阵 L L L分别如下图所示,度矩阵 D D D只有对角线上有值,为对应节点的度,其余为0;邻接矩阵 A A A只有在有边连接的两个节点之间为1,其余地方为0;拉普拉斯矩阵 L L L的定义为: D − A D-A D−A 。
这里要说明的是:常用的拉普拉斯矩阵实际有三种:
No.1: L = D − A L=D-A L=D−A,更专业的名称叫Combinatorial Laplacian;
No.2: L s y s = D − 1 / 2 L D − 1 / 2 L^{sys} =D^{−1/2} LD^{−1/2} Lsys=D−1/2LD−1/2,定义的叫Symmetric normalized Laplacian,很多GCN的论文中应用的是这种拉普拉斯矩阵;这里的 D − 1 / 2 L D − 1 / 2 D^{-1/2}LD^{-1/2} D−1/2LD−1/2就是对 L L L归一化,至于为什么两边乘以一个矩阵的逆就归一化了?这里需要复习到矩阵取逆的本质是做什么。
我们回顾下矩阵的逆的定义,对于式子 A ∗ X = B A*X=B A∗X=B ,假如我们希望求矩阵 X X X,那么当然是令等式两边都乘以 A − 1 A^{-1} A−1 ,然后式子就变成了 X = A − 1 ∗ A ∗ X = A − 1 ∗ B X=A^{-1}*A*X=A^{-1}*B X=A−1∗A∗X=A−1∗B 。
举个例子对于,单个节点运算来说,做归一化就是除以它节点的度,这样每一条邻接边信息传递的值就被规范化了,不会因为某一个节点有10条边而另一个只有1条边导致前者的影响力比后者大,因为做完归一化后者的权重只有0.1了,从单个节点上升到二维矩阵的运算,就是对矩阵求逆了,乘以矩阵的逆的本质,就是做矩阵除法完成归一化。但左右分别乘以节点 i i i, j j j度的开方,就是考虑一条边的两边的点的度。
具体到每一个节点(拉普拉斯矩阵的元素级的定义),对结点 i i i, j j j,矩阵中的元素由下面的式子给出(对于无向无权图):
其中 d e g ( v i ) deg(v_i) deg(vi), d e g ( v j ) deg(v_j) deg(vj)分别为节点 i i i, j j j的度,也就是度矩阵在节点 i i i, j j j处的值。
No.3: L r w = D − 1 L , 定 义 的 叫 R a n d o m w a l k n o r m a l i z e d L a p l a c i a n L^{rw}=D^{−1}L ,定义的叫Random walk normalized Laplacian Lrw=D−1L,定义的叫RandomwalknormalizedLaplacian
为什么GCN要用拉普拉斯矩阵?
知乎上大神的回答:
(1)拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解);
(2)拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0;
3)通过拉普拉斯算子与拉普拉斯矩阵进行类比。
(3)图卷积:
图卷积网络将卷积运算从传统数据(例如图像,结构化数据)推广到图数据(非结构化数据)。其核心思想是:学习一个函数映射 f f f ,通过该映射图中的节点 v i v_{i} vi可以聚合它自己的特征(向量) x i x_{i} xi与它邻居的特征 x j x_{j} xj( j ∈ N ( v i ) j \in N(vi) j∈N(vi))来生成节点 v i v_{i} vi的新表示。图卷积网络是许多复杂图神经网络模型的基础,包括基于自动编码器的模型、生成模型和时空网络等。下图直观地展示了图卷积神经网络学习节点表示的步骤。
图卷积神经网络模型大体流程如上图所示,接下来看看具体是如何实现的。
GCN方法又可以分为两大类,基于频谱(spectral-based)和基于空间(spatial-based)。基于频谱的方法从图信号处理的角度引入滤波器来定义图卷积,其中图卷积操作被解释为从图信号中去除噪声。基于空间的方法将图卷积表示为从邻域聚合特征信息,当图卷积网络的算法在节点层次运行时,图池化模块可以与图卷积层交错,将图粗化为高级子结构。如下图所示,这种架构设计可用于提取图的各级表示和执行图分类任务。
接下来分别从频域和空间两个角度来理解。
Spectral-based Graph Convolutional Networks(基于频谱)
在信号处理中,通过引入傅里叶变换将时域信号转换到频域进行分析,进而可以完成一些我们在时域上无法完成的操作,基于频谱的图卷积网络的核心思想正是来源于此。
在基于频谱的图神经网络中,图被假定为无向图,无向图的一种鲁棒(稳定)数学表示是正则化(规范化)图拉普拉斯矩阵,即 L s y s = D − 1 / 2 L D − 1 / 2 L^{sys} =D^{−1/2} LD^{−1/2} Lsys=D−1/2LD−1/2其中 L = D − A L=D-A L=D−A, D D D为度矩阵, A A A为邻接矩阵。
正则化图拉普拉斯矩阵具有实对称半正定的性质。利用这个性质,正则化拉普拉斯矩阵可以特征分解(也叫谱分解)为: L = U Λ U − 1 = U Λ U T L = U\Lambda U^{-1}= U\Lambda U^T L=UΛU−1=UΛUT其中, U = [ u 0 , u 1 , . . . u n − 1 , ] ∈ R N ∗ N U=[u_0,u_1,...u_{n-1},] \in R^{N*N} U=[u0,u1,...un−1,]∈RN∗N,(特征分解最右边的是特征矩阵的逆,只是拉普拉斯矩阵的性质才可以写成特征矩阵的转置)。
U是由L的特征向量构成的矩阵, Λ \Lambda Λ是对角矩阵,对角线上的值为 L L L的特征值。正则化拉普拉斯矩阵的特征向量构成了一组正交基(U中的特征向量两两正交)。
在图信号处理过程中,一个图的信号: X ∈ R N X\in R^N X∈RN是一个由图的各个节点组成的特征向量, x i x_i xi表示第 i i i个节点。
对图X的傅里叶变换由此被定义为: F ( X ) = U T X F(X)=U^TX F(X)=UTX傅里叶反变换则为: F − 1 ( X ^ ) = U X ^ F^{-1}(\hat X)=U\hat X F−1(X^)=UX^其中, X ^ \hat{X} X^为傅立叶变换后的结果。
为了更好地理解图的傅里叶变换,从它的定义我们可以看出,它确实将输入图信号投影到正交空间,在正交空间中,基由正则化图拉普拉斯矩阵 L L L的特征向量构成。
转换后得到的信号 X ^ \hat{X} X^的元素是新空间(正交空间)中图信号的坐标,因此原来的输入信号可以表示为: X = ∑ i = 0 n − 1 x ^ i u i = U X ^ X=\sum\limits_{i = 0}^{n - 1} { {\hat x_i}{u_i}} =U\hat{X} X=i=0∑n−1x^iui=UX^正是傅里叶反变换的结果。
输入信号 X X X(图)的图卷积是怎么定义的呢?
对图上进行卷积,即为卷积核 h h h与图 X X X进行卷积运算,换言之,我们的目的是求函数