关于图卷积神经网络(Graph Convolutional Neural Network,GCN)的介绍和讲解,网络上已经有很多优秀的材料了,我在文末也会做个简单的整理,但大部分的材料为了介绍清楚图卷积神经网络的原理进行了大量的数学推导,需要用到许多数学、信号与系统等相关领域的知识,这就使得学习的难度大了很多,而且很多材料只是单纯的介绍了图卷积神经网络的过程,但没有给出一个更直观的理解角度。我这篇文就是在我阅读了许多人的解读和理解之后,总结出来的自己的看法,希望能够尽量少的使用数学推导,尽量把图卷积神经网络中几个难以理解的点解释清楚。
一、 基本概念
1. 图(Graph)
很多文献中图都会用这个式子
G
<
V
,
E
>
\mathcal{G}<V,E>
G<V,E>来描述,与我们熟悉的图片和图像不同,图是由一系列的节点
V
V
V和连接起这些节点的边
E
E
E构成的,如下图所示 黄色的圆点就表示节点,绿色的线条就表示边,而
f
(
i
)
f(i)
f(i)就表示第
i
i
i个节点上的特征值。
2. 邻接矩阵(Adjacency Matrix)
邻接矩阵通常用
A
A
A表示,他描述了每个节点直接的连接关系,如果节点
i
i
i和节点
j
j
j之间有边连接,那么对应的
A
i
j
A_{ij}
Aij就等于1,否则等于0。由于我们考虑的都是无向图(就是边只是单纯的连接节点,而没有方向),所以
A
i
j
=
A
j
i
A_{ij}=A_{ji}
Aij=Aji也就是说邻接矩阵
A
A
A是一个对称矩阵。上图对应的邻接矩阵
A
A
A如下所示
A
=
[
0
1
1
0
1
0
1
1
1
1
0
0
0
1
0
0
]
A=\begin{bmatrix} 0 & 1 & 1 & 0\\ 1 & 0 & 1 & 1\\ 1 & 1 & 0 & 0\\ 0 & 1 & 0 & 0 \end{bmatrix}
A=⎣⎢⎢⎡0110101111000100⎦⎥⎥⎤
3. 度矩阵(Degree Matrix)
度矩阵通常用
D
D
D表示,他描述了每个节点与多少个节点相连接,
D
D
D是一个对角矩阵,只有对角线上有非零的数值,其他的元素均是0,对角线上第一个数值就表示第一个节点与多少个节点相连,
D
i
i
=
∑
j
A
i
j
D_{ii}=\sum_{j}A_{ij}
Dii=∑jAij,上图对应的度矩阵
D
D
D如下所示
4. 拉普拉斯矩阵(Laplacian Matrix)
拉普拉斯矩阵通常用
L
L
L表示,它定义为
L
=
D
−
A
L=D-A
L=D−A,这里给出几个重要的结论:
- 拉普拉斯矩阵其实就是作用在图上的拉普拉斯算子
- 拉普拉斯矩阵是半正定矩阵,可以进行特征分解(谱分解) L = U T Λ U L=U^T\Lambda U L=UTΛU,其中 Λ \Lambda Λ是由特征值构成的对角矩阵, U U U是由特征向量构成的矩阵,且每个向量都是单位正交向量
- 拉普拉斯矩阵可以进行对称标准化 L s y m : = D − 1 2 L D − 1 2 = I − D − 1 2 A D − 1 2 L^{sym}:=D^{-\frac{1}{2}}LD^{-\frac{1}{2}}=I-D^{-\frac{1}{2}}AD^{-\frac{1}{2}} Lsym:=D−21LD−21=I−D−21AD−21
这些结论,我们不再详细证明了,如果想要了解具体的过程可以阅读文末列举的一些参考资料。上图对应的拉普拉斯矩阵和对应的特征分解矩阵如下
5.卷积
如果对卷积神经网络比较熟悉的同学,对于卷积的概念应该不陌生,对图像进行卷积操作,就是用一个固定大小的卷积核(比如3 *3 ),卷积核包含9个数字表示对应位置的权重,将这些权重与图像中对应像素点进行相乘,然后再求和就得到了卷积的结果。描述起来可能比较抽象,大家可以看下面的图片,中间3 * 3的小矩阵就是卷积核,对于左图中绿色框内的部分进行卷积操作
(
1
∗
1
+
0
∗
0
+
0
∗
(
−
1
)
+
0
∗
0
+
1
∗
1
+
1
∗
3
+
0
∗
(
−
2
)
+
0
∗
0
+
0
∗
1
)
=
5
(1*1+0*0+0*(-1)+0*0+1*1+1*3+0*(-2)+0*0+0*1)=5
(1∗1+0∗0+0∗(−1)+0∗0+1∗1+1∗3+0∗(−2)+0∗0+0∗1)=5就得到了右图中绿色的值5。
二、谱域(Spectral Domain)内的GCN
经典的卷积神经网络处理的数据都是欧氏空间内的规则数据,有两个特点:局部维度固定,序列数据有序。比如图像数据每个像素点都有8个与之相邻的像素点(图像边缘可以通过Padding的方式解决),比如声音数据按照时间有一个有序的序列。而图结构的数据并不具备上述的特点,每个节点可能与数目不同的节点相连接,所以经典的卷积操作就无法实现了。为了解决这个问题,研究人员提出一种解决方案:将空间域(Spatial)中的图转换到谱域中。这里用到了一个重要的结论,空间域中的卷积运算等价于谱域中的乘积运算,所以可以将空间域中的图和卷积核都变换到谱域中,相乘之后,再反变换到空间域中。如果我们处理的是一维的序列信号,上述的变换就是经典的傅里叶变换
F
F
F了,整个过程如下所示
对于图结构的数据,我们要重新定义一种图上的傅里叶变换,这就要用到我们上文介绍的拉普拉斯矩阵了,先上结论
其中
⊙
\odot
⊙表示Hadamard积(逐元素相乘),
U
U
U表示拉普拉斯矩阵谱分解得到的特征向量矩阵。为什么可以做这样的变换呢?首先傅里叶变换本质上就是把一段信号拆分成无数个不同频率成分信号,各个频率成分之间是彼此正交的,将所有的频率成分累加起来就得到了原始信号,该过程如下所示
X
(
w
)
X(w)
X(w)就表示
w
w
w频率下的信号分量(基),前面的系数就表示对应
w
w
w频率的权重。类比上述过程可以得到图上的傅里叶变换
x
^
(
λ
l
)
\hat{x}(\lambda_l)
x^(λl)表示对应特征值
λ
l
\lambda_l
λl的权重,
u
l
u_l
ul表示特征值
λ
l
\lambda_l
λl的信号分量(基),特征值
λ
l
\lambda_l
λl其实就反映了图结构数据的频率,也就是相邻节点之间的变化剧烈程度,特征值越大,变化越剧烈,频率越高。所以对空间域中的图数据
x
x
x进行傅里叶变换后得到谱域中的数据
x
^
=
U
T
x
\hat{x}=U^Tx
x^=UTx,同理卷积核也可以做相似的变换
g
^
=
U
T
g
\hat{g}=U^Tg
g^=UTg,将他们的乘积再做反变换就得到了空间域中的图卷积结果了,也就是开始提到的结论。
通常将谱域中的卷积核定义为对角矩阵的形式
g
θ
=
d
i
a
g
(
U
T
g
)
g_{\theta}=diag(U^Tg)
gθ=diag(UTg),就是把
U
T
g
U^Tg
UTg得到的值放在对角线位置上,其他位置均为0,而
U
T
x
⊙
U
T
g
=
g
θ
U
T
x
U^Tx\odot U^Tg=g_{\theta}U^Tx
UTx⊙UTg=gθUTx, 这样以来原本的图卷积运算可以改写为下式
需要注意的是,在图确定下来之后,对应的拉普拉斯矩阵也就确定了,进而对应的特征矩阵
U
U
U也就确定了,图卷积神经网络的训练过程其实就是对卷积核
g
g
g中包含的参数进行训练,而关于谱域下GCN的研究也就是如何定义和设计一个好的卷积核。
三、空间域(Spatial Domain)内的GCN
与谱域中的GCN进行各种变换的复杂操作不同,空间域中的GCN更加直接,也更好理解。图结构数据不是不存在一个固定的邻域嘛?那我直接规定一种方式,让每次卷积时对于每个节点都选择相同数量的相邻节点,这样一来图结构数据就被转换成一种更为规则的数据了,至少从局部来看,每个节点的邻域内都包含固定数量的相邻节点(并不是改变图的结构,而是不符合条件的相邻节点,在卷积时不再考虑了)。
比如经典的GNN模型(A Generalization of Convolutional Neural Networks to Graph-Structured Data)就提出了一种叫做随机游走的方法来确定每个节点的邻域,作者定义了一个转移矩阵
P
P
P,其中
P
i
j
P_{ij}
Pij表示从节点
i
i
i到节点
j
j
j的转移概率,其计算方法如下
P
=
D
−
1
S
P=D^{-1}S
P=D−1S,
D
D
D表示度矩阵,
S
S
S表示相似度矩阵,类似于邻接矩阵。定义多步转移期望矩阵
Q
(
k
)
=
∑
i
=
0
k
P
i
Q^{(k)}=\sum_{i=0}^{k}P^{i}
Q(k)=i=0∑kPi
则
Q
i
j
(
k
)
Q^{(k)}_{ij}
Qij(k)就表示在
k
k
k步内,从节点
i
i
i转移到节点
j
j
j的期望值,
k
k
k值越大,建立的邻域范围也就越大。
π
i
(
k
)
(
c
)
\pi_i^{(k)}(c)
πi(k)(c)表示在
k
k
k步内,从节点
i
i
i出发转移期望值第
c
c
c大的节点,也就是说
π
i
(
k
)
(
1
)
\pi_i^{(k)}(1)
πi(k)(1)就表示转移期望值最大的点。将图中的每个节点
i
i
i邻域中的点按照转移概率进行排序,并选择前
p
p
p个点进行卷积计算,就可以得到以下的卷积结果
w
1
.
.
.
.
w
p
w_1....w_p
w1....wp就表示卷积核的权重值了。
GraphSAGE模型(Inductive representation learning on large graphs)则提出一种更加直观的邻域构建方式:采样,就是从每个节点的相邻节点中随机选择
k
k
k个节点作为邻域,如果节点的相邻节点不足
k
k
k个则采用有放回的采样方式,直到采样得到
k
k
k个相邻节点。得到每个节点的邻域后,采用一种聚合的方式得到相邻节点对于该节点的影响,聚合的方式有三种
将聚合后的特征值与原本该节点处的特征值级联起来,乘以可学习的权重参数,并进行非线性**之后,就得到了该节点的输出。
空间域中的GCN因为可以直接在空间中去定义卷积,其形式更加灵活,也更容易处理大部分的图结构数据,因此逐渐成为了GCN研究的主流,除了上面介绍的两种模型之外,还有许多优秀的GCN模型,如GAT,GIN,DCNN等等。
四、参考资料
- 李宏毅老师的教学视频:https://www.bilibili.com/video/BV1JE411g7XF?p=18
- 一个小姐姐写的图卷积神经网络专栏,内容非常详细充实,https://zhuanlan.zhihu.com/p/137791565
- 关于图神经网络的综述文章翻译,可以整体了解GNN,https://zhuanlan.zhihu.com/p/54241746
- 图神经网络的入门和学习指南,https://zhuanlan.zhihu.com/p/105605774
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。