图神经网络——(2)图卷积神经网络

初入图神经网络,记录其中的一些理论知识。
图神经网络——(2)图卷积神经网络_第1张图片

       上一篇文章中简单的介绍了几种与图数据相关的名词以及它们之间的联系与区别,这篇文章中主要介绍图卷积神经网络(GCN)的实现原理。

       图卷积操作的思想实际上是直接受到卷积操作的影响而来,将二者对比学习,比直接啃理论公式要好理解的多,要理解图卷积网络的核心操作图卷积,可以类比卷积在CNN的地位。

1、卷积

       我们来看一个最简单的例子:“边界检测(edge detection)”,假设我们有这样的一张图片,大小8×8:
图神经网络——(2)图卷积神经网络_第2张图片
图片中的数字代表该位置的像素值,我们知道,像素值越大,颜色越亮,所以为了示意,我们把右边小像素的地方画成深色。图的中间两个颜色的分界线就是我们要检测的边界。
怎么检测这个边界呢?我们可以设计这样的一个 滤波器(filter,也称为kernel),大小3×3:
图神经网络——(2)图卷积神经网络_第3张图片
然后,我们用这个filter,往我们的图片上“盖”,覆盖一块跟filter一样大的区域之后,对应元素相乘,然后求和。计算一个区域之后,就向其他区域挪动,接着计算,直到把原图片的每一个角落都覆盖到了为止。这个过程就是 “卷积”。
(我们不用管卷积在数学上到底是指什么运算,我们只用知道在CNN中是怎么计算的。)
这里的“挪动”,就涉及到一个步长了,假如我们的步长是1,那么覆盖了一个地方之后,就挪一格,容易知道,总共可以覆盖6×6个不同的区域。

那么,我们将这6×6个区域的卷积结果,拼成一个矩阵:
图神经网络——(2)图卷积神经网络_第4张图片
这个图片,中间颜色浅,两边颜色深,这说明咱们的原图片中间的边界,在这里被反映出来了!

从上面这个例子中,我们发现,我们可以通过设计特定的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}} XND表示。其中 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 DA
图神经网络——(2)图卷积神经网络_第5张图片
这里要说明的是:常用的拉普拉斯矩阵实际有三种:
No.1 L = D − A L=D-A L=DA,更专业的名称叫Combinatorial Laplacian;

No.2 L s y s = D − 1 / 2 L D − 1 / 2 L^{sys} =D^{−1/2} LD^{−1/2} Lsys=D1/2LD1/2,定义的叫Symmetric normalized Laplacian,很多GCN的论文中应用的是这种拉普拉斯矩阵;这里的 D − 1 / 2 L D − 1 / 2 D^{-1/2}LD^{-1/2} D1/2LD1/2就是对 L L L归一化,至于为什么两边乘以一个矩阵的逆就归一化了?这里需要复习到矩阵取逆的本质是做什么。
我们回顾下矩阵的逆的定义,对于式子 A ∗ X = B A*X=B AX=B ,假如我们希望求矩阵 X X X,那么当然是令等式两边都乘以 A − 1 A^{-1} A1 ,然后式子就变成了 X = A − 1 ∗ A ∗ X = A − 1 ∗ B X=A^{-1}*A*X=A^{-1}*B X=A1AX=A1B
举个例子对于,单个节点运算来说,做归一化就是除以它节点的度,这样每一条邻接边信息传递的值就被规范化了,不会因为某一个节点有10条边而另一个只有1条边导致前者的影响力比后者大,因为做完归一化后者的权重只有0.1了,从单个节点上升到二维矩阵的运算,就是对矩阵求逆了,乘以矩阵的逆的本质,就是做矩阵除法完成归一化。但左右分别乘以节点 i i i, j j j度的开方,就是考虑一条边的两边的点的度。
具体到每一个节点(拉普拉斯矩阵的元素级的定义),对结点 i i i, j j j,矩阵中的元素由下面的式子给出(对于无向无权图):
图神经网络——(2)图卷积神经网络_第6张图片
其中 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=D1LRandomwalknormalizedLaplacian

