卷积图神经网络(GCN,图卷积网络)与递归图神经网络关系密切。与使用收缩约束迭代节点状态不同,ConvGNNs在架构上使用具有固定数量的不同卷积层来处理循环相互依赖,下图说明了这一关键区别。由于图卷积与其他神经网络的融合更加高效方便,近年来它的普及率迅速提高。
GCN可分为两类,基于谱域Spectral的和空间Spatial的。基于谱域的方法从图信号处理的角度引入滤波器来定义图卷积,其中图卷积运算被解释为从图信号中去除噪声。而基于空间的方法继承了RecGNNs的思想,通过信息传播来定义图卷积。
本文主要介绍基于谱域的图卷积网络。
这一节内容主要参考https://www.zhihu.com/question/54504471/answer/332657604,在此简略阐述一遍。
一句话总结基于谱域的图卷积:对节点特征 f f f进行傅里叶变换后,生成以拉普拉斯矩阵的特征向量为基的谱图,然后依据卷积定理求得卷积核 g g g对 f f f卷积后提取的特征。
图用 G = ( V , E ) G=(V,E) G=(V,E)表示, V V V中元素为节点(vertex), E E E中元素为边(edge)。按照边是否有指向性分为有向图和无向图,按照边是否有权值分为有权图和无权图。
度矩阵 D D D表示对角阵,对角上的元素为各个节点的度。顶点 v i v_i vi的度表示和该顶点相关联的边的数量。
邻接矩阵 A A A表示节点间的连接关系,是n阶方阵(n为节点数量)。无向图邻接矩阵是对称矩阵,而有向图的邻接矩阵不一定对称。无权图的邻接矩阵由0和1组成,有权图会依据权值变化。
常用的拉普拉斯矩阵有三种,这里用到了前两种,分别是标准和归一化后的形态:
传统的傅里叶变换定义为:
F ( w ) = ϝ [ f ( t ) ] = ∫ f ( t ) e − i w t d t F(w)=\digamma[f(t)]={\int}f(t)e^{-iwt}dt F(w)=ϝ[f(t)]=∫f(t)e−iwtdt其中 e − i w t e^{-iwt} e−iwt是信号 f ( t ) f(t) f(t)的基函数,也是拉普拉斯算子的特征函数。
如何把传统的傅里叶变换以及卷积迁移到图上?核心工作就是把 e − i w t e^{-iwt} e−iwt类推为图对应的拉普拉斯矩阵的特征向量。
传统傅里叶变换是连续形式的,在处理图时用到的是傅里叶变换的离散形式。由于拉普拉斯矩阵进行特征分解以后,可以得到 n n n个线性无关的特征向量,构成空间中的一组正交基,因此归一化拉普拉斯矩阵算子的特征向量构成了图傅里叶变换的基。图傅里叶变换将输入图的信号投影到了正交空间,相当于把图上定义的任意向量,表示成了拉普拉斯矩阵特征向量的线性组合。
由此定义图上的傅里叶变换:
F ( λ l ) = f ^ ( λ l ) = ∑ i = 1 N f ( i ) u l ( i ) F(\lambda_l)=\hat{f}(\lambda_l)=\sum_{i=1}^Nf(i)u_l(i) F(λl)=f^(λl)=i=1∑Nf(i)ul(i)其中,是 f f f是图上的 N N N维向量, f ( i ) f(i) f(i)表示图中某个节点的特征, u l ( i ) u_l(i) ul(i)表示第 l l l个特征向量的第 i i i个分量,那么特征值(频率) λ l \lambda_l λl下的, f f f的图傅里叶变换就是与 λ l \lambda_l λl对应的特征向量 u l u_l ul进行内积运算。
利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式: f ^ = U T f \hat{f}=U^Tf f^=UTf
同理,传统的傅里叶逆变换是对频率 w w w求积分: ϝ − 1 [ F ( w ) ] = − 1 2 Π ∫ F ( w ) e − i w t d w \digamma^{-1}[F(w)]=-\frac{1}{2\Pi}{\int}F(w)e^{-iwt}dw ϝ−1[F(w)]=−2Π1∫F(w)e−iwtdw迁移到Graph上变为对特征值 λ l \lambda_l λl求和:
f ( i ) = ∑ l = 1 N f ^ ( λ l ) u l ( i ) f(i)=\sum_{l=1}^N\hat{f}(\lambda_l)u_l(i) f(i)=l=1∑Nf^(λl)ul(i)利用矩阵乘法将图上的傅里叶逆变换推广到矩阵形式:
f = U f ^ f=U\hat{f} f=Uf^
卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数 f ( t ) f(t) f(t)与 g ( t ) g(t) g(t)两者的卷积是其函数傅立叶变换乘积的逆变换:
f ∗ g = ϝ − 1 ( ϝ ( f ) ⋅ ϝ ( g ) ) f*g=\digamma^{-1}(\digamma(f)\cdot\digamma(g)) f∗g=ϝ−1(ϝ(f)⋅ϝ(g))结合前文关于图傅里叶变换和逆变换的定义有:
f ∗ g = U ( ( U T f ) ⋅ ( U T g ) ) f*g=U((U^Tf)\cdot(U^Tg)) f∗g=U((UTf)⋅(UTg))如果把 U T g U^Tg UTg整体看作可学习的卷积核 g θ g_\theta gθ,其傅里叶变换可以写成对角矩阵的形式:
g θ = U T g = ( g ^ ( λ 1 ) ⋱ g ^ ( λ n ) ) g_\theta=U^Tg=\begin{pmatrix}\hat{g}(\lambda_1)\\&\ddots\\&&\hat{g}(\lambda_n)\end{pmatrix} gθ=UTg=⎝⎛g^(λ1)⋱g^(λn)⎠⎞整理可得最终的卷积公式为:
f ∗ g = U ( g ^ ( λ 1 ) ⋱ g ^ ( λ n ) ) U T f f*g=U\begin{pmatrix}\hat{g}(\lambda_1)\\&\ddots\\&&\hat{g}(\lambda_n)\end{pmatrix}U^Tf f∗g=U⎝⎛g^(λ1)⋱g^(λn)⎠⎞UTf
深度学习中的卷积就是要设计含有可训练共享参数的卷积核,而从上式中看卷积核参数就是 d i a g ( g ^ ( λ l ) ) diag(\hat{g}(\lambda_l)) diag(g^(λl))。在第一代GCN的工作中,直接将卷积核 g θ g_\theta gθ设置为 d i a g ( θ l ) diag(\theta_l) diag(θl),即卷积函数为:
y = σ ( U ( θ 1 ⋱ θ n ) U T x ) y=\sigma(U\begin{pmatrix}\theta_1\\&\ddots\\&&\theta_n\end{pmatrix}U^Tx) y=σ(U⎝⎛θ1⋱θn⎠⎞UTx)其中, σ ( ⋅ ) \sigma(\cdot) σ(⋅)是激活函数, Θ = ( θ 1 , . . . , θ n ) \Theta=(\theta_1,...,\theta_n) Θ=(θ1,...,θn)是通过初始化赋值然后利用误差反向传播进行调整的参数, x x x是图上对应于每个节点的特征。
如此设计有以下缺点:
为了解决上述缺陷,第二代GCN——ChebNet应运而生。ChebNet采用Chebyshev多项式来近似卷积核,目的是省去特征向量的求解:
g θ = g θ ( Λ ) ≈ ∑ k = 0 K − 1 θ k T k ( Λ ~ ) g_{\theta}=g_{\theta}(\varLambda)\approx\sum_{k=0}^{K-1} \theta_kT_k(\tilde{\varLambda}) gθ=gθ(Λ)≈k=0∑K−1θkTk(Λ~)
其中, T k T_k Tk是 k k k阶的Chebyshev多项式, θ k \theta_k θk是对应的系数(也就是训练中迭代更新的参数)。 Λ ~ = 2 λ m a x Λ − I N \tilde{\varLambda}=\frac{2}{\lambda_{max}}\varLambda-I_N Λ~=λmax2Λ−IN是re-scaled的特征值对角矩阵,进行这个shift变换的原因是Chebyshev多项式的输入要在 [ − 1 , 1 ] [-1,1] [−1,1]之间。
将上式带入到图卷积公式中:
y = σ ( U g θ ( Λ ) U T x ) = σ ( U ∑ k = 0 K − 1 θ k T k ( Λ ~ ) U T x ) = σ ( ∑ k = 0 K − 1 θ k T k ( U Λ ~ U T ) x ) y=\sigma(Ug_{\theta}(\varLambda)U^Tx)=\sigma(U\sum_{k=0}^{K-1} \theta_kT_k(\tilde{\varLambda})U^Tx)=\sigma(\sum_{k=0}^{K-1} \theta_kT_k(U\tilde{\varLambda}U^T)x) y=σ(Ugθ(Λ)UTx)=σ(Uk=0∑K−1θkTk(Λ~)UTx)=σ(k=0∑K−1θkTk(UΛ~UT)x)又因为 L = U Λ U T L=U{\varLambda}U^T L=UΛUT,代入得:
y = σ ( ∑ k = 0 K − 1 θ k T k ( L ~ ) x ) y=\sigma(\sum_{k=0}^{K-1} \theta_kT_k(\tilde{L})x) y=σ(k=0∑K−1θkTk(L~)x)其中 L ~ = 2 λ m a x L − I \tilde{L}=\frac{2}{\lambda_{max}}L-I L~=λmax2L−I,这样设计的优点在于:
该文在ChebNet的基础上进一步改进和简化,是基于谱域的图卷积网络的集大成之作。为图神经网络模型引入一个简单且表现好的分层传播规则,该规则直接在图上运行,展示了它是如何从谱图卷积的一阶近似中获得增益的,并演示了如何将这种形式的基于图的神经网络模型用于图中节点的快速和可扩展的半监督分类。
(该节内容与上文三、四章有重复,这里主要还是转述一遍原文。)
谱图卷积可以定义为信号 x x x与滤波器 g θ = d i a g ( θ ) g_\theta=diag(\theta) gθ=diag(θ)在傅里叶域中的乘积:
g θ ⋆ x = U g θ U T x g_\theta{\star}x=Ug_{\theta}U^Tx gθ⋆x=UgθUTx其中, U U U是归一化拉普拉斯 L = I N − D − 1 2 A D − 1 2 = U Λ U T L=I_N-D^{-\frac{1}{2}}AD^{-\frac{1}{2}}=U{\varLambda}U^T L=IN−D−21AD−21=UΛUT的特征向量矩阵(即谱矩阵), Λ \varLambda Λ为特征值矩阵(对角矩阵), U T x U^Tx UTx为 x x x的图傅里叶变换。在这里,可以将 g θ g_\theta gθ看作是 L L L的特征值函数,也就是 g θ ( Λ ) g_\theta(\varLambda) gθ(Λ)。
以上公式的计算代价是昂贵的,使用 U U U进行矩阵乘法的时间复杂度为 O ( N 2 ) O(N^2) O(N2),此外首先计算特征分解对于大图来说需要很多计算量。为了解决这个问题,采用了已有方法(Hammond等. 2011)将 g θ ( Λ ) g_\theta(\varLambda) gθ(Λ)近似为Chebyshev多项式的 K K K阶截断展开:
g θ ′ ( Λ ) ≈ ∑ k = 0 K θ k ′ T k ( Λ ~ ) g_{\theta'}(\varLambda)\approx\sum_{k=0}^{K} \theta'_kT_k(\tilde{\varLambda}) gθ′(Λ)≈k=0∑Kθk′Tk(Λ~)其中, Λ ~ = 2 λ m a x Λ − I N \tilde{\varLambda}=\frac{2}{\lambda_{max}}\varLambda-I_N Λ~=λmax2Λ−IN, λ m a x \lambda_{max} λmax表示 L L L最大特征值, θ ′ \theta' θ′现在是Chebyshev系数的向量。Chebyshev多项式的递归定义为 T k ( x ) = 2 x T k − 1 ( x ) − T k − 2 ( x ) T_k(x)=2xT_{k-1}(x)-T_{k-2}(x) Tk(x)=2xTk−1(x)−Tk−2(x),其中 T 0 ( x ) = 1 T_0(x)=1 T0(x)=1、 T 1 ( x ) = x T_1(x)=x T1(x)=x。
回到我们对于信号 x x x和滤波器 g θ ′ g_{\theta'} gθ′的卷积定义,且已知 ( U Λ ~ U T ) k = U Λ ~ k U T = L ~ k (U{\tilde{\varLambda}}U^T)^k=U\tilde{\varLambda}^kU^T=\tilde{L}^k (UΛ~UT)k=UΛ~kUT=L~k,现在有: g θ ′ ⋆ x = U g θ ′ U T x ≈ U ⋅ ∑ k = 0 K θ k ′ T k ( Λ ~ ) ⋅ U T x = ∑ k = 0 K θ k ′ T k U ( Λ ~ ) U T x = ∑ k = 0 K θ k ′ T k ( L ~ ) x g_{\theta'}{\star}x=Ug_{\theta'}U^Tx{\approx}U{\cdot}\sum_{k=0}^{K} \theta'_kT_k(\tilde{\varLambda}){\cdot}U^Tx=\sum_{k=0}^{K} \theta'_kT_kU(\tilde{\varLambda})U^Tx=\sum_{k=0}^{K} \theta'_kT_k(\tilde{L})x gθ′⋆x=Ugθ′UTx≈U⋅k=0∑Kθk′Tk(Λ~)⋅UTx=k=0∑Kθk′TkU(Λ~)UTx=k=0∑Kθk′Tk(L~)x其中 L ~ = 2 λ m a x L − I N \tilde{L}=\frac{2}{\lambda_{max}}L-I_N L~=λmax2L−IN。这个表达式是拉普拉斯中的 K K K阶多项式,也就是说,它只依赖于离中心节点最大 k k k步的节点( k k k阶邻域)。上式的复杂度是 O ( ∣ ε ∣ ) O(|\varepsilon|) O(∣ε∣),即边的数量是线性的。Defferrard等(2016)使用此 K K K局部卷积在图上定义了卷积神经网络。
近似的谱图卷积虽然可以建立起 K K K阶邻居的依赖,然而,却仍然需要在 L ~ \tilde{L} L~上进行 K K K阶运算。为了降低运算成本,本文进一步简化了该运算,即将分层卷积运算限制为 K = 1 K=1 K=1,此时图谱卷积可以近似为 L L L的线性函数。
当然,这样做的代价是只能建立起一阶邻居的依赖。对于这一问题,可以通过堆积多层图卷积网络建立 k k k阶邻居的依赖,优势是不需要受到Chebyshev多项式的限制。这样的模型可以缓解节点度分布非常宽的图(例如社交网络、引文网络、知识图和许多其他现实世界图数据集)的局部邻域结构过拟合的问题。 此外,对于固定的计算预算,这种分层的线性公式使我们可以构建更深的模型,这种实践被认为可以提高许多领域的建模能力。
在GCN的这种线性公式中,我们可以进一步近似 λ m a x ≈ 2 λ_{max}\approx2 λmax≈2,因为我们可以预期神经网络参数将在训练过程中适应这种规模变化。所以上式简化为:
g θ ′ ⋆ x ≈ θ 0 ′ x + θ 1 ′ ( L − I N ) x = θ 0 ′ x − θ 1 ′ D − 1 2 A D − 1 2 x g_{\theta'}{\star}x\approx\theta'_0x+\theta'_1(L-I_N)x=\theta'_0x-\theta'_1D^{-\frac{1}{2}}AD^{-\frac{1}{2}}x gθ′⋆x≈θ0′x+θ1′(L−IN)x=θ0′x−θ1′D−21AD−21x仅有两个参数 θ 0 ′ \theta'_0 θ0′和 θ 1 ′ \theta'_1 θ1′,可以被共享至全图。若需建立 k k k阶邻居上的依赖,可以通过设置 k k k层这样的滤波器来实现。
在实际的过程中,可以通过对参数进行进一步约束来避免过拟合,并简化运算复杂度。如令 θ = θ 0 ′ = θ 1 ′ \theta=\theta'_0=\theta'_1 θ=θ0′=θ1′,则有:
g θ ′ ⋆ x ≈ θ ( I N + D − 1 2 A D − 1 2 ) x g_{\theta'}{\star}x\approx\theta(I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}})x gθ′⋆x≈θ(IN+D−21AD−21)x需要注意的是, I N + D − 1 2 A D − 1 2 I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}} IN+D−21AD−21的特征值范围为 [ 0 , 2 ] [0,2] [0,2],这意味着,当不停地重复该操作时(网络非常深时),可能会引起梯度爆炸或梯度消失。为了减弱这一问题,本文提出了一种重归一化技巧(renormalization trick): I N + D − 1 2 A D − 1 2 → D ~ − 1 2 A ~ D ~ − 1 2 I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}}\to\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}} IN+D−21AD−21→D~−21A~D~−21,其中 A ~ = A + I N \tilde{A}=A+I_N A~=A+IN且 D ~ i i = ∑ j A ~ i j \tilde{D}_{ii}=\sum_j\tilde{A}_{ij} D~ii=∑jA~ij。
当图中每个节点的表示不是单独的标量而是一个大小为 C C C的向量时,有以下变体:
Z = D ~ − 1 2 A ~ D ~ − 1 2 X Θ Z=\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}X\Theta Z=D~−21A~D~−21XΘ其中, Θ \Theta Θ表示参数矩阵, Z ∈ R N ∗ F Z{\in}\Reals^{N*F} Z∈RN∗F为相应的卷积结果。此时,每个节点的表示 X X X被更新成了一个新的向量 Z Z Z,该向量包含了相应的一阶邻居上的信息。
经过了以上两节的理论推导,即谱图卷积的一阶近似,图卷积网络最终的分层传播规则表达式如下:
H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=\sigma(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}W^{(l)}) H(l+1)=σ(D~−21A~D~−21H(l)W(l))对于无向图 G G G:
A ~ = A + I N \tilde{A}=A+I_N A~=A+IN是带有自连接的邻接矩阵, I N I_N IN是单位矩阵;
D ~ \tilde{D} D~是度矩阵, D ~ i i = ∑ j A ~ i j \tilde{D}_{ii}=\sum_j\tilde{A}_{ij} D~ii=∑jA~ij;
H ( l ) ∈ R N ∗ D H^{(l)}{\in}\Reals^{N*D} H(l)∈RN∗D是第 l l l层的激活矩阵(输入),其中 N N N为图中的节点数量,每个节点使用 D D D维的特征向量进行表示,初始输入为 H ( 0 ) = X H^{(0)}=X H(0)=X;
W ( l ) W^{(l)} W(l)是待训练的参数矩阵;
σ \sigma σ表示激活函数,比如 R e L U ( ⋅ ) = m a x ( 0 , ⋅ ) ReLU(\cdot)=max(0,\cdot) ReLU(⋅)=max(0,⋅)。
说明如下:
GCN通过一个简单的映射函数 f ( X , A ) f(X,A) f(X,A),可以将节点的局部信息汇聚到该节点中。本文使用了一个两层的GCN进行节点分类,模型结构图如下图所示:
其具体流程为:
首先获取节点的特征表示 X X X并计算归一化邻接矩阵 D ~ − 1 2 A ~ D ~ − 1 2 \tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}} D~−21A~D~−21。
将其输入到一个两层的GCN网络中,得到每个标签的预测结果:
Z = f ( X , A ) = s o f t m a x ( A ~ R e L U ( A ~ X W ( 0 ) ) W ( 1 ) ) Z=f(X,A)=softmax(\tilde{A}ReLU(\tilde{A}XW^{(0)})W^{(1)}) Z=f(X,A)=softmax(A~ReLU(A~XW(0))W(1))其中, W ( 0 ) W^{(0)} W(0)为第一层的权值矩阵,用于将节点的特征表示映射为相应的隐层状态。 W ( 1 ) W^{(1)} W(1)为第二层的权值矩阵,用于将节点的隐层表示映射为相应的输出。最后将每个节点的表示通过一个 s o f t m a x softmax softmax函数,即可得到每个标签的预测结果。
对于半监督分类问题,使用所有有标签节点上的期望交叉熵作为损失函数:
L = − ∑ l ∈ γ L ∑ f = 1 F Y l f ln Z l f L=-\sum_{l\in\gamma_L}\sum_{f=1}^FY_{lf}{\ln}Z_{lf} L=−l∈γL∑f=1∑FYlflnZlf其中, γ L \gamma_L γL表示有标签的节点集。
针对半监督节点分类问题,本文主要进行了两个实验:一是在文献引用网络上的实验,二是在知识图谱上的实验(NELL)。在文献引用网络中,边使用引用链构建,节点表示相应的文档。本文共使用了三个引用网络数据集:Citeseer、Cora与Pubmed。实验结果如下所示,可见基于GCN的半监督节点分类模型有较大提升。
本文提出了一种图卷积网络GCN,该网络可以被有效地用于处理图结构的数据。图卷积网络具有几个特点:
总的来说,图卷积网络是神经网络技术在图结构数据上的一个重要应用。这一研究可以被广泛应用在graph embedding、node embedding等图相关的任务上,它也为处理大型图结构数据提供了一种有效的手段。