这是一篇GNN的综述, 发表于2021年的TNNLS. 这篇博客旨在对GNN的基本概念做一些记录.
论文地址: 论文
1. 引言, 背景与定义
对于图像数据来说, CNN具有平移不变性和局部连接性, 因此可以在欧氏空间上良好地学习. 然而, 对于具有图结构的数据(例如社交网络 化学分子等)就需要用GNN来学习.
最早期的GNN网络是遵循类似RNN的循环迭代式的(RecGNN), 主要的对象是DAG(有向无环图). 这个方式停止的条件是节点的表示趋于稳定.
后来发展出了卷积图网络(ConvGNN), 主要有基于谱域(频域)的和基于空域的. 除此之外, 还发展出了图自编码器(Graph autoencoders, GAEs)和时空(spatial-temporal)GNN.
因此这篇文章主要就把GNN分成了这四种:
- 循环GNN
- 卷积GNN
- 图自编码器
- 时空GNN
后面, 作者主要讲了GNN与两个任务的区别:
GNN与network embedding. network embedding旨在将一个网络的节点编码成低维度的向量表示, 并保持网络的拓扑结构不变, 这样降维之后, 一些分类, 聚类等任务, 就可以通过传统的机器学习方法实现(例如SVM). 因此, GNN和network embedding的关系是, GNN可以通过一个图自编码器来学习一个低维的表示, 即network embedding的任务. 总而言之, network embedding主要是通过降维来实现应用机器学习方法的目的.
GNN与图的核方法(graph kernel methods). 图的核方法主要是将一个图编码到一个向量空间, 以便应用SVM之类的任务(图的层面).
2. 分类和框架
如前所述, 本文将GNN分成了四类, 如下图所示:
节点分类任务的ConvGNN. 对于每一个节点, 在每次迭代中聚合它临近节点的信息(图卷积), 最后通过一个非线性变换对节点进行分类. 其中 X ∈ R n × d X\in\mathbb{R}^{n\times d} X∈Rn×d表示节点特征拼成的矩阵.
图分类任务的ConvGNN. 在图卷积操作后, 使用一个池化层, 将图粗糙化成一个子图, 得到图的高阶表示(higher representations). 最后用一个readout函数, 对图进行分类.
用于network embedding的图自编码器. 先用图卷积得到每个节点的embedding, 然后解码器在给定embedding的情况下计算成对距离. 在应用非线性激活函数后, 解码器重构图邻接矩阵. 通过最小化真实邻接矩阵与重构邻接矩阵之间的差异来训练网络.
时空GNN. 对每个timestep的GNN都应用卷积, 随后跟一个 1D-CNN 层对时序特征进行提取. 输出层是一个线性变换,为每个节点生成一个预测,例如它在下一个时间步的未来值.
3. 循环GNN
循环GNN一般都是GNN早期的开山之作, 由于计算量的限制, 一般都是应用于有向无环图的. The Graph Neural Network Model(IEEE Trans. Neural Network, 2009)
提出了一个更具有普适性的方式, 可以应用于各种图. 节点更新方式如下式:
为了保证收敛性,
f
f
f必须是一个收缩映射. 如果
f
f
f是神经网络的话, 则必须加入罚项.
除此之外, 门控GNNGated graph sequence neural networks, (arxiv, 2015)
将门控单元(GRU)作为上述的
f
f
f函数, 减少了收敛时间. 其节点更新用上一个隐藏态和临近节点隐藏态的线性映射组成, 如下式:
h v ( t ) = G R U ( h v ( t − 1 ) , ∑ u ∈ N ( v ) W h u ( t − 1 ) ) h_v^{(t)} = GRU(h_v^{(t - 1)}, \sum_{u\in N(v)}Wh_u^{(t-1)}) hv(t)=GRU(hv(t−1),u∈N(v)∑Whu(t−1))
这个网络的训练用通过时间的反向传播(RNN的反向传播方式)进行梯度下降.
总体来说, 循环GNN的方式类似RNN, 是作用于离散的节点上面. 但是循环GNN每次(层)用的更新函数 f f f是同一个, 因此必须保证收敛性.
4. 卷积GNN
与循环GNN不同, 卷积GNN的每一层都是可学习的不同参数, 具有固定层数, 和循环GNN区别如下:
卷积GNN基本分为两类, 基于谱的(频域的)和基于空域的.
A. 基于谱的卷积GNN
基于谱的GNN基本对于无向图而言, 我们可以用(归一化的)图Laplace矩阵唯一的表示这个图的拓扑性质:
L = I n − D − 1 / 2 A D − 1 / 2 L = I_n - D^{-1/2}AD^{-1/2} L=In−D−1/2AD−1/2
其中 D D D为对角矩阵, 每个对角元素为邻接阵对应行的和, 也就是这个节点的度.
我们可以看出, 对于Laplace矩阵的 ( i , j ) (i, j) (i,j)个元素:
如果 i = j i=j i=j, a i , j = 0 , d i , j = d e g ( v i ) , l i , j = 1 a_{i,j} = 0, d_{i,j} = deg(v_i), l_{i,j} = 1 ai,j=0,di,j=deg(vi),li,j=1
如果 i ≠ j i \ne j i=j, v i , v j v_i, v_j vi,vj不相连, a i , j = 0 , l i , j = 0 a_{i,j} = 0, l_{i,j} = 0 ai,j=0,li,j=0
如果 i ≠ j i \ne j i=j, v i , v j v_i, v_j vi,vj相连, a i , j = 1 , l i , j = − 1 / d e g ( v i ) d e g ( v j ) a_{i,j} = 1, l_{i,j} = -1/\sqrt{deg(v_i)deg(v_j)} ai,j=1,li,j=−1/deg(vi)deg(vj)
因此, 图Laplace矩阵可以唯一表示图
容易看出Laplace矩阵是实对称的, 因此是半正定的, 因此具有非负特征值. 我们可以对其做特征值分解:
L = U Λ U T L = U \Lambda U^T L=UΛUT
因此我们可以基于Laplace矩阵的特征值分解定义图的Fourier变换:
F ( x ^ ) = U T x ^ \mathcal{F}(\hat{x}) = U^T\hat{x} F(x^)=UTx^
由于 U U T = I UU^T = I UUT=I, 因此可以立即定义图的逆Fourier变换:
F − 1 ( x ) = U x \mathcal{F}^{-1}(x)=Ux F−1(x)=Ux
所以图Fourier变换实际上就是将图信号 x x x投影到一个标准正交基构成的空间中, 换句话说, x x x可以表示成 U U U的列向量的线性组合: x = ∑ i x ^ i u i x = \sum_i \hat{x}_iu_i x=∑ix^iui, 这就是正 逆Fourier变换的关系(和信号处理中的一致).
我们考虑将图信号经过滤波器, 根据卷积定理(时域卷积的Fourier变换对应频域乘积), 有:
x
∗
g
=
F
−
1
(
F
(
x
)
⊙
F
(
g
)
)
=
U
(
U
T
x
⊙
U
T
g
)
x * g = \mathcal{F}^{-1}(\mathcal{F}(x) \odot \mathcal{F}(g)) \\ = U(U^Tx \odot U^T g)
x∗g=F−1(F(x)⊙F(g))=U(UTx⊙UTg)
其中
⊙
\odot
⊙表示element-wise乘法. 如果我们记
g
θ
=
d
i
a
g
(
U
T
g
)
g_{\theta} = diag(U^Tg)
gθ=diag(UTg), 则
U
T
x
⊙
U
T
g
=
g
θ
U
T
x
U^Tx \odot U^Tg = g_{\theta}U^Tx
UTx⊙UTg=gθUTx, 所以
x ∗ g = U g θ U T x x * g = Ug_{\theta}U^Tx x∗g=UgθUTx
谱GNN的关键在于如何选择滤波器 g θ g_{\theta} gθ.
在实际中, 我们考虑网络的第 k k k层, 输入和输出的通道数分别为 f k − 1 , f k f_{k-1}, f_k fk−1,fk, 则该层第 j j j个通道的输出为:
H : , j ( k ) = σ ( ∑ i = 1 f k − 1 U Θ i , j ( k ) U T H : , i ( k − 1 ) ) ∈ R n H^{(k)}_{:, j} = \sigma(\sum_{i=1}^{f_{k-1}}U\Theta_{i,j}^{(k)}U^TH^{(k-1)}_{:, i}) \in \mathbb{R}^n H:,j(k)=σ(i=1∑fk−1UΘi,j(k)UTH:,i(k−1))∈Rn
其中 Θ i , j ( k ) \Theta_{i,j}^{(k)} Θi,j(k)是对角阵, 对角元素为一组可学习的参数.
然而, 这样的方式有三个缺点:
- 图的任何扰动对特征值和特征向量的影响都很大(特征值分解的性质)
- 学习到的滤波器是域相关的, 这意味着它们不能应用于具有不同结构的图.
- 特征值分解的复杂度很高( O ( n 3 ) O(n^3) O(n3)).
为了解决复杂度高的问题, ChebNet和GCN经过几个简化将复杂度降为线性复杂度. ChebNet用Chebyshev多项式来估计滤波器 g θ g_{\theta} gθ, 即
g
θ
=
∑
i
=
1
K
θ
i
T
i
(
Λ
~
)
,
Λ
~
=
2
Λ
/
λ
m
a
x
−
I
n
g_\theta = \sum_{i=1}^K \theta_i T_i(\tilde{\Lambda}), ~~\tilde{\Lambda} = 2\Lambda / \lambda_{max} - I_n
gθ=i=1∑KθiTi(Λ~), Λ~=2Λ/λmax−In
这样
Λ
~
\tilde{\Lambda}
Λ~中的值都落在
[
−
1
,
1
]
[-1, 1]
[−1,1]内.
T
i
(
x
)
T_i(x)
Ti(x)表示Chebyshev多项式, 按照如下递推定义:
T 0 ( x ) = 1 T_0(x) = 1 T0(x)=1
T 1 ( x ) = x T_1(x) = x T1(x)=x
T i ( x ) = 2 x T i − 1 ( x ) − T i − 2 ( x ) T_i(x) = 2xT_{i - 1}(x) - T_{i - 2}(x) Ti(x)=2xTi−1(x)−Ti−2(x)
带入, 就得到按照Chebyshev多项式估计的图卷积结果如下:
x ∗ g = U ( ∑ i = 1 K θ i T i ( Λ ~ ) ) U T x x * g = U(\sum_{i=1}^K \theta_i T_i(\tilde{\Lambda}))U^Tx x∗g=U(i=1∑KθiTi(Λ~))UTx
可以用数学归纳法证明拉普拉斯矩阵的Chebyshev多项式矩阵和特征值矩阵具有如下关系(?):
T i ( L ~ ) = U T i ( Λ ~ ) U T , L ~ = 2 L / λ m a x − I n T_i(\tilde{L}) = UT_i(\tilde{\Lambda})U^T, ~~ \tilde{L} = 2L / \lambda_{max} - I_n Ti(L~)=UTi(Λ~)UT, L~=2L/λmax−In
因此有
x ∗ g = U ( ∑ i = 1 K θ i T i ( Λ ~ ) ) U T x = ∑ i = 1 K θ i T i ( L ~ ) x x * g = U(\sum_{i=1}^K \theta_i T_i(\tilde{\Lambda}))U^Tx = \sum_{i=1}^K \theta_i T_i(\tilde{L})x x∗g=U(i=1∑KθiTi(Λ~))UTx=i=1∑KθiTi(L~)x
ChebNet 定义的过滤器在空间上是局部的, 这意味着过滤器可以独立于图大小提取局部特征. ChebNet的频谱线性映射到[−1,1].
下面再来看经典的图卷积网络GCN. GCN是ChebNet的简化, 取了 K = 1 K = 1 K=1, 并且假定最大特征值为2, 得到
x ∗ g = θ 0 x + θ 1 ( 2 L / λ m a x − I n ) x = θ 0 x + θ 1 ( 2 ( I n − D − 1 / 2 A D − 1 / 2 ) / λ m a x − I n ) x ( λ m a x = 2 ) = θ 0 x − θ 1 D − 1 / 2 A D − 1 / 2 x x * g = \theta_0x + \theta_1 (2L / \lambda_{max} - I_n)x \\ = \theta_0x + \theta_1 (2( I_n - D^{-1/2}AD^{-1/2}) / \lambda_{max} - I_n)x \\ (\lambda_{max} = 2) = \theta_0x - \theta_1 D^{-1/2}AD^{-1/2}x x∗g=θ0x+θ1(2L/λmax−In)x=θ0x+θ1(2(In−D−1/2AD−1/2)/λmax−In)x(λmax=2)=θ0x−θ1D−1/2AD−1/2x
为了进一步减少参数量, 防止过拟合, 假定 θ = θ 0 = − θ 1 \theta = \theta_0 = -\theta_1 θ=θ0=−θ1, 立即有
x ∗ g = θ ( I n + D − 1 / 2 A D − 1 / 2 ) x x * g = \theta(I_n + D^{-1/2}AD^{-1/2})x x∗g=θ(In+D−1/2AD−1/2)x
在经验上, I n + D − 1 / 2 A D − 1 / 2 I_n + D^{-1/2}AD^{-1/2} In+D−1/2AD−1/2容易造成稳定性的问题, 因此GCN采用 D ~ − 1 / 2 A ~ D ~ − 1 / 2 \tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2} D~−1/2A~D~−1/2来代替, 其中 A ~ = A + I n , D ~ \tilde{A} = A + I_n, \tilde{D} A~=A+In,D~为 A ~ \tilde{A} A~的度矩阵.
对这种归一化的理解:
由于邻接矩阵的对角元素是0, 因此 θ ( I n + D − 1 / 2 A D − 1 / 2 ) x \theta(I_n + D^{-1/2}AD^{-1/2})x θ(In+D−1/2AD−1/2)x的第一项可以认为是聚合节点自身信息, 第二项可以认为是聚合邻近节点的信息. 然而这样会造成不稳定, 因此更改一下形式, 即直接添加self-loop也就是自环边, 也就相当于给邻接矩阵 A A A加上单位阵 I n I_n In.
后续跟进GCN的工作主要是对于对称矩阵的选取.
B. 基于空域的卷积GNN
实际上空域上对图进行卷积和在典型具有欧氏空间结构的图像上进行卷积是相似的, 如下图所示:
例如, NN4G在每一次迭代聚合一个节点和它邻居节点的信息, 如下式所示:
此外, 还有一种比较有意思的Diffusion GNN, 也就是将图卷积过程视为扩散过程. 在扩散过程中, 信息按照一定的概率从一个节点传入另一个节点, 这样的概率和节点的度有关, 如下式:
H ( k ) = f ( W ( k ) ⊙ P k X ) , P = D − 1 A H^{(k)} = f(W^{(k)} \odot P^kX), ~~P = D^{-1}A H(k)=f(W(k)⊙PkX), P=D−1A
P = D − 1 A P = D^{-1}A P=D−1A的意义是对于度大的点, 其信息传入相连邻居节点的就更多(权重大)
在Diffusion Graph Convolution中, 最后的结果是将中间结果加起来, 即:
H = ∑ k = 0 K f ( P k X W k ) H = \sum_{k=0}^Kf(P^kXW^k) H=k=0∑Kf(PkXWk)
PGC-DGCNN按照节点之间的距离学习权重, 也就是增强距离远的节点的作用. 具体地, 如果节点 v v v到节点 u u u的最短路长度为 j j j, 则记 S v , u ( j ) = 1 S_{v, u}^{(j)} = 1 Sv,u(j)=1, 否则为0.
另外, 还有一种形式的空域GNN, 也就是我们所熟知的消息传递. 消息传递可以解释成信息可以从节点沿着边进行传递, 一般通常来讲有固定的 K K K步迭代, 这样可以让信息传递的更远, 也就是有更大的感受野. 可以用如下公式表示:
然而, 对于graph-level的任务, 传统的消息传递无法区分不同的图结构. 为此, GIN通过调节中心节点的权重, 这样就区分了中心节点和邻居节点, 如下所示:
此外, 对于一个节点的邻居节点, 不同邻居的重要性也许是不同的, 因此GAT提出了图注意力机制, 将聚合时邻居节点的权重变成learnable的参数:
其中
α v u ( k ) = s o f t m a x ( g ( a T [ W ( k ) h v ( k − 1 ) ∣ ∣ W ( k ) h u ( k − 1 ) ] ) ) \alpha_{vu}^{(k)} = softmax(g(a^T[W^{(k)}h_{v}^{(k-1)}||W^{(k)}h_{u}^{(k-1)}])) αvu(k)=softmax(g(aT[W(k)hv(k−1)∣∣W(k)hu(k−1)]))
图池化层, 图自编码器待更新…