图神经网络GNN学习笔记:GCN的性质
本文首先介绍
GCN
与
CNN
的联系,然后阐述GCN对图数据进行端对端学习的机制,之后从低通滤波器的角度解释GCN对图学习能力的有效性,最后介绍GCN模型面临的问题——过平滑。
1. GCN与CNN的联系
总的来说,从空域视角看,GCN模型与CNN模型都是聚合邻域信息的运算,只是作用的数据对象不同。
(1) 图像是一种特殊的图数据
就卷积计算而言,CNN与GCN的最大区别在于没有显式地表达出邻接矩阵,但是在实际计算的时候,需要考虑数据之间的结构关系。例如:
CNN中的卷积计算用来处理固定2D栅格结构
的图数据,而GCN中的卷积则是用来处理更普遍的非结构化的图数据
。
(2)从网络连接方式看,二者都是局部连接
从单个节点的运算过程看:
- GCN的计算为: ∑ v j ∈ N ~ ( v i ) w x j \sum_{v_j\in \tilde{N} (v_i)} wx_j ∑vj∈N~(vi)wxj,计算作用在其一阶子图上;
- CNN的计算为: ∑ v j ∈ [ − 4 , 4 ] w j x i + j \sum_{v_j\in[-4,4]}w_jx_{i+j} ∑vj∈[−4,4]wjxi+j,计算作用在中心像素附近3×3的栅格内,这种节点下一层的特征计算只依赖于自身邻域的方式,在网络连接上表现为一种局部连接的结构。
相较于全连接结构,局部连接大大减少了单层网络的计算复杂度。
另外,在权重设计上:
- CNN的卷积核针对图像数据中固定的栅格结构,设计了9组权重参数
- GCN的卷积核为了使用不同的图数据结构,其权重参数退化为一组。
(3)二者卷积核的权重是处处共享的
与CNN一样,GCN中的卷积核也作用域全图所有的点,在每个节点处的计算中权重参数都是共享的,这样减少了单层网络的参数量,避免过拟合。
(4)从模型的层面看,感受域随着卷积层的增加而变大
每多一层卷积计算,中心节点就能多融合进更外一”圈“的信息。节点自身特征的更新与卷积运算强耦合在一起,每一个新卷积层的加入,都可以使节点获得更加抽象化的特征表示。
计算机视觉中的两大主流任务:
1. 图像分类:一种需要对数据全局信息进行学习的任务
2. 图像分割:一种需要对像素及其局部信息进行整合学习的任务,模型最后需要对每个像素进行分类判断,这与图数据中节点层面的节点分类任务对应。
作为一种重要的图数据学习模型,GCN及其衍生模型主要解决的任务包括图分类
(CNN中的图像分类)和节点分类
(CNN中的目标检测)。
2. GCN能够对图数据进行端到端学习
针对特定类型数据的学习任务,有多种十分流行的网络层或层块(block)设计,例如:
Conv2D
层对图像数据的学习LSTM
层对序列数据的学习Global Pooling
层对全局信息的提取
深度学习的优秀得益于网络层块的定制化设计。要实现图数据的端到端学习,必须能够适配图数据的内在模式。图数据中包含两部分信息:属性信息
与结构信息
- 属性信息:描述了图中对象的固有性质
- 结构信息:描述了对象之间的关联性质
那么,GCN是怎么去适配图数据的内在规律的?这里比较两类典型的图数据学习方式——基于手工特征与基于随机游走的方法。
一般地,图数据中属性信息的处理比较简单,按照属性的类型进行相应的编码设计,然后将其拼接成一个表示节点属性的特征向量即可。而结构信息比较难处理。这里关注上述两种方法如何处理图的结构信息上。
基于手工特征的方法
。将图中节点的结构信息以一些图的统计特征进行替代,如节点的度、节点的中心都、节点的PageRank值等,然后将这个代表节点结构信息的特征向量与代表节点的属性信息的特征向量拼接在一起,送到下游进行任务的学习。该方法的最大问题在于表示结构的特征向量需要人为定义,无法判断是否对后续任务有效。基于随机游走的方法
。随机游走是网络表示学习中具有代表性的方法之一,基本思想是将图中节点所满足的关系与结构的性质映射到一个新的向量空间中,比如图中距离更近的点在新的空间中距离也很近。通过这样的优化目标将图里面的数据转换成向量空间的数据,方便后续处理。接下来,该方法与基于手工特征的方法思路一样,将代表节点结构信息的特征向量与代表节点属性信息的特征向量进行拼接,然后进行下游任务学习。不同的是,其节点的结构信息是通过随机游走类方法进行学习的,不依赖人为定义。
GCN对于图数据的学习方式比较符合端对端的要求:一端是数据,另一端是任务。GCN对于属性信息和结构信息的学习体现在其核心公式上: L ~ s y m X W \tilde L_{sym}XW L~symXW,这个计算过程分为两步:
- 第1步: X W XW XW是对属性信息的仿射变换,学习了属性特征之间的交互模式;
- 第2步: L ~ s y m X W \tilde L_{sym}XW L~symXW从空域来看是聚合邻居节点的过程,代表对节点局部结构信息的编码。
举例:图的同构问题(graph isomorphism problem)
:给定两个图,判断这两个图是否完全等价。
如上所示,看上去并不相似的两个图,可能是完全等价的。
要判断图是否等价,需要考量的是算法对图结构信息的分辨能力:一个经典的解法是Weisfeiler-Lehman算法
。Weisfeiler-Lehman算法是一个迭代式
的算法,一维的Weisfeiler-Lehman算法流程
如下所示::
对于图上的任意一个节点 v i v_i vi:
- 获取该节点 { v i } \{v_i\} {vi}的所有邻居节点 j j j的标签 { h j } \{h_j\} {hj}: v j ∈ N ( v i ) v_j\in N(v_i) vj∈N(vi)
- 更新给节点
{
v
i
}
\{v_i\}
{vi}的标签
h
i
←
h
a
s
h
(
∑
v
j
h
j
)
h_i\leftarrow hash(\sum_{v_j}h_j)
hi←hash(∑vjhj),其中
h
a
s
h
(
⋅
)
hash(\cdot)
hash(⋅)是一个单射函数(
x
x
x不同,则
f
(
x
)
f(x)
f(x)一定不同,即一对一映射)
重复以上步骤K次直到收敛
事实上,Weisfeiler-Lehman算法在大多数图上会得到一个独一无二的特征集合,这意味着图上的每一个节点都有着独一无二的角色定位(例外在于网格,链式结构等等)。因此,对于大多数非规则的图结构,得到的特征可以作为图是否同构的判别依据,也就是WL Test
(例如两个图是否是同质的,取决于节点的排列方式)。
当我们要判断 Graph1 和 Graph2 是否同构时,WL test 的主要步骤:通过聚合节点邻居的 label,然后通过 hash 函数得到节点新的 label,不断重复,直到每个节点的 label 稳定不变。稳定后,统计两张图的label的分布,如果分布相同,则一般认为两张图时同构的。
上述过程与节点层面的GCN计算过程基本一致:迭代式地聚合邻居节点的特征,从而更新当前节点的特征。因此,GCN近似于一种带参的、支持自动微分的Weifeiler-Lehman算法。
补充:一种GCN的衍生模型——Graph Isomorphism Network(GIN),在判断图同构问题上,效果几乎等价于Weisfeiler-Lehman算法。
在GCN模型中,通过堆叠图卷积层,上述属性信息的编码学习与结构信息的编码学习被不断地交替进行,如是完成对图数据中更加复杂的模式学习。GCN相较于手工特征和随机游走方法的优势在于:
- (1)GCN对表示学习和任务学习一起进行端对端的优化。GCN对于图数据的建模没有切成两步完成,而是将节点的表示学习和下游的任务学习放到一个模型里边进行端对端学习,整个模型的监督信号同时指导着任务层(如分类层)和GCN层的参数更新。节点的特征表示与下游任务具有更好的适应性。
- (2)GCN对结构信息与属性信息的学习是同时进行的,没有分拆和解构。GCN将二者信息放在一个网络层里同时进行学习,使它们可以协同式地影响最终节点的表示。
总之,GCN模型将学习过程直接架于图数据上。
3. GCN是一个低通滤波器
通常,在图的半监督学习中,会在相应的损失函数里面增加一个正则项,目的是保证相邻节点之间的类别信息趋于一致。一般选用拉普拉斯矩阵的二次型
作为正则约束:
ℓ
=
ℓ
0
+
ℓ
r
e
g
,
ℓ
r
e
g
=
∑
e
i
j
∈
E
A
i
j
∣
∣
f
(
x
i
)
−
f
(
x
j
)
∣
∣
2
=
f
(
X
)
T
L
f
(
x
)
\ell=\ell_0+\ell_{reg}, \ell_{reg}=\sum_{e_{ij}\in E}A_{ij}||f(x_i)-f(x_j)||^2=f(X)^TLf(x)
ℓ=ℓ0+ℓreg,ℓreg=eij∈E∑Aij∣∣f(xi)−f(xj)∣∣2=f(X)TLf(x)
其中,
ℓ
\ell
ℓ表示模型的总损失,
ℓ
0
\ell _0
ℓ0表示监督损失,
ℓ
r
e
g
\ell_{reg}
ℓreg表示正则项。从学习的目标来看,正则项使得相邻节点的分类标签尽量一致。而从图信号的角度看,该正则项也表示图信号的总变差,减少该项表示我们期望经过模型之后的图信号更加平滑,这就相当于对图信号做了低通滤波处理
。
在GCN的损失函数中,通常并不会设计这样的正则项。有文章是这样将GCN视为一种低通滤波器的,具体过程如下:
回到GCN的核心计算公式
L
~
s
y
m
X
W
\tilde L{sym}XW
L~symXW上,体现图滤波的地方是左乘了一个重归一化形式的拉普拉斯矩阵
L
~
s
y
m
\tilde L{sym}
L~sym,要确定是否为低通滤波,需要研究
L
~
s
y
m
\tilde L_{sym}
L~sym对应的频率相应函数
p
(
λ
)
p(\lambda)
p(λ)的性质:
L
~
s
y
m
=
D
~
−
1
/
2
A
~
D
~
−
1
/
2
=
D
~
−
1
/
2
(
D
~
−
L
)
D
~
−
1
/
2
=
I
−
D
~
−
1
/
2
L
D
~
−
1
/
2
=
I
−
L
~
s
\tilde L_{sym}=\tilde D^{-1/2}\tilde A \tilde D^{-1/2}=\tilde D^{-1/2}(\tilde D-L)\tilde D^{-1/2}=I-\tilde D^{-1/2}L\tilde D^{-1/2}=I-\tilde L_s
L~sym=D~−1/2A~D~−1/2=D~−1/2(D~−L)D~−1/2=I−D~−1/2LD~−1/2=I−L~s
由于
L
~
s
\tilde L_s
L~s可以被正交对角化,设
L
~
s
=
V
Λ
~
V
T
\tilde L_s=V\tilde \Lambda V^T
L~s=VΛ~VT,
λ
~
i
\tilde \lambda_i
λ~i是
L
~
s
\tilde L_s
L~s的特征值,可以证明:
λ
~
i
∈
[
0
,
2
)
\tilde \lambda_i\in[0,2)
λ~i∈[0,2)。因此上式变为$
L
~
s
y
m
=
I
−
V
Λ
~
V
T
=
V
(
1
−
Λ
~
)
V
T
\tilde L_{sym}=I-V\tilde \Lambda V^T=V(1-\tilde \Lambda)V^T
L~sym=I−VΛ~VT=V(1−Λ~)VT。显然其频率响应函数为
p
(
λ
)
=
1
−
λ
~
i
∈
(
−
1
,
1
]
p(\lambda)=1-\tilde \lambda_i \in (-1,1]
p(λ)=1−λ~i∈(−1,1],该函数是一个线性收缩的函数,因此能对图信号进行低通滤波。
将信号矩阵 X X X不断左乘 K K K次 L ~ s y m \tilde L_{sym} L~sym,则对应的频率响应函数为 ( 1 − λ ~ i ) K (1-\tilde \lambda_i)^K (1−λ~i)K。随着K的增大,频率响应函数在低频段具有更强的缩放效果,因此是一种更强效应的低通滤波器。
事实上,为了突出对数据的低通滤波特性,减少参数量,可以将多层GCN退化成
σ
(
L
~
s
y
m
K
X
W
)
\sigma(\tilde L_{sym}^K XW)
σ(L~symKXW)。研究表明,输入数据的特征信号包括低频信号和高频信号,而低频信号包含着对任务学习更加有效的信息。在 Revisiting Graph Neural Networks: All We Have is Low-Pass Filters 论文中,作者的对GCN的低通滤波特性分析结果如下:
4. GCN的问题——过平滑
多层GCN的过平滑(Over-Smooth)问题
:GCN模型无法堆叠的很深,使用多层GCN进行学习时任务效果会急剧下降。
GCN相当于对输入信号做了一个低通滤波,但是多次执行会使得信号不断平滑,越来越趋同,丧失节点特征的多样性。
4.1 频域视角
从GCN的频率响应函数
p
(
λ
)
=
1
−
λ
~
i
p(\lambda)=1-\tilde \lambda_i
p(λ)=1−λ~i开始解释:
lim
k
→
+
∞
L
~
s
y
m
k
=
lim
k
→
+
∞
(
I
−
L
~
s
)
k
=
lim
k
→
+
∞
(
V
(
1
−
Λ
~
)
V
T
)
k
=
lim
k
→
+
∞
V
[
(
1
−
λ
~
1
)
k
(
1
−
λ
~
2
)
k
.
.
.
(
1
−
λ
~
N
)
k
]
V
T
\lim_{k \to +\infty }{\tilde L_{sym}^k}=\lim_{k \to +\infty }(I-\tilde L_s)^k= \lim_{k \to +\infty }(V(1-\tilde \Lambda)V^T)^k=\lim_{k \to +\infty }V\begin{bmatrix} (1-\tilde \lambda _1)^k & & & \\ & (1-\tilde \lambda _2)^k & & \\ & & ... & \\ & & & (1-\tilde \lambda _N)^k\end{bmatrix} V^T
k→+∞limL~symk=k→+∞lim(I−L~s)k=k→+∞lim(V(1−Λ~)VT)k=k→+∞limV⎣⎢⎢⎡(1−λ~1)k(1−λ~2)k...(1−λ~N)k⎦⎥⎥⎤VT
由于
(
1
−
λ
~
i
)
∈
(
−
1
,
1
]
(1-\tilde \lambda_i)\in (-1, 1]
(1−λ~i)∈(−1,1],且当且仅当
i
=
1
i=1
i=1时,
1
−
λ
~
1
=
1
1-\tilde \lambda_1=1
1−λ~1=1,由于其他的特征值都大于0(假设是全连通图,仅存在一个特征值为0),因此取极限之后的结果为:
lim
k
→
+
∞
L
~
s
y
m
k
=
V
[
1
0
.
.
.
0
]
V
T
\lim_{k \to +\infty }{\tilde L_{sym}^k}=V\begin{bmatrix} 1 & & & \\ & 0 & & \\ & & ... & \\ & & & 0\end{bmatrix} V^T
k→+∞limL~symk=V⎣⎢⎢⎡10...0⎦⎥⎥⎤VT
如果设图信号为
x
x
x,则有
lim
k
→
+
∞
L
~
s
y
m
k
x
=
V
[
1
0
.
.
.
0
]
V
T
x
=
⟨
x
⋅
v
1
⟩
v
1
=
x
~
1
v
1
\lim_{k \to +\infty }{\tilde L_{sym}^k}x=V\begin{bmatrix} 1 & & & \\ & 0 & & \\ & & ... & \\ & & & 0\end{bmatrix} V^Tx=\left \langle x\cdot v_1 \right \rangle v_1=\tilde x_1v_1
k→+∞limL~symkx=V⎣⎢⎢⎡10...0⎦⎥⎥⎤VTx=⟨x⋅v1⟩v1=x~1v1,其中
v
1
v_1
v1是
L
~
s
\tilde L_s
L~s的最小频率
λ
~
1
=
0
\tilde \lambda_1=0
λ~1=0对应的特征向量,
x
~
1
\tilde x_1
x~1表示信号
x
x
x在对应频率
λ
~
1
\tilde \lambda_1
λ~1的傅里叶系数。
由于 L ~ s D ~ 1 / 2 1 = D ~ − 1 / 2 L D ~ − 1 / 2 D ~ 1 / 2 1 = D ~ − 1 / 2 L 1 = D ~ − 1 / 2 0 = 0 \tilde L_s\tilde D^{1/2}1=\tilde D^{-1/2}L\tilde D^{-1/2}\tilde D^{1/2}1=\tilde D^{-1/2}L1=\tilde D^{-1/2}0=0 L~sD~1/21=D~−1/2LD~−1/2D~1/21=D~−1/2L1=D~−1/20=0,即 L ~ s ( D ~ 1 / 2 1 ) = 0 \tilde L_s(\tilde D^{1/2}1)=0 L~s(D~1/21)=0(这里使用了一个性质:拉普拉斯矩阵L存在值全为1的特征向量,其对应特征值为0)。
因此
v
1
=
D
~
1
/
2
1
v_1=\tilde D^{1/2}1
v1=D~1/21是
L
~
s
\tilde L_s
L~s在
λ
~
1
\tilde \lambda_1
λ~1处的特征向量,该向量是一个处处相等的向量。所以,如果对一个图信号不断执行平滑操作,图信号最终会变为处处相等,没有可区分性。
(没看懂,只记住了结论)
4.2 空域视角
从空域角度看,GCN的本质是在聚合邻居信息,对于图中的任意节点,节点的特征每更新一次,就多聚合了更高一阶邻居节点的信息。
如果把最高邻居节点的阶数称为该节点的聚合半径
,发现随着GCN层数的增加,节点的聚合半径也在增加,一旦达到某个阈值,该节点可覆盖的节点几乎与全图节点一致。同时,如果层数足够多,每个节点能覆盖到的节点都会收敛到全图节点,这与哪个节点无关。因此这样会降低每个节点的局部网络结构的多样性,不利于节点自身特征的学习。
如何应对过平滑?
基于聚合半径和模型层数的关系,提出了自适应性聚合半径的学习机制
,就是通过增加跳跃连接
来聚合模型的每层节点的输出,聚合后的节点特征拥有混合性的聚合半径,上层任务可对其进行选择性的监督学习。这样解决过平滑的同时又不影响节点结构信息的学习。
如上图所示,4层图模型的输出都会通过跳跃连接与最终的聚合层相连,聚合操作可以取如拼接
、平均池化
、最大池化
等。聚合层的输出作为整个模型的输出送到相应的监督任务中进行学习。
另一种方法是回到频率视角,去调节图滤波器的值。例如使用重新分配权重的方式来增加
A
~
\tilde A
A~中节点自连接的权重:
A
i
j
′
=
{
A
i
j
p
/
d
e
g
(
v
i
)
,
if
i
≠
j
1
−
p
,
if
i
=
j
A'_{ij}=\begin{cases}A_{ij}p/deg(v_i), & \text{ if } i\ne j \\1-p,& \text{ if } i = j\end{cases}
Aij′={Aijp/deg(vi),1−p, if i=j if i=j
即,通过调节p值对节点自身的权重进行重新分配。当p接近1时,模型趋向于不使用自身的信息,这加速了模型低通滤波的效果;当p接近0时,模型趋向于不聚合邻居的信息,也就减缓了模型低通滤波的效应。
参考资料
[1] 《深入浅出图神经网络:GNN原理解析》
[2] 从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi)
[3] CNN与GCN的区别、联系及融合
[4] 从CNN到GNN看图神经网络
[5] 什么是Weisfeiler-Lehman(WL)算法和WL Test?
[6] GNN教程:Weisfeiler-Leman算法
[7] Graph Isomorphism Network
[8] Graph Isomorphism Network Code