原文首发于个人站点 图卷积网络GCN(Graph Convolution Network)(三)详解三代图卷积网络理论
公众号:【DreamHub】
由于文章篇幅较长,因此将其分解为三部分:
前两篇介绍完图卷积网络的背景知识,现在正式引入GCN!
卷积定义
在泛函分析中,卷积是透过两个函数
f
f
f 和
g
g
g 生成第三个函数的一种数学算子,表示函数
f
f
f 与经过翻转和平移的
g
g
g 的乘积函数所围成的曲边梯形的面积,公式如下所示:
(
f
∗
g
)
(
t
)
=
def
∫
R
n
f
(
τ
)
g
(
t
−
τ
)
d
τ
(
1
)
(f * g)(t) \stackrel{\text { def }}{=} \int_{\mathbb{R}^{n}} f(\tau) g(t-\tau) d \tau \quad\quad\quad (1)
(f∗g)(t)= def ∫Rnf(τ)g(t−τ)dτ(1)
下面给出两幅图来直观理解上述公式,参考卷积解释:
以上是连续函数的卷积运算,对于离散卷积公式定义如下:
(
f
∗
g
)
[
n
]
=
∑
m
=
−
∞
∞
f
[
m
]
g
[
n
−
m
]
=
∑
m
=
−
∞
∞
f
[
n
−
m
]
g
[
m
]
(
2
)
(f * g)[n]=\sum_{m=-\infty}^{\infty} f[m] g[n-m]=\sum_{m=-\infty}^{\infty} f[n-m] g[m] \quad\quad\quad (2)
(f∗g)[n]=m=−∞∑∞f[m]g[n−m]=m=−∞∑∞f[n−m]g[m](2)
卷积除了直接计算这种方法,还可以根据卷积定理来计算。
卷积定理:在适当条件下,两个信号的卷积的傅立叶变换等于它们傅立叶变换的点积。例如,一个域(如时域)的卷积等于另一个域(如频域)的点乘:
F
{
f
∗
g
}
=
F
{
f
}
⋅
F
{
g
}
(
3
)
\mathcal{F}\{f * g\}=\mathcal{F}\{f\} \cdot \mathcal{F}\{g\} \quad\quad\quad (3)
F{f∗g}=F{f}⋅F{g}(3)
如果以
F
−
1
\mathcal{F}^{-1}
F−1 表示傅里叶逆变换,那么卷积计算可以重新表示为:
f
∗
g
=
F
−
1
{
F
{
f
}
⋅
F
{
g
}
}
(
4
)
f * g=\mathcal{F}^{-1}\{\mathcal{F}\{f\} \cdot \mathcal{F}\{g\}\} \quad\quad\quad (4)
f∗g=F−1{F{f}⋅F{g}}(4)
PS:利用卷积定理可以简化卷积的运算量。对于一个长度为 n n n 的序列,按照卷积的定义来计算则需要做 2 n − 1 2n-1 2n−1 组对位乘法,即时间复杂度为 O ( n 2 ) O(n^2) O(n2) ;而利用傅立叶变换后,只需要计算一组对位乘法,而且离散傅立叶变换有快速的算法(快速傅立叶变换),所以总的计算复杂度为 O ( n log n ) O(n\log n) O(nlogn)。
图卷积
谱图卷积的思想是:既然无法直接在空域对图进行卷积,那么将图信号映射到频域后再做卷积操作。
根据公式 (4)与文章图卷积网络GCN(Graph Convolution Network)(二)图上的傅里叶变换和逆变换 中图上的傅里叶变换公式,可得
(
f
∗
h
)
G
=
F
−
1
[
F
{
f
}
⋅
F
{
h
}
]
=
F
−
1
[
U
T
f
⋅
h
^
]
(
5
)
\begin{aligned} (f * h)_{G} &=\mathcal{F}^{-1}[\mathcal{F}\{f\} \cdot \mathcal{F}\{h\}] \\ &=\mathcal{F}^{-1}\left[\mathbf{U}^{T} f \cdot \hat{h}\right] \end{aligned} \quad\quad\quad (5)
(f∗h)G=F−1[F{f}⋅F{h}]=F−1[UTf⋅h^](5)
上式表示时域信号
f
f
f 和
h
h
h 的卷积等价于将信号转换到傅立叶域做点乘后再逆变换回来。其中,向量
f
f
f 与向量
h
^
\hat{h}
h^ 的元素点积,等价于将
h
^
\hat{h}
h^ 组织成对角矩阵的形式进行矩阵乘法,可得:
(
f
∗
h
)
G
=
F
−
1
[
U
T
f
⋅
h
^
]
=
F
−
1
[
diag
[
h
^
1
,
…
,
h
^
n
]
U
T
f
]
(
6
)
\begin{aligned} (f * h)_{G} &=\mathcal{F}^{-1}\left[\mathbf{U}^{T} f \cdot \hat{h}\right] \\ &=\mathcal{F}^{-1}\left[\operatorname{diag}\left[\hat{h}_{1}, \ldots, \hat{h}_{n}\right] \mathbf{U}^{T} f\right] \end{aligned}\quad\quad\quad (6)
(f∗h)G=F−1[UTf⋅h^]=F−1[diag[h^1,…,h^n]UTf](6)
根据图上的逆变换计算公式,上式做成
U
\mathbf{U}
U可得:
(
f
∗
h
)
G
=
U
diag
[
h
^
1
,
…
,
h
^
n
]
U
T
f
(
7
)
(f * h)_{G}=\mathbf{U} \operatorname{diag}\left[\hat{h}_{1}, \ldots, \hat{h}_{n}\right] \mathbf{U}^{T} f\quad\quad\quad (7)
(f∗h)G=Udiag[h^1,…,h^n]UTf(7)
也可以写成写成矩阵形式为:
(
f
∗
h
)
G
=
U
(
(
U
T
f
)
(
U
T
h
)
)
(
8
)
(f*h)_G=\mathbf{U} ((\mathbf{U} ^Tf)(\mathbf{U} ^Th)) \quad\quad\quad (8)
(f∗h)G=U((UTf)(UTh))(8)
目前先不写成式 (8) 的形式,是因为在 GCN 中我们的卷积核是可训练并且参数共享的,所以在此我们可以直接令 diag [ h ^ 1 , … , h ^ n ] = diag [ θ 1 , … , θ n ] = g θ ( 9 ) \operatorname{diag}\left[\hat{h}_{1}, \ldots, \hat{h}_{n}\right] =\operatorname{diag}\left[\theta_{1}, \ldots, \theta_{n}\right] = g_{\theta} \quad\quad\quad (9) diag[h^1,…,h^n]=diag[θ1,…,θn]=gθ(9)
这就是深度学习中的可学习参数。
第一代图卷积
论文来源:《Spectral Networks and Deep Locally Connected Networks on Graphs》
第一代图卷积的计算方法就直接根据式(7)(9)推出
y
=
σ
(
U
g
θ
U
T
x
)
=
σ
(
U
[
θ
1
θ
2
⋯
θ
N
]
U
T
x
)
(
10
)
y=\sigma\left(\mathbf{U}g_{\theta}\mathbf{U}^{T} x\right)= \sigma (\mathbf{U} \begin{bmatrix} {{\theta_1}}{\quad}{\quad}{\quad}{\quad}\\ {{\theta_2}}{\quad}{\quad}\\ {{\quad}\cdots}\\ {{\quad}{\quad}{\quad}{\quad}{\theta_N}}\\ \end{bmatrix} \mathbf{U}^Tx) \quad\quad\quad (10)
y=σ(UgθUTx)=σ(U⎣⎢⎢⎡θ1θ2⋯θN⎦⎥⎥⎤UTx)(10)
虽然利用上式已经可以构造深度网络进行图卷积运算了,但该版本有不少缺点:
- 没有local信息。每次卷积都是所有顶点都参与运算,没有实现局部卷积和参数共享。
- 运算量大。每次卷积都要进行拉普拉斯矩阵分解和矩阵相乘,计算复杂度为 O ( N 3 ) O(N^3) O(N3)。
- 参数量大。每个卷积核参数量为 O ( N ) O(N) O(N)。
第二代图卷积
文章来源:
《Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering》
针对第一代图卷积中存在的问题,学者基于切比雪夫多项式提出第二代GCN:ChbeyNet
首先回顾下图傅里叶计算公式:
F
T
(
λ
k
)
=
g
^
k
=
∑
i
=
1
N
g
(
i
)
u
k
(
i
)
(
11
)
\mathcal{F}_{T}\left(\lambda_{k}\right)=\hat{g}_{k}=\sum_{i=1}^{N} g(i) u_{k}(i) \quad\quad\quad (11)
FT(λk)=g^k=i=1∑Ng(i)uk(i)(11)
可知函数和特征值密切相关,令
g
θ
g_{\theta}
gθ 为拉普拉斯矩阵
L
L
L 的特征值函数
g
θ
(
Λ
)
g_{\theta}(\Lambda)
gθ(Λ):
y
=
σ
(
U
g
θ
U
T
x
)
=
σ
(
U
g
θ
(
Λ
)
U
T
x
)
(
12
)
y=\sigma\left(\mathbf{U} g_{\theta} \mathbf{U}^{T} x\right)=\sigma\left(\mathbf{U} g_{\theta}(\Lambda) \mathbf{U}^{T} x\right) \quad\quad\quad (12)
y=σ(UgθUTx)=σ(Ugθ(Λ)UTx)(12)
以拉普拉斯矩阵的特征值作为卷积核同样存在缺陷:
- 不具备局部连接性;
- 时间复杂度为 O ( n ) O(n) O(n);
为了克服上述缺陷引入
K
K
K 阶多项式:
g
θ
(
Λ
)
≈
∑
k
=
0
K
−
1
θ
k
Λ
k
(
13
)
g_{\theta}(\Lambda) \approx \sum_{k=0}^{K-1} \theta_{k} \Lambda^{k}\quad\quad\quad (13)
gθ(Λ)≈k=0∑K−1θkΛk(13)
其中,参数 θ k ∈ R K \theta_k\in R^K θk∈RK 是多项式系数,因此滤波器具有了 K K K 阶局部性,复杂度也降低到 O ( K ) O(K) O(K)。
将式代入第一代图卷积式(10)中可得:
y
=
σ
(
U
g
θ
(
Λ
)
U
T
x
)
=
σ
(
U
∑
k
=
0
K
−
1
θ
k
Λ
k
U
x
)
=
σ
(
∑
k
=
0
K
−
1
θ
k
L
k
x
)
(
14
)
y=\sigma\left(\mathbf{U} g_{\theta}(\Lambda) \mathbf{U}^{T} x\right)=\sigma\left(\mathbf{U} \sum_{k=0}^{K-1} \theta_{k} \Lambda^{k} \mathbf{U} x\right)=\sigma\left(\sum_{k=0}^{K-1} \theta_{k} L^{k} x\right)\quad\quad\quad (14)
y=σ(Ugθ(Λ)UTx)=σ(Uk=0∑K−1θkΛkUx)=σ(k=0∑K−1θkLkx)(14)
其中 σ \sigma σ 是激活函数,公式(14)的计算时间复杂度为 O ( K × N 2 ) O(K×N^2) O(K×N2) ,因为对于静态图而言 L L L 是固定的, L k L^k Lk 可以提前计算得到。如果使用稀疏矩阵乘法(pytorch里有封装),时间复杂度是 O ( K × ∣ E ∣ ) O(K×|E|) O(K×∣E∣) 其中 ∣ E ∣ |E| ∣E∣ 是稀疏矩阵中非零元的个数表示图中边的数量。 此时计算图卷积就不需要再乘上特征向量矩阵 U \mathbf{U} U,而是直接使用拉普拉斯矩阵 L L L 的 k k k 次方,就避免了进行特征分解。
因为
L
k
L^k
Lk 当
K
K
K 很大的时候并不稀疏(
∣
E
∣
|E|
∣E∣ 接近
N
2
N^2
N2 ),所以文中提出了利用切比雪夫多项式展开(任何
k
k
k次多项式都可以通过切比雪夫多项式展开)来近似
L
k
L^k
Lk ,切比雪夫多项式递归式为:
T
0
(
x
)
=
1
T
1
(
x
)
=
x
T
k
(
x
)
=
2
x
T
k
−
1
(
x
)
−
T
k
−
2
(
x
)
(
15
)
T_0(x)=1\\T_1(x)=x\\T_k(x)=2xT_{k-1}(x)-T_{k-2}(x) \quad\quad\quad (15)
T0(x)=1T1(x)=xTk(x)=2xTk−1(x)−Tk−2(x)(15)
因此根据上式可知:
g
θ
(
Λ
)
≈
∑
k
=
0
K
−
1
θ
k
T
k
(
Λ
~
)
(
16
)
g_{\theta}(\Lambda) \approx \sum_{k=0}^{K-1} \theta_{k} T_{k}(\widetilde{\Lambda})\quad\quad\quad (16)
gθ(Λ)≈k=0∑K−1θkTk(Λ
)(16)
其中, Λ ~ = 2 λ max Λ − I N \tilde{\Lambda}=\frac{2}{\lambda_{\max }} \Lambda-I_{N} Λ~=λmax2Λ−IN; λ max \lambda_{\max } λmax是指拉普拉斯矩阵 L L L的最大特征值。
PS:因为切比雪夫多项式的输入要在 [ − 1 , 1 ] [-1, 1] [−1,1] 之间,由于拉普拉斯矩阵的半正定性,所以所有的特征值都是大于等于 0 的,将其除以最大特征值可以将特征压缩到 [ 0 , 1 ] [0,1] [0,1] 区间内,现在需要将其压缩到 [ − 1 , 1 ] [-1, 1] [−1,1],所以我们有: Λ ~ = 2 λ max Λ − I N \tilde{\Lambda}=\frac{2}{\lambda_{\max }} \Lambda-I_{N} Λ~=λmax2Λ−IN。
我们将切比雪夫多项式引入到我们的卷积变换中:
g
θ
∗
x
≈
∑
k
=
0
K
−
1
θ
k
T
k
(
L
~
)
x
(
17
)
g_{\theta} * x \approx \sum_{k=0}^{K-1} \theta_{k} T_{k}(\widetilde{L}) x \quad\quad\quad (17)
gθ∗x≈k=0∑K−1θkTk(L
)x(17)
其中, L ~ = 2 λ max 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 ( N 3 ) O(N^3) O(N3) 可以降到 O ( K ∣ E ∣ ) O(K|E|) O(K∣E∣)。
- 引入K-hop感受野,可以捕捉局部特征。
第三代图卷积
文章来源:《Semi-supervised Classification with Graph Convolutional Networks》
第二代图卷积解决了拉普拉斯矩阵特征分解的问题,但是在计算图卷积操作时矩阵乘法时间复杂度为 O ( N 2 ) O(N^2) O(N2),在此基础上优化Kipf等人提出了目前流行的 GCN。
GCN 通过式(17)进行多层卷积层进行叠加,而每层都会逐点进行非线性叠加。考虑到时间复杂度问题,令 K = 2 K=2 K=2,也就是说得到了一个拉普拉斯算子的二阶近似函数。既可以对网络进行卷积操作计算量增加不大。通过叠加层数可以提升模型的非线性。
归一化的拉普拉斯矩阵的特征值区间为
[
0
,
2
]
[0, 2]
[0,2],令
λ
m
a
x
≈
2
,
K
=
2
{\lambda}_{max} \approx 2, K=2
λmax≈2,K=2 可得:
g
θ
∗
x
≈
θ
0
x
+
θ
1
(
L
−
I
N
)
x
=
θ
0
x
−
θ
1
D
−
1
2
A
D
−
1
2
x
(
18
)
g_{\theta} * x \approx \theta_{0} x+\theta_{1}\left(L-I_{N}\right) x=\theta_{0} x-\theta_{1} D^{-\frac{1}{2}} A D^{-\frac{1}{2}} x\quad\quad\quad (18)
gθ∗x≈θ0x+θ1(L−IN)x=θ0x−θ1D−21AD−21x(18)
其中, θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1是切比雪夫系数且仅存的两个参数!
在GCN的训练过程中需要规范化参数避免过拟合,令
θ
=
θ
0
′
=
−
θ
1
′
\theta=\theta_{0}^{\prime}=-\theta_{1}^{\prime}
θ=θ0′=−θ1′,由式可得:
g
θ
∗
x
≈
θ
(
I
N
+
D
−
1
2
A
D
−
1
2
)
x
(
19
)
g_{\theta} * x \approx \theta\left(I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}\right) x\quad\quad\quad (19)
gθ∗x≈θ(IN+D−21AD−21)x(19)
注意
I
N
+
D
−
1
2
A
D
−
1
2
I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}
IN+D−21AD−21的特征值范围在 [0, 2] 之间,所以如果在很深的网络中会引起梯度爆炸的问题,需要再次进行一次归一化(Renormalization trick):
I
N
+
D
−
1
2
A
D
−
1
2
→
D
~
−
1
2
A
~
D
~
−
1
2
,
D
~
i
i
=
∑
j
A
~
i
j
A
~
=
A
+
I
N
(
20
)
I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \rightarrow \widetilde{D}^{-\frac{1}{2}} \widetilde{A} \widetilde{D}^{-\frac{1}{2}} , \widetilde{D}_{i i}=\sum_{j} \widetilde{A}_{i j} \widetilde{A}=A+I_{N}\quad\quad\quad (20)
IN+D−21AD−21→D
−21A
D
−21,D
ii=j∑A
ijA
=A+IN(20)
把上式从标量推广到矩阵,对于输入顶点的向量
X
∈
R
N
×
C
X \in R^{N \times C}
X∈RN×C ,其中
N
N
N 为节点数,
C
C
C 为顶点的特征向量维度,可得:
Z
=
D
~
−
1
2
A
~
D
~
−
1
2
X
Θ
(
21
)
Z=\widetilde{D}^{-\frac{1}{2}} \widetilde{A} \widetilde{D}^{-\frac{1}{2}} X \Theta\quad\quad\quad (21)
Z=D
−21A
D
−21XΘ(21)
其中, Θ ∈ R C × F \Theta \in R^{C \times F} Θ∈RC×F是参数矩阵, Z ∈ R N × F Z \in R^{N \times F} Z∈RN×F是卷积后的顶点特征,时间复杂度为 O ( ∣ E ∣ F C ) O(|E|FC) O(∣E∣FC)。
根据上式一层卷积,多层图卷积计算公式公式为:
H
(
l
+
1
)
=
σ
(
D
~
−
1
2
A
~
D
~
−
1
2
H
(
l
)
W
(
l
)
)
(
22
)
H^{(l+1)}=\sigma\left(\widetilde{D}^{-\frac{1}{2}} \widetilde{A} \widetilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}\right)\quad\quad\quad (22)
H(l+1)=σ(D
−21A
D
−21H(l)W(l))(22)
其中, A ~ = A + I N \widetilde{A}=A+I_{N} A =A+IN , A A A 为邻接矩阵, I N I_N IN 为单位矩阵,所以 A ~ \widetilde{A} A 为添加自连接的邻接矩阵; D ~ i i = ∑ j A ~ i j \widetilde{D}_{i i}=\sum_{j} \widetilde{A}_{i j} D ii=∑jA ij , D ~ \widetilde{D} D 为顶点的度数矩阵; W ( l ) W^{(l)} W(l) 为神经网络第 l l l 层的权重矩阵; σ ( ⋅ ) \sigma(\cdot) σ(⋅) 是激活函数; H ( l ) ∈ R N × D H^{(l)} \in R^{N \times D} H(l)∈RN×D 是第 l l l 层的激活矩阵,并且 H ( 0 ) = X H^{(0)}=X H(0)=X , X X X 是由顶点的特征向量组成矩阵。
总结第三代图卷积:
- 令K=1,相当于只考虑1-hop 邻点。通过堆叠层数来增加感受野。
- 每层计算复杂度降低为 O ( ∣ E ∣ ) O(|E|) O(∣E∣)。
总结
CNN 中的卷积无法直接应用于网络图中,所以引出了谱图理论和图中的傅里叶变换,进而定义图卷积的计算方法,最后结合深度学习发展出来 GCN。至此图卷积GCN的理论推导三部曲完成,接下来就开启应用篇吧!