为什么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) jN(vi))来生成节点 v i v_{i} vi的新表示。图卷积网络是许多复杂图神经网络模型的基础,包括基于自动编码器的模型、生成模型和时空网络等。下图直观地展示了图卷积神经网络学习节点表示的步骤。
图神经网络——(2)图卷积神经网络_第7张图片
图卷积神经网络模型大体流程如上图所示,接下来看看具体是如何实现的。
       GCN方法又可以分为两大类,基于频谱(spectral-based)和基于空间(spatial-based)。基于频谱的方法从图信号处理的角度引入滤波器来定义图卷积,其中图卷积操作被解释为从图信号中去除噪声。基于空间的方法将图卷积表示为从邻域聚合特征信息,当图卷积网络的算法在节点层次运行时,图池化模块可以与图卷积层交错,将图粗化为高级子结构。如下图所示,这种架构设计可用于提取图的各级表示和执行图分类任务。
图神经网络——(2)图卷积神经网络_第8张图片
接下来分别从频域和空间两个角度来理解。

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=D1/2LD1/2其中 L = D − A L=D-A L=DA, D D D为度矩阵, A A A为邻接矩阵。

正则化图拉普拉斯矩阵具有实对称半正定的性质。利用这个性质,正则化拉普拉斯矩阵可以特征分解(也叫谱分解)为: L = U Λ U − 1 = U Λ U T L = U\Lambda U^{-1}= U\Lambda U^T L=UΛU1=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,...un1,]RNN,(特征分解最右边的是特征矩阵的逆,只是拉普拉斯矩阵的性质才可以写成特征矩阵的转置)。

U是由L的特征向量构成的矩阵, Λ \Lambda Λ是对角矩阵,对角线上的值为 L L L的特征值。正则化拉普拉斯矩阵的特征向量构成了一组正交基(U中的特征向量两两正交)。

