利用图卷积神经网络提取拓扑图的空间特征,其方式主要可以分为基于空间域(vertex domain,spatial domain)的方法 以及 基于谱域(spectral domain)的方法两种。
该方法思想较为直观,将图结构的数据转化为卷积神经网络能够高效处理的结构。处理的过程主要分为两个步骤:
1.从图结构当中选出具有代表性的nodes序列;
2.对于选出的每一个node求出一个卷积的邻域(neighborhood field)。
详细介绍可参阅:https://www.leiphone.com/news/201706/ppA1Hr0M0fLqm7OP.html
论文出处:Learning Convolutional Neural Networks for Graphs
基于图谱的方法主要思路是借助图谱的理论来实现拓扑图上的卷积操作。图谱理论简单的概括就是借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质。
该方法主要经过以下三个步骤:对图求拉普拉斯矩阵、对拉普拉斯矩阵进行特征分解以及傅立叶转换、卷积运算。
对于图 G = ( V , E ) G=(V,E) G=(V,E),其拉普拉斯矩阵的定义为 L = D − A L=D-A L=D−A,其中 D D D为对角矩阵,对角矩阵的对角线上各元素依次为各个顶点的度, A A A是图的邻接矩阵。
实际上,常见的拉普拉斯矩阵有以下三种:
矩阵特征分解的充要条件为n阶方阵存在n个线性无关的特征向量,而拉普拉斯矩阵是半正定对称矩阵,其有如下性质:
由上可知拉普拉斯矩阵可以特征分解,其特征分解为:
L = U ( λ 1 ⋱ λ n ) U − 1 L=U\left(\begin{array}{ccccc} \lambda_1 \\ & \ddots & \\ & & \lambda_n \end{array}\right)U^{-1} L=U⎝⎛λ1⋱λn⎠⎞U−1
其中, U = ( u ⃗ 1 , u ⃗ 2 , ⋯   , u ⃗ n ) U=(\vec u_1,\vec u_2,\cdots,\vec u_n) U=(u1,u2,⋯,un)是列向量为单位特征向量的矩阵,即 u ⃗ l \vec u_l ul为列向量;
( λ 1 ⋱ λ n ) \left(\begin{array}{ccccc} \lambda_1 \\ & \ddots & \\ & & \lambda_n \end{array}\right) ⎝⎛λ1⋱λn⎠⎞是n个特征值构成的对角矩阵。
由于 U U U是正交矩阵,即 U U T = E UU^{T}=E UUT=E,所以特征分解又可以写成:
L = U ( λ 1 ⋱ λ n ) U T L=U\left(\begin{array}{ccccc} \lambda_1 \\ & \ddots & \\ & & \lambda_n \end{array}\right)U^{T} L=U⎝⎛λ1⋱λn⎠⎞UT
U T U^{T} UT即为在此图上的图傅立叶转换矩阵。
因此,图上的傅里叶变换为: f ^ = U T f \hat{f}=U^Tf f^=UTf
其中 f ( i ) f(i) f(i)与图中的顶点一一对应。
对图上进行卷积,即为卷积核 h h h与图 f f f进行卷积运算,换言之,我们的目的是求函数 h ( t ) h(t) h(t)与 f ( t ) f(t) f(t)的卷积。
卷积定理: F [ f 1 ( t ) ∗ f 2 ( t ) ] = F 1 ( ω ) ⋅ F 2 ( ω ) F[f_1(t)*f_2(t)]=F_1(\omega)·F_2(\omega) F[f1(t)∗f2(t)]=F1(ω)⋅F2(ω)
卷积定理定义,函数卷积的傅里叶变换是函数傅立叶变换的乘积。
因此,函数 h ( t ) h(t) h(t)与 f ( t ) f(t) f(t)的卷积是其函数傅立叶变换乘积的傅立叶逆变换,即:
f ∗ h = F − 1 [ f ^ h ^ ] f*h=F^{-1}[\hat{f}\hat{h}] f∗h=F−1[f^h^]
我们已知: f ^ = U T f \hat{f}=U^Tf f^=UTf, h ^ \hat{h} h^的矩阵形式为 ( h ^ ( λ 1 ) ⋱ h ^ ( λ n ) ) \left(\begin{array}{ccccc} \hat{h}(\lambda_1) \\ & \ddots & \\ & & \hat{h}(\lambda_n) \end{array}\right) ⎝⎛h^(λ1)⋱h^(λn)⎠⎞
则两者的傅立叶变换乘积即为: ( h ^ ( λ 1 ) ⋱ h ^ ( λ n ) ) U T f \left(\begin{array}{ccccc} \hat{h}(\lambda_1) \\ & \ddots & \\ & & \hat{h}(\lambda_n) \end{array}\right)U^Tf ⎝⎛h^(λ1)⋱h^(λn)⎠⎞UTf
再乘以 U U U求两者傅立叶变换乘积的逆变换,则求出卷积:
( f ∗ h ) G = U ( h ^ ( λ 1 ) ⋱ h ^ ( λ n ) ) U T f (f*h)_G=U\left(\begin{array}{ccccc} \hat{h}(\lambda_1) \\ & \ddots & \\ & & \hat{h}(\lambda_n) \end{array}\right)U^Tf (f∗h)G=U⎝⎛h^(λ1)⋱h^(λn)⎠⎞UTf
具体推导过程涉及把传统傅里叶变换以及卷积迁移到图的过程,以下部分内容可以略过。
注:
读完知乎大神的回答受益良多,因此重新整理为该文章。知乎原回答为:
如何理解 Graph Convolutional Network(GCN)? - superbrother的回答 - 知乎
https://www.zhihu.com/question/54504471/answer/332657604
关于傅立叶变换的相关知识,推荐这篇博客:https://www.cnblogs.com/h2zZhou/p/8405717.html
受限于我对GCN的理解程度,目前文章并没有太多私货,我只是知识的搬运工,今后将不断丰富内容。