在图信号处理过程中,一个图的信号: X ∈ R N X\in R^N XRN是一个由图的各个节点组成的特征向量, 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 F1(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=0n1x^iui=UX^正是傅里叶反变换的结果。

输入信号 X X X(图)的图卷积是怎么定义的呢?

对图上进行卷积,即为卷积核 h h h与图 X X X进行卷积运算,换言之,我们的目的是求函数 h ( t ) h(t) h(t) X X X的卷积。

卷积定理: F ( f 1 ( t ) ∗ f 2 ( t ) ) = F 1 ( w ) ⋅ F 2 ( w ) F(f_1(t)*f_2(t))=F_1(w)⋅F_2(w) F(f1(t)f2(t))=F1(w)F2(w)
卷积定理定义:函数卷积的傅里叶变换是函数傅立叶变换的乘积。
因此,函数 h ( t ) h(t) h(t) X X X的卷积是其函数傅立叶变换乘积的傅立叶逆变换为: X ∗ h = F − 1 ( X ^ h ^ ) X∗h=F^{−1}(\hat X \hat h) Xh=F1(X^h^)由前面我们知道, X = U T X ^ X=U^T \hat X X=UTX^,可以很容易的得出 X ^ = U T X \hat X=U^T X X^=UTX(拉普拉斯矩阵性质得出 U − 1 = U T U^{-1}=U^T U1=UT), h ^ \hat h h^的矩阵形式为:
h ^ = [ h ^ ( λ 0 ) ⋱ h ^ ( λ n − 1 ) ] \hat h=\left[ \begin{matrix} \hat h(\lambda_0 ) \\ {}& \ddots &{} \\ & & \hat h(\lambda_{n-1}) \end{matrix} \right] h^=h^(λ0)h^(λn1)
则两者的傅立叶变换乘积即为:
X ^ h ^ = [ h ^ ( λ 0 ) ⋱ h ^ ( λ n − 1 ) ] U T X \hat X\hat h= \left[ \begin{matrix} \hat h(\lambda_0 ) \\ {}& \ddots &{} \\ & & \hat h(\lambda_{n-1}) \end{matrix} \right] U^TX X^h^=h^(λ0)h^(λn1)UTX
再乘以 U U U求两者傅立叶变换乘积的逆变换,则求出卷积:
( X ∗ h ) G = U [ h ^ ( λ 0 ) ⋱ h ^ ( λ n − 1 ) ] U T X (X*h)_G=U \left[ \begin{matrix} \hat h(\lambda_0 ) \\ {}& \ddots &{} \\ & & \hat h(\lambda_{n-1}) \end{matrix} \right] U^TX (Xh)G=Uh^(λ0)h^(λn1)UTX
上式可写为如下的形式:
( X ∗ h ) G = F − 1 ( F ( X ) ⊙ F ( h ) ) = U ( ( U T X ) ⊙ ( U T h ) ) (X*h)_G=F^{-1}(F(X) \odot F(h))=U((U^TX)\odot (U^Th)) (Xh)G=F1(F(X)F(h))=U((UTX)(UTh))其中, h ∈ R N h \in R^{N} hRN是我们定义的卷积核(滤波器); ⊙ \odot 表示Hadamard product(哈达玛积),对于两个维度相同的向量、矩阵、张量进行对应位置的逐元素乘积运算,下标 G _G G就表示图的意思(我觉得没必要写,看别人的卡在这里半天,心态崩了)。

基于频谱的图卷积网络都遵循这样的模式,它们之间关键的不同点在于选择的卷积核不同,那么卷积核 h h h怎么设定?
这里的卷积核的设定,可以看我引用的参考文献[5],具体内容如下(只看了前两个):

第一种:

将卷积核 d i a g ( h ^ ( λ l ) ) diag(\hat h(\lambda_l )) diag(h^(λl))设置成 d i a g ( θ l ) diag(\theta_l ) diag(θl),于是我们的卷积层为: y o u t p u t = ∂ ( U d i a g ( θ ) U T X ) y_{output}=\partial(Udiag(\theta)U^TX) youtput=(Udiag(θ)UTX)
其中, ∂ ( . ) \partial(.) (.)为激活函数, y o u t p u t y_{output} youtput为一个卷积层的输出, d i a g diag diag为对角矩阵, θ = ( θ 0 , θ 1 . . . , θ n − 1 ) \theta =(\theta_0,\theta_1...,\theta_{n-1}) θ=(θ0,θ1...,θn1)就跟三层神经网络中的weight一样是任意的参数,通过初始化赋值然后利用误差反向传播进行调整。原文[4]中对上面公式进行了推导,使得等价于另一个公式,然后分析出了优缺点。

第二种:

由于在卷积
( X ∗ h ) G = U [ h ^ ( λ 0 ) ⋱ h ^ ( λ n − 1 ) ] U T X (X*h)_G=U \left[ \begin{matrix} \hat h(\lambda_0 ) \\ {}& \ddots &{} \\ & & \hat h(\lambda_{n-1}) \end{matrix} \right] U^TX (Xh)G=Uh^(λ0)h^(λn1)UTX
中,计算的复杂度是非常高的,涉及到求Laplacian矩阵的特征向量,和大量的矩阵计算。因此作者Kipf对上式进行了近似推导(好像是用雪比契夫二项式进行了近视估计,数学不好的我赶紧略去,可以看我引用的参考文献[6][7]),然后得到如下公式: H l + 1 = ∂ ( D − 1 / 2 A D − 1 / 2 H l W l ) H^{l+1}=\partial(D^{-1/2}AD^{-1/2}H^lW^l) Hl+1=(D1/2AD1/2HlWl)其中 H H H为层数,例如 H 0 = X H^0=X H0=X为第一层的输入, A A A为邻接矩阵, D D D为度矩阵, W l W^l Wl为第 l l l层的权重参数矩阵, ∂ ( . ) \partial(.) (.)为非线性激活函数,例如ReLU。这里的 D − 1 / 2 A D − 1 / 2 D^{-1/2}AD^{-1/2} D1/2AD1/2就是对A归一化,至于为什么两边乘以一个矩阵的逆就归一化了?这里需要复习到矩阵取逆的本质是做什么。
我们回顾下矩阵的逆的定义,对于式子 A ∗ X = B A*X=B AX=B ,假如我们希望求矩阵 X X X,那么当然是令等式两边都乘以 A − 1 A^{-1} A1 ,然后式子就变成了 X = A − 1 ∗ A ∗ X = A − 1 ∗ B X=A^{-1}*A*X=A^{-1}*B X=A1AX=A1B
举个例子对于,单个节点运算来说,做归一化就是除以它节点的度,这样每一条邻接边信息传递的值就被规范化了,不会因为某一个节点有10条边而另一个只有1条边导致前者的影响力比后者大,因为做完归一化后者的权重只有0.1了,从单个节点上升到二维矩阵的运算,就是对矩阵求逆了,乘以矩阵的逆的本质,就是做矩阵除法完成归一化。但左右分别乘以节点 i i i, j j j度的开方,就是考虑一条边的两边的点的度。

其实前面说了一大堆,都是在说明最后的公式是怎么来的,如果实在是不想看数学公式,用的时候记住就行了,
现有的基于频谱的图卷积网络模型有以下这些:Spectral CNN、Chebyshev Spectral CNN (ChebNet)、Adaptive Graph Convolution Network (AGCN)。

基于频谱的图卷积方法总结:
(1)从频域角度能够更加清晰地完成对图信号的特定滤波操作;
(2)图滤波器如何设计具有显示的公式指导;
(3)对矩阵特征分解具有 O ( N 3 ) O(N^3) O(N3)的时间复杂度,具有工程上的局限性;
(4)需要将整个图加载到内存中以执行图卷积,这在处理大型图时是不高效的。

Spatial-based Graph Convolutional Networks(基于空间)

       模拟传统卷积神经网络对图像的卷积运算,用基于空间的方法和基于节点的空间关系来定义图卷积。为了将图像与图关联起来,可以将图像视为图的特殊形式,每个像素代表一个节点,如下图a所示,每个像素直接连接到其附近的像素。通过一个3×3的窗口,每个节点的邻域是其周围的8个像素。这八个像素的位置表示一个节点的邻居的顺序。然后,通过对每个通道上的中心节点及其相邻节点的像素值进行加权平均,对该3×3窗口应用一个滤波器。由于相邻节点的特定顺序,可以在不同的位置共享可训练权重。同样,对于一般的图,基于空间的图卷积将中心节点表示和相邻节点表示进行聚合,以获得该节点的新表示,如图b所示。
图神经网络——(2)图卷积神经网络_第9张图片
比如说,一种最简单的无参卷积方式可以是:将所有直连邻居结点的隐藏状态加和,来更新当前结点的隐藏状态。例如,下图所示:
图神经网络——(2)图卷积神经网络_第10张图片
对于节点1新的表示,可以将节点2,3,4的隐藏状态进行加和得到。当然,这里非参式的卷积只是一个简单易懂的例子,实际上图卷积在建模时需要的都是带参数、可学习的卷积核。

为了探索节点感受域的深度和宽度,通常的做法是将多个图形卷积层堆叠在一起,根据卷积层叠加方法的不同,空间GCN又可分为基于递归(recurrent-based)的GCN和基于合成(composition-based)的空间GCN两大类.。基于递归的方法使用相同的图卷积层来更新隐藏表示,而基于合成的方法使用不同的图卷积层来更新隐藏表示。如下图所示,展示了这种差异。
图神经网络——(2)图卷积神经网络_第11张图片

(1)基于递归的空间GCN(Recurrent-based Spatial GCNs)

基于递归的方法主要想法是更新节点的隐藏状态直到得到一个稳定的固定点,这是通过施加对递归函数的约束,或者使用门控递归单元结构,或者异步地和随机地更新节点潜在表示。

图神经网络GNN(特指早期的一种结构)

这是图神经网络的早期工作,GNN递归更新节点的潜在表征,直到收敛。换句话说,从扩散过程的角度来看,每个节点与邻居交换信息直到达到平衡为止。

为了处理异质图(heterogeneous graph), 这类GNN的空间图卷积被定义为

h v t = f ( 1 v , 1 c o [ v ] , h n e t − 1 [ v ] , l n e [ v ] ) h^t_v=f(1_v,1_{co}[v],h^{t−1}_{ne}[v],l_{ne}[v]) hvt=f(1v,1co[v],hnet1[v],lne[v])

这里使用了针对节点 v v v的标签属性,边的标签属性,其邻居在时间步 t t t的隐藏表征,以及其邻居的标签属性。

为了确保收敛, 递归函数必须是一个约束映射, 这个会在映射之后压缩两点之间的距离. 若 f ( ) f() f()是一个神经网络,,那么一个惩罚项就会使用在参数的Jacobian矩阵上。

注:Jacobian矩阵是一阶偏导数以一定的方式排列成的矩阵。

GNN使用Almeida-Pineda算法来训练模型,核心思想是通过运行传播过程到达固定点,然后给出收敛解的后向过程。

门控图神经网络(GGNN)

GGNN使用门控递归单元(GRU)作为递归函数, 来将递归降低为一个固定的步数.

GGNN的空间图卷积定义为:

h v t = G R U ( h v t − 1 , ∑ u ∈ N ( v ) W h u t ) h^t_v=GRU(h^{t−1}_v,∑u∈N(v)Wh^t_u) hvt=GRU(hvt1,uN(v)Whut)

不同于GNN, GGNN使用基于时间的反向传播算法(BPTT)来学习参数, 它的优势在于不用再学习约束参数来确保收敛了。然而,BPTT训练的缺点是它牺牲了时间和存储的效率.,尤其是在处理大图的时候,GGNN会在所有节点上运行递归函数多次,需要所有节点的中间态被存储下来。

随机稳态嵌入SSE

为了提升学习效率, SSE算法用来随机地更新节点的潜在表征, 以一种异步的方式,下面是SSE的迭代算法:
图神经网络——(2)图卷积神经网络_第12张图片
如上, SSE迭代评估节点潜在表征并且使用抽样的批数据更新参数。

为了确保收敛到稳态, 递归函数被定义为一个历史状态和新状态的加权平均:

h v t = ( 1 − α ) h v t − 1 + α W 1 σ ( W 2 [ x v , ∑ u ∈ N ( v ) [ h u t − 1 , x u ] ] ) h^t_v=(1−α)h^{t−1}_v+αW_1 σ(W_2[x_v,∑_{u∈N(v)}[h^{t−1}_u,x_u]]) hvt=(1α)hvt1+αW1σ(W2[xv,uN(v)[hut1,xu]])

上式中, 第二项应该是新的结果,结合第一项的历史状态,可以得到新的真正的状态。

虽然对邻域信息的求和隐含地考虑了节点度,但这种求和的规模是否影响该算法的稳定性仍是个问题。

(2)基于合成的空间GCN(Composition Based Spatial GCNs)

基于合成的方法更新节点表征, 通过堆叠多个图卷积层。

消息传递神经网络(MPNN)

MPNN包含两个阶段, 消息传送阶段(message passing phase)和读出阶段(readout phase). 消息传送阶段实际上运行 T T T步的空间图卷积. 图卷积操作通过消息函数 M t ( ) Mt() Mt()和一个更新函数 U t ( ) Ut() Ut()来定义:
h v t = U t ( h v t − 1 , ∑ w ∈ N ( v ) M t ( h v t − 1 , h w t − 1 , e v w ) ) h^t_v=U_t(h^{t−1}_v,∑_{w∈N(v)}Mt(h^{t−1}_v,h^{t−1}_w,e_{vw})) hvt=Ut(hvt1,wN(v)Mt(hvt1,hwt1,evw))通过函数 M M M传递来自旧状态的消息得到新的状态, 使用 U U U来结合新旧状态进行更新, 得到当前时间的真正状态。

这里的读出阶段实际上是一个池化操作,产生了一个整个图的表征, 基于每个单独节点的隐藏表征,它被定义为:

y ^ = R ( h v T ∣ v ∈ G ) \hat y=R(h^T_v| v∈G) y^=R(hvTvG)

通过函数 R R R的输出, 最终的表征 y y y被用来处理图级预测任务. 很多的其他工作都可以看做是使用了 U , M U,M U,M的不同形式的结果。

GraphSage(了解更多,参考文献[11])

引入了聚合函数的概念来定义图的卷积, 聚合函数实质上是聚合节点的邻域信息. 它必须对节点顺序的排列具有不变性, 例如求均值、和、极大值函数等.

这样的图卷积操作可以被定义为:

h v t = σ ( W t ⋅ a g g r e g a t e k ( h v t − 1 , h u k − 1 , ∀ u ∈ N ( v ) ) h^t_v=σ(W^t⋅aggregate_k(h^{t−1}_v,{h^{k−1}_u,∀u∈N(v)}) hvt=σ(Wtaggregatek(hvt1,huk1,uN(v))

GraphSage并没有在所有节点上更新状态, 而是提出了一个批学习算法, 这个提升了对于大图的可扩展性. 其学习过程主要有三步:

首先,对节点的局部k跳邻域进行固定大小的采样;
其次,它通过聚合中心节点的邻居特征信息来获得中心节点的最终状态;
最后,它使用中心节点的最终状态进行预测并反向传播错误。
图神经网络——(2)图卷积神经网络_第13张图片
对于GraphSage而言, 计算损耗随着跳的阶段的增加, 而呈指数增长. 这导致该算法不能有太深的结构, 然而, 实际测试, 跳两步的GraphSage已经可以是实现很高的性能了。

还有很多的基于合成空间的GCN,这里我看了一些博客和论文,都是说一些基于递归空间的GCN有哪些,然后直接给出公式,让我这样的新手理解起来很费劲,所以我在知乎笔记[10]的理解下,把论文[9]所讲的大致思想记录下来,加深自己的理解,但是还有很多地方不太明白。

空域卷积层

与前面的符号一样,定义一个有权重的无向图 G = ( D , E ) G=(D,E) G=(D,E),这里 D D D表示结点,大小为 m m m m m m个节点), E E E表示边,大小为 m ∗ m m*m mm,是一个对称的非负矩阵。因此结点 i i i的相邻结点可以表示为: N δ ( i ) = { j ∈ D : E i j > δ } N_δ(i)=\left\{ {\left.{j∈ D : E_{ij} > δ} \right\}} \right. Nδ(i)={jD:Eij>δ}其中, δ δ δ是设置的一个阈值, N δ ( i ) N_δ(i) Nδ(i)表示节点 i i i的邻居节点, j j j表示除 i i i的其他结点, E i j E_{ij} Eij表示 i i i j j j的边,我们可以将注意力限制在稀疏的“过滤器”上,感受野由这些邻居给出,从而获得局部连接的网络,将一个过滤层的参数数减少到 O ( S ⋅ n ) O(S·n) O(Sn),其中 S S S是平均邻域大小。
例如下图:
图神经网络——(2)图卷积神经网络_第14张图片
我们要对结点1做卷积,和结点1相邻的结点有结点2、结点3和结点4(包括自身,结点1),即 N δ ( 1 ) N_δ(1) Nδ(1)
那么对结点1做卷积可以表示为 w 1 , 2 ∗ x 2 + w 1 , 3 ∗ x 3 + w 1 , 4 ∗ x 4 + w 1 , 1 ∗ x 1 w_{1,2}*x_{2}+w_{1,3}*x_{3}+w_{1,4}*x_{4}+w_{1,1}*x_{1} w1,2x2+w1,3x3+w1,4x4+w1,1x1 x x x表示每个结点的特征, w w w表示卷积的权重。因此对某个结点 v v v做卷积,可以表示为: o u t p u t v = ∑ u ∈ N δ ( v ) w u , v ∗ x u output_{v}=\sum\limits_{u\in N_δ(v)}{{w_{u,v}* x_u}} outputv=uNδ(v)wu,vxu卷积的输入的结点特征可能是一个向量,维度记为 f k − 1 f_{k-1} fk1 。同时,一次卷积操作可能包含多个卷积核,即卷积的通道数 f k f_k fk。类似与图像中的卷积,对输入特征的每一维做卷积,然后累加求和,就可以得到某个通道 j j j的卷积结果,公式如下所示:
o u t p u t v , j = ∂ ( ∑ i = 1 f k − 1 ∑ u ∈ N δ ( v ) w i , j , u , v ∗ x u , i ) output_{v,j} = \partial(\sum\limits_{i = 1}^{f_{k - 1}} {\sum\limits_{u\in N_δ(v)} w_{i,j,u,v}*x_{u,i} } ) outputv,j=(i=1fk1uNδ(v)wi,j,u,vxu,i)其中 v v v表示当前做卷积的结点, u u u表示 v v v的邻居结点, i i i表示纬度( 1 到 f n − 1 1到f_{n-1} 1fn1), j j j表示某个通道 ( j = 1 , . . . , f k ) (j=1,...,f_k) (j=1,...,fk) ∂ ( . ) \partial(.) (.)表示激活函数。转换成矩阵形式如下: o u t p u t v , j = ∂ ( ∑ i = 1 f k − 1 F i , j ∗ x i ) output_{v,j} = \partial(\sum\limits_{i = 1}^{f_{k - 1}}{F_{i,j}*x_{i} }) outputv,j=(i=1fk1Fi,jxi) F i , j ( u , v ) = { w i , j , u , v , u ∈ N δ ( v ) 0 , e l s e F_{i,j}(u,v)= \begin{cases} w_{i,j,u,v},&&u\in N_δ(v)\\ 0,&& else \end{cases} Fi,j(u,v)={wi,j,u,v,0,uNδ(v)else以上就是空域卷积层的内容,接下来看看Pooling层的实现。

Pooling层

CNN通过pooling和下采样层,减小特征图的尺寸。在图上,同样可以使用多尺度聚类的方式,来获得层次结构。下图展示了一个图的多尺度聚类,其中的 Ω Ω 为结点,在本文中用 D D D表示。
图神经网络——(2)图卷积神经网络_第15张图片
根据聚类结果,我们可以构造这样一个矩阵 L L L,行表示cluster,列表示结点,矩阵中的元素表示每个结点对聚类中心的权重,如果是求平均的话,就是1除以类中结点数,下图展示了一个例子。
图神经网络——(2)图卷积神经网络_第16张图片
因此通过 L ∗ o u t p u t j L*output_{j} Loutputj就可以得到avg pooling后的输出结果,其中 j j j为某个通道。同样,矩阵 L L L可以标注每个cluster最大值所在的结点。这样,我们通过 L ∗ o u t p u t j L*output_{j} Loutputj 得到max pooling后的输出结果。

多层空域卷积

现在考虑有 K K K个尺度。第0个尺度表示原始的图,即 D 0 = D D_0=D D0=D ,对于之后的每个尺度的特征图,定义为 D k , k = 1 , 2 , . . . K D_k,k=1,2,...K Dk,k=1,2,...K。聚类算法会把图 D k − 1 D_{k-1} Dk1分成 d k d_k dk个类, d 0 d_0 d0为原始图的结点数量 m m m 。因此图 D k − 1 D_{k-1} Dk1中每个结点的相邻结点可以定义为: N k = { N k , i : i = 1 , 2 , . . . , d k − 1 } N_k=\left\{ {\left.{N_{k,i}:i=1,2,...,d_{k-1}} \right\}} \right. Nk={Nk,i:i=1,2,...,dk1}我们定义layer k k k,卷积核的数量为 f k f_k fk。因此网络的layer k k k f k − 1 f_{k-1} fk1维特征转化为 f k f_k fk维特征。假设, x k = { x k , i : i = 1 , 2 , . . . , f k − 1 } x_k=\left\{ {\left.{x_{k,i}:i=1,2,...,f_{k-1}} \right\}} \right. xk={xk,i:i=1,2,...,fk1}是layer k k k的输入,大小为 d k − 1 ∗ f k − 1 d_{k-1}*f_{k-1} dk1fk1 d k − 1 d_{k-1} dk1是layer k − 1 k-1 k1结点的数量, f k − 1 f_{k-1} fk1是layer k − 1 k-1 k1特征的维度(卷积核的数量),卷积输出结果 o u t p u t k output_k outputk可以定义为:
o u t p u t v , j = ∂ ( ∑ i = 1 f k − 1 F k , i , j ∗ x k , i ) output_{v,j} = \partial(\sum\limits_{i = 1}^{f_{k - 1}}{F_{k,i,j}*x_{k,i} }) outputv,j=(i=1fk1Fk,i,jxk,i)加入pooling层之后,输出结果 x k + 1 x_{k+1} xk+1可以定义为: x k + 1 , j = L k ∗ ∂ ( ∑ i = 1 f k − 1 F k , i , j ∗ x k , i ) x_{k+1,j} =L_k* \partial(\sum\limits_{i = 1}^{f_{k - 1}}{F_{k,i,j}*x_{k,i} }) xk+1,j=Lk(i=1fk1Fk,i,jxk,i)这里 F k , i , j F_{k,i,j} Fk,i,j是大小为 d k − 1 ∗ f k − 1 d_{k-1}*f_{k-1} dk1fk1的稀疏矩阵,非零向量的位置由 N k N_k Nk给定, ∂ \partial 是非线性激励函数。 L k L_k Lk表示输出图 D k D_k Dk中每个类的pooling操作的结果。

基于空间的图卷积方法总结:
空域方法定义图卷积, 通过集成来自邻居的特征信息,更具不同的堆叠图卷积层的方式, 主要分类两种, 一种是基于递归的要获得节点的稳态的方法, 一种是基于组合的要去合并更高阶的邻域信息的方法。

在训练时, 每一层中, 两种方法都必须更新所有节点的隐藏状态。然而, 将所有的中间状态存储到内存中并不是一个有效的策略,为了解决这个问题, 一些训练策略被提出来,包括针对组合方法的子图训练(GraphSage)和针对递归方法的随机异步训练(SSE)。

3、图池化

泛化卷积神经网络到图结构数据的另一个关键点,,那就是图池化模块了,尤其是对于图级分类任务。

和原始CNN中的池化模块类似,图池化模块可以容易的减少方差和通过从原始特征数据中下采样来减少计算复杂度。

M e a n / m a x / s u m Mean/max/sum Mean/max/sum池化是实现这一点的最原始和最有效的方法,因为在池化窗口中计算均值/最大/和值是快速的。

h G = m e a n / m a x / s u m ( h 1 T , h 2 T , … , h n T ) h_G=mean/max/sum(h^T_1,h^T_2,…,h^T_n) hG=mean/max/sum(h1T,h2T,,hnT)

Henaff等人证明了在网络的开始加入一个简单的 m a x / m e a n max/mean max/mean池化,对于降低图的维度和减轻昂贵的图傅里叶变换操作的损耗是尤其重要的。

而Defferrard(ChebNet)等人,进一步优化了 m a x / m i n max/min max/min池化操作, 设计了一种有效的池化策略:
使用设计的粗化操作经过粗化后,将输入图及其粗化版本的顶点转化为一棵平衡的二叉树。
在最粗糙的层次上对节点进行任意排序,然后在平衡二叉树中将这种排序传播到较低的层次,最终在最精细的层次上产生一个规则的排序。

池化这样的重排的1D信号比原始的效率要高得多。

SortPooling操作也被在架构DGCNN中提出,也是进行了类似的重排操作,将顶点重排到更有意义的顺序,不同于ChebNet, 这里是根据顶点图中的结构化的角色来进行的排序。

这个方法将来自空间图卷积的图的无序顶点特征看做一个连续的WL颜色, 并且用来对顶点排序。
除了对顶点特征进行排序外,它还通过截断/扩展图的特征张量将图的大小统一为 k k k,如果 n > k n>k n>k,则删除最后的 n − k n-k nk行, 否则添加 k − n k-n kn零行。

该方法通过求解一个具有挑战性的底层图结构任务,即置换不变量,增强了池化网络以提高GCN的性能。
DIFFPOOL池化模块, 可以生成图的层次表达, 它不仅可以与CNN相结合,而且可以与各种(various)图型神经网络进行端到端的结合。

与以前的所有粗化方法相比,DIFFPOOL并不简单地将节点聚集在一个图中,而是为一组广泛的输入图的分层池节点提供了一个通用的解决方案。
DIFFPOOL通过使用两个GNN对节点进行集群来重新定义图池模块. 任何标准的GCN模块都能够与DIFFPOOL相结合,不仅可以提高性能,而且可以加快卷积运算的速度。

4、总结

第一,基于频谱的方法是早期解决图数据的图卷积,已经在许多图相关分析任务中取得了不错的结果, 这些模型出现在已有的在图信号处理的理论基础上. 通过设计新的图信号滤波器, 可以设计新的图卷积网络,相反,基于空间的方法缺少理论的支持。

第二,一般来说,对于只能从频域出发进行矩阵特征分解从而执行图卷积计算的模型,我们称之为频域图卷积模型。相应地,对于图卷积计算不需要进行矩阵特征分解,能在空域视角执行矩阵乘法计算的模型,我们称之为空域卷积模型。

第三,虽然空域图卷积模型具有工程上的优越性,但是这类模型也都可以从频域视角进行理解。

参考文献:

  1. https://www.jianshu.com/p/c0215d26d20a.
  2. https://mp.weixin.qq.com/s/9YqPSvfmfFnOrGzbmzPZbQ.
  3. https://www.zhihu.com/question/54504471/answer/332657604.(物理层面的解释)
  4. https://blog.csdn.net/sinat_16211087/article/details/89163626.
  5. https://zhuanlan.zhihu.com/p/72373094.(主流GCN模型)
  6. https://zhuanlan.zhihu.com/p/54505069.
  7. https://blog.csdn.net/Frank_LJiang/article/details/95194733.
  8. https://www.cnblogs.com/SivilTaram/p/graph_neural_network_2.html#.
  9. https://arxiv.org/abs/1312.6203.(论文)
  10. https://zhuanlan.zhihu.com/p/91573076.
  11. https://zhuanlan.zhihu.com/p/62750137(GraphSAGE: GCN落地必读论文)

你可能感兴趣的:(图神经网络,深度学习)