GCN相对来说还是比较新的。第一代GCN在2014年的论文 Spectral Networks and Deep Locally Connected Networks on Graphs 中被提出。2017年,一阶ChebNet(1stChebNet)在堪称GCN的开山之作的论文 Semi-supervised classification with Graph convolutional networks 中被提出,之后后面很多变种都是基于这篇文章的。
参考知乎:图拉普拉斯算子为何定义为D-W,文章从类比的角度,以差分的思路解释了 L L L = D − A D-A D−A 的原因。
对 Graph Laplacian L L L 做操作的方法,都可以归类为 GCN 的 spectral 的方法。
Graph Laplacian L L L (图拉普拉斯) 的来源是拉普拉斯算子。拉普拉斯算子数学定义是这样的:
Δ = ∑ i δ 2 δ x i 2 (1.1) \Delta=\sum_i \frac{\delta^2}{\delta x_i^2} \tag{1.1} Δ=i∑δxi2δ2(1.1)
含义是非混合二阶偏导数的和。
类比图像处理,图像是一种离散数据,那么其拉普拉斯算子必然要进行离散化。拉普拉斯矩阵也叫做离散的拉普拉斯算子。
从导数的定义说起。对于一维信号 f ( x ) f(x) f(x)(比如语音信号):
f ′ ( x ) = δ f ( x ) δ x ≈ f ( x + 1 ) − f ( x ) (1.2) \begin{aligned} f'(x) &=\frac{\delta f(x)}{\delta x} \\ &\approx f(x+1)-f(x) \end{aligned} \tag{1.2} f′(x)=δxδf(x)≈f(x+1)−f(x)(1.2)
那么其拉普拉斯算子为:
δ 2 f ( x ) δ x 2 = f ′ ′ ( x ) ≈ f ′ ( x ) − f ′ ( x − 1 ) ≈ [ f ( x + 1 ) − f ( x ) ] − [ f ( x ) − f ( x − 1 ) ] = f ( x + 1 ) + f ( x − 1 ) − 2 f ( x ) (1.3) \begin{aligned} \frac{\delta^2 f(x)}{\delta x^2} &= f''(x) \\ &\approx f'(x)-f'(x-1) \\ &\approx [f(x+1)-f(x)] - [f(x)-f(x-1)] \\ &=f(x+1) + f(x-1) - 2f(x) \end{aligned} \tag{1.3} δx2δ2f(x)=f′′(x)≈f′(x)−f′(x−1)≈[f(x+1)−f(x)]−[f(x)−f(x−1)]=f(x+1)+f(x−1)−2f(x)(1.3)
结论1:二阶导数近似等于其二阶差分。
结论2:二阶导数等于其在所有自由度上微扰之后获得的增益。一维函数其自由度可以理解为2,分别是+1和-1两个方向。
对于二维信号(比如图像)来说,其有两个方向(4个自由度)可以变化,即如果对(x,y)处的像素进行扰动,其可以变为四种状态(x+1,y),(x-1,y),(x,y+1),(x,y-1) 。当然了,如果将对角线方向也认为是一个自由度的话,会再增加几种状态(x+1,y+1),(x+1,y-1),(x-1,y+1),(x-1,y-1),事实上图像处理上正是这种。
以4个自由度来说,其拉普拉斯算子为:
Δ = δ 2 f ( x , y ) δ x 2 + δ 2 f ( x , y ) δ y 2 ≈ [ f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) ] + [ f ( x , y + 1 ) + f ( x , y − 1 ) − 2 f ( x , y ) ] = f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) − 4 f ( x , y ) (1.4) \begin{aligned} \Delta &= \frac{\delta^2 f(x,y)}{\delta x^2} + \frac{\delta^2 f(x,y)}{\delta y^2}\\ &\approx [f(x+1,y) + f(x-1,y) - 2f(x,y)] + [f(x,y+1) + f(x,y-1) - 2f(x,y)]\\ &=f(x+1,y) + f(x-1,y) + f(x,y+1) + f(x,y-1) - 4f(x,y) \end{aligned} \tag{1.4} Δ=δx2δ2f(x,y)+δy2δ2f(x,y)≈[f(x+1,y)+f(x−1,y)−2f(x,y)]+[f(x,y+1)+f(x,y−1)−2f(x,y)]=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)(1.4)
上式可以理解为,在图像上某一点,其拉普拉斯算子的值,即为对其进行扰动,使其变化到相邻像素后得到的增益。
这给我们一种形象的结论:拉普拉斯算子就是在所有自由度上进行微小变化后获得的增益。
那么推广到Graph,对于有 N N N个节点的Graph,设节点为 1 , ⋯ , N 1,\cdots,N 1,⋯,N 吧,且其邻接矩阵为 W W W。
那么Graph的自由度**最多为N。**即任意两个节点之间都有一条边,那么对一个节点进行微扰,它可能变成任意一个节点。
上面的函数f就理所当然是一个 N N N维的向量,即:
f = ( f 1 , ⋯ , f N ) f=(f_1 , \cdots, f_N) f=(f1,⋯,fN)
其中 f i f_i fi 表示函数 f f f 在节点 i i i 的值 (其实为该节点的feature)。类比 f ( x , y ) f(x,y) f(x,y) 即为 f f f 在 ( x , y ) (x,y) (x,y) 处的值。
结合之前的结论,拉普拉斯算子就是在所有自由度上进行微小变化后获得的增益。
对于Graph,文章提出使用边权相关 W i , j W_{i,j} Wi,j 来表征从节点 i i i 变化到节点 j j j 增益 f j − f i f_j - f_i fj−fi。
那么,对于节点i来说,其变化的增益就是:
∑ j ∈ N i W i , j [ f j − f i ] \sum_{j \in \mathcal{N}_i} W_{i,j} [f_j-f_i] j∈Ni∑Wi,j[fj−fi]
所以,对于Graph来说,其拉普拉斯算子如下:
Δ = ∑ i δ 2 f δ i 2 ≈ ∑ j ∈ N i W i , j [ f j − f i ] (1.5) \begin{aligned} \Delta &= \sum _i \frac{\delta^2 f}{\delta i^2} \\ &\approx \sum_{j \in \mathcal{N}_i} W_{i,j} [f_j-f_i] \end{aligned} \tag{1.5} Δ=i∑δi2δ2f≈j∈Ni∑Wi,j[fj−fi](1.5)
由于节点 i i i 和 j j j 不直接相邻的话, W i , j W_{i,j} Wi,j 为0,所以省略上式的 j ∈ N i j \in \mathcal{N}_i j∈Ni ,得到:
∑ j ∈ N i W i , j [ f j − f i ] = ∑ j W i , j f j − ∑ j W i , j f i (1.6) \begin{aligned} \sum_{j \in \mathcal{N}_i} W_{i,j} [f_j-f_i] &= \sum_j W_{i,j}f_j - \sum_j W_{i,j}f_i \\ \end{aligned} \tag{1.6} j∈Ni∑Wi,j[fj−fi]=j∑Wi,jfj−j∑Wi,jfi(1.6)
对于前一项 $ \sum_j W_{i,j}f_j , , ,W_{i,j}$ 和 f j f_j fj 都与求和变量 j j j 有关,而积分结果仅与 i i i 有关,所以:
∑ j W i , j f j = ( W f ) i \sum_j W_{i,j}f_j = (Wf)_i j∑Wi,jfj=(Wf)i
对于后一项 ∑ j W i , j f i \sum_j W_{i,j}f_i ∑jWi,jfi,仅 W i , j W_{i,j} Wi,j 与求和变量 j j j 有关,而积分结果仅与 i i i 有关,所以:
∑ j W i , j f i = f i ∑ j W i , j = f i D = ( D f ) i \begin{aligned} \sum_j W_{i,j}f_i &= f_i \sum_j W_{i,j} \\ &=f_i D \\ &=(Df)_i \end{aligned} j∑Wi,jfi=fij∑Wi,j=fiD=(Df)i
所以 Equation 1.6 可以化简为:
∑ j ∈ N i W i , j [ f j − f i ] = ∑ j W i , j f j − ∑ j W i , j f i = ( W f ) i − ( D f ) i = ( W − D ) f i (1.7) \begin{aligned} \sum_{j \in \mathcal{N}_i} W_{i,j} [f_j-f_i] &= \sum_j W_{i,j}f_j - \sum_j W_{i,j}f_i \\ &= (Wf)_i - (Df)_i \\ &=(W-D) f_i \end{aligned} \tag{1.7} j∈Ni∑Wi,j[fj−fi]=j∑Wi,jfj−j∑Wi,jfi=(Wf)i−(Df)i=(W−D)fi(1.7)
即:
( Δ f ) i = [ ( W − D ) f ] i (1.8) (\Delta f)_i = [(W-D)f]_i \tag{1.8} (Δf)i=[(W−D)f]i(1.8)
对于任意的 i i i 成立,那么也就是:
Δ f ≡ ( W − D ) f (1.9) \Delta f \equiv (W-D)f \tag{1.9} Δf≡(W−D)f(1.9)
也就是图上的拉普拉斯算子应该定义为 W − D W-D W−D。
对于有权重图,邻接矩阵 A A A 以权重 W W W 的形式表示;对于无权重图来说, A A A 和 W W W 是一个东西。
关于 L = D − A L=D-A L=D−A,还是 L = A − D L=A-D L=A−D 的问题,其实二者都一样。原因在下一节中解释。
Graph Laplacian L L L 还有另一种常见的定义方式,即对称归一化的拉普拉斯矩阵 (Symmetric normalized Laplacian):
L s y s = D − 1 / 2 L D − 1 / 2 = I − D − 1 / 2 A D − 1 / 2 (1.10) L^{sys}=D^{−1/2} L D^{−1/2}=I−D^{−1/2}AD^{−1/2} \tag{1.10} Lsys=D−1/2LD−1/2=I−D−1/2AD−1/2(1.10)
上式是 L = D − A L=D-A L=D−A 的归一化形式,本质上还是 L = D − A L=D-A L=D−A,推导过程如下:
L = D − 1 / 2 ( D − A ) D − 1 / 2 = D − 1 / 2 D D − 1 / 2 − D − 1 / 2 A D − 1 / 2 = I N − D − 1 / 2 A D − 1 / 2 (1.11) \begin{aligned} L &= D^{-1/2} (D-A) D^{-1/2}\\ &= D^{-1/2}D D^{-1/2} - D^{-1/2}A D^{-1/2} \\ &=I_N- D^{-1/2}A D^{-1/2} \end{aligned} \tag{1.11} L=D−1/2(D−A)D−1/2=D−1/2DD−1/2−D−1/2AD−1/2=IN−D−1/2AD−1/2(1.11)
至此此节结束。
参考博客:图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新
- 5.傅里叶变换
- 6.Graph上的傅里叶变换及卷积
- 7.为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?特征值表示频率?
Graph Laplacian L L L 被应用于GCN的 spectral 方法。这种思路就是希望借助图谱的理论来实现拓扑图上的卷积操作,即根据卷积定理,借用频域的乘积来实现空间域的卷积。
为什么 Graph 的卷积操作要用 Graph Laplacian L L L 来实现呢?
这一节,我们通过类比的方式,将传统Fourier变换推广到Graph上,即从拉普拉斯算子 Δ \Delta Δ 的特征函数到拉普拉斯矩阵 L L L 的特征向量。
要理解GCN中的卷积操作 (spectral 方法),首先要从最简单的传统傅里叶变换说起:
F ( ω ) = F [ f ( x ) ] = ∫ − ∞ + ∞ f ( x ) e − i ω x d x (2.1) F( \omega ) = \mathcal{F}[f(x)] =∫_{−∞}^{+∞}f(x) e ^{−iωx} dx \tag{2.1} F(ω)=F[f(x)]=∫−∞+∞f(x)e−iωxdx(2.1)
对信号 f ( x ) f(x) f(x) 的傅立叶变换 F ( ω ) F(\omega) F(ω) 形式上是 f ( x ) f(x) f(x) 与基函数 e − i ω x e^{-i\omega x} e−iωx 的积分,而 e − i ω x e^{-i\omega x} e−iωx 就是拉普拉斯算子 Δ \Delta Δ 的特征函数。传统傅立叶变换的基,就是拉普拉斯矩阵的一组特征向量。
由此我们得到第一个重要结论:
傅里叶变换本质上将函数 f ( x ) f(x) f(x) 映射到了以拉普拉斯算子 Δ \Delta Δ 的特征函数 e − i ω x e^{-i\omega x} e−iωx 为基向量的空间中,即 original domain 的信号通过**拉普拉斯算子 Δ \Delta Δ 的特征函数 (基向量) **映射到 spectral domain。
所以,把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是找到映射所需的基向量。
传统傅里叶变换的基向量是拉普拉斯算子 Δ \Delta Δ 的特征函数,对应到Graph上,Graph的傅里叶变换的基向量就是拉普拉斯矩阵 L L L 的特征向量 U U U。
至此, 就解决了为什么要在图卷积中使用 Graph Laplacian 的问题。
至于它为什么好用,见 Section 6
参考博客:图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新
- 3.什么是拉普拉斯矩阵?
使用方法当然就是求 Graph Laplacian L L L 的特征向量,目的是实现Fourier变换,从而将空间域的信号转变到频域。
这要从 Graph Laplacian L L L 的性质出发。
无向图的拉普拉斯矩阵 L L L 有以下性质:
求 Graph Laplacian L L L 的特征向量的方法,就是特征分解(谱分解)。
特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。只有对可对角化矩阵或有n个线性无关的特征向量的矩阵才可以施以特征分解。
不是所有的矩阵都可以特征分解,其充要条件为n阶方阵存在n个线性无关的特征向量。
但是 Graph Laplacian L L L 是半正定矩阵(半正定矩阵本身就是对称矩阵),有如下三个性质:
由上拉普拉斯矩阵对称知一定可以谱分解,且分解后有特殊的形式。
L = U Λ U − 1 = U [ λ 1 ⋱ λ n ] U − 1 (3.1) L= U \Lambda U^{-1} = U \begin{bmatrix} \lambda_1 \\ & \ddots & \\ & & \lambda_n \end{bmatrix} U^{-1} \tag{3.1} L=UΛU−1=U⎣⎡λ1⋱λn⎦⎤U−1(3.1)
其中 U = ( u 1 ⃗ , u 2 ⃗ , ⋯ , u n ⃗ ) U=(\vec{u_1},\vec{u_2},\cdots,\vec{u_n}) U=(u1,u2,⋯,un)是列向量为单位特征向量的矩阵,也就说 $ \vec{u_l} $是列向量,Λ是n个特征值构成的对角阵。
由于 U U U 是正交矩阵,即 U U T = E UU^{T}=E UUT=E ,所以特征分解又可以写成:
L = U Λ U − 1 = U Λ U T (3.2) L= U \Lambda U^{-1} = U \Lambda U^{T} \tag{3.2} L=UΛU−1=UΛUT(3.2)
结合传统傅里叶变换,Graph上的Fourier变换为:
f ^ = U T f (4.1) \widehat{f} = U^T f \tag{4.1} f =UTf(4.1)
表示为矩阵形式为:
[ f ^ ( λ 1 ) f ^ ( λ 2 ) ⋮ f ^ ( λ N ) ] = [ u 1 ( λ 1 ) u 1 ( λ 2 ) ⋯ u 1 ( λ N ) u 2 ( λ 1 ) u 2 ( λ 2 ) ⋯ u 2 ( λ N ) ⋮ ⋮ ⋱ ⋮ u N ( λ 1 ) u N ( λ 2 ) ⋯ u N ( λ N ) ] [ f ( 1 ) f ( 2 ) ⋮ f ( N ) ] (4.2) \begin{bmatrix} \widehat{f}(\lambda_1) \\ \widehat{f}(\lambda_2) \\ \vdots \\ \widehat{f}(\lambda_N) \end{bmatrix}= \begin{bmatrix} u_1(\lambda_1) &u_1(\lambda_2) & \cdots & u_1(\lambda_N) \\ u_2(\lambda_1) &u_2(\lambda_2) & \cdots & u_2(\lambda_N) \\ \vdots & \vdots & \ddots & \vdots\\ u_N(\lambda_1) &u_N(\lambda_2) & \cdots & u_N(\lambda_N) \\ \end{bmatrix} \begin{bmatrix} f(1) \\ f(2) \\ \vdots \\ f(N) \end{bmatrix} \tag{4.2} ⎣⎢⎢⎢⎡f (λ1)f (λ2)⋮f (λN)⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡u1(λ1)u2(λ1)⋮uN(λ1)u1(λ2)u2(λ2)⋮uN(λ2)⋯⋯⋱⋯u1(λN)u2(λN)⋮uN(λN)⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡f(1)f(2)⋮f(N)⎦⎥⎥⎥⎤(4.2)
相应的,Graph上的Fourier反变换为:
f = U f ^ (4.3) f = U \widehat{f} \tag{4.3} f=Uf (4.3)
表示为矩阵形式为:
[ f ( 1 ) f ( 2 ) ⋮ f ( N ) ] = [ u 1 ( λ 1 ) u 2 ( λ 2 ) ⋯ u N ( λ N ) u 1 ( λ 1 ) u 2 ( λ 2 ) ⋯ u N ( λ N ) ⋮ ⋮ ⋱ ⋮ u 1 ( λ 1 ) u 2 ( λ 2 ) ⋯ u N ( λ N ) ] [ f ^ ( λ 1 ) f ^ ( λ 2 ) ⋮ f ^ ( λ N ) ] (4.4) \begin{bmatrix} f(1) \\ f(2) \\ \vdots \\ f(N) \end{bmatrix}= \begin{bmatrix} u_1(\lambda_1) &u_2(\lambda_2) & \cdots & u_N(\lambda_N) \\ u_1(\lambda_1) &u_2(\lambda_2) & \cdots & u_N(\lambda_N) \\ \vdots & \vdots & \ddots & \vdots\\ u_1(\lambda_1) &u_2(\lambda_2) & \cdots & u_N(\lambda_N) \\ \end{bmatrix} \begin{bmatrix} \widehat{f}(\lambda_1) \\ \widehat{f}(\lambda_2) \\ \vdots \\ \widehat{f}(\lambda_N) \end{bmatrix} \tag{4.4} ⎣⎢⎢⎢⎡f(1)f(2)⋮f(N)⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡u1(λ1)u1(λ1)⋮u1(λ1)u2(λ2)u2(λ2)⋮u2(λ2)⋯⋯⋱⋯uN(λN)uN(λN)⋮uN(λN)⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡f (λ1)f (λ2)⋮f (λN)⎦⎥⎥⎥⎤(4.4)
卷积定理:
F ( f ( t ) ∗ g ( t ) ) = F ( ω ) ⋅ G ( ω ) (5.1) \mathcal{F} (f(t)*g(t)) = F (\omega)·G(\omega) \tag{5.1} F(f(t)∗g(t))=F(ω)⋅G(ω)(5.1)
所以Graph上的卷积可以表示为:
( f ∗ g ) G = U [ ( U T g ) ⊙ ( U T f ) ] (5.2) (f*g)_G = U[ (U^T g) \odot (U^T f) ] \tag{5.2} (f∗g)G=U[(UTg)⊙(UTf)](5.2)
如果把 U T g U^Tg UTg 整体看作可学习的卷积核(频域滤波器),这里我们把它写作 g θ g_\theta gθ。最终图上的卷积公式即是:
( f ∗ g ) G = U g θ U T f (5.3) (f*g)_G = U g_\theta U^T f \tag{5.3} (f∗g)G=UgθUTf(5.3)
有的地方,还把 g θ = U T g g_\theta = U^Tg gθ=UTg 写成对角矩阵的形式,即定义一个滤波 g θ = d i a g ( U T g ) g_\theta = diag(U^Tg) gθ=diag(UTg),则图卷积就可以表示为:
f ∗ g θ = U g θ U T f = U [ g ^ ( λ 1 ) ⋱ g ^ ( λ N ) ] U T f (5.4) f*g_\theta = Ug_\theta U^Tf = U \begin{bmatrix} \widehat{g}(\lambda_1) \\ & \ddots & \\ & & \widehat{g}(\lambda_N) \end{bmatrix} U^Tf \tag{5.4} f∗gθ=UgθUTf=U⎣⎡g (λ1)⋱g (λN)⎦⎤UTf(5.4)
参考博客:图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新
- 7.为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?特征值表示频率?
傅里叶变换一个本质理解就是:把任意一个函数表示成了若干个正交函数(由sin,cos 构成)的线性组合。
f f f 在Graph上傅里叶逆变换 f = U f ^ f=U \widehat{f} f=Uf 的矩阵形式 (Equation 4.4):
[ f ( 1 ) f ( 2 ) ⋮ f ( N ) ] = [ u 1 ( λ 1 ) u 2 ( λ 2 ) ⋯ u N ( λ N ) u 1 ( λ 1 ) u 2 ( λ 2 ) ⋯ u N ( λ N ) ⋮ ⋮ ⋱ ⋮ u 1 ( λ 1 ) u 2 ( λ 2 ) ⋯ u N ( λ N ) ] [ f ^ ( λ 1 ) f ^ ( λ 2 ) ⋮ f ^ ( λ N ) ] (4.4) \begin{bmatrix} f(1) \\ f(2) \\ \vdots \\ f(N) \end{bmatrix}= \begin{bmatrix} u_1(\lambda_1) &u_2(\lambda_2) & \cdots & u_N(\lambda_N) \\ u_1(\lambda_1) &u_2(\lambda_2) & \cdots & u_N(\lambda_N) \\ \vdots & \vdots & \ddots & \vdots\\ u_1(\lambda_1) &u_2(\lambda_2) & \cdots & u_N(\lambda_N) \\ \end{bmatrix} \begin{bmatrix} \widehat{f}(\lambda_1) \\ \widehat{f}(\lambda_2) \\ \vdots \\ \widehat{f}(\lambda_N) \end{bmatrix} \tag{4.4} ⎣⎢⎢⎢⎡f(1)f(2)⋮f(N)⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡u1(λ1)u1(λ1)⋮u1(λ1)u2(λ2)u2(λ2)⋮u2(λ2)⋯⋯⋱⋯uN(λN)uN(λN)⋮uN(λN)⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡f (λ1)f (λ2)⋮f (λN)⎦⎥⎥⎥⎤(4.4)
可以看出,Graph傅里叶变换把Graph上定义的任意向量 f f f ,表示成了拉普拉斯矩阵 L L L 特征向量的线性组合,即:
f = f ^ ( λ 1 ) u 1 ( λ 1 ) + f ^ ( λ 2 ) u 2 ( λ 2 ) + ⋯ + f ^ ( λ n ) u n ( λ n ) (6.1) f = \widehat{f}(\lambda_1) u_1(\lambda_1) +\widehat{f}(\lambda_2) u_2(\lambda_2) +\cdots +\widehat{f}(\lambda_n) u_n(\lambda_n) \tag{6.1} f=f (λ1)u1(λ1)+f (λ2)u2(λ2)+⋯+f (λn)un(λn)(6.1)
那么:为什么graph上任意的向量f都可以表示成这样的线性组合?
原因在于 ( u 1 ⃗ , u 2 ⃗ , ⋯ , u n ⃗ ) (\vec{u_1},\vec{u_2},\cdots,\vec{u_n}) (u1,u2,⋯,un) 是graph上 n 维空间中的 n 个线性无关的正交向量(拉普拉斯矩阵是对称矩阵,必定可以进行特征分解,有n个线性无关的特征向量)。
由线性代数的知识可以知道:n 维空间中n 个线性无关的向量可以构成空间的一组基,而且拉普拉斯矩阵的特征向量还是一组正交基。
在Graph空间上无法可视化展示“频率”这个概念,那么从特征方程的角度上来抽象理解。如果通过类比的话,可以类比PCA算法对信息的保持。
将拉普拉斯矩阵 L L L 的 n 个非负实特征值,从小到大排列为 λ 1 ≤ λ 2 ≤ ⋯ ≤ λ N \lambda_1 \le \lambda_2 \le \cdots \le \lambda_N λ1≤λ2≤⋯≤λN,而且最小的特征值 λ 1 \lambda_1 λ1 为0。因为 n 维的全1向量对应的特征值为0(由 L L L 的定义就可以得出):
L [ 1 1 ⋮ 1 ] = 0 (6.2) L \begin{bmatrix} 1 \\ 1\\ \vdots \\ 1 \end{bmatrix} =0 \tag{6.2} L⎣⎢⎢⎢⎡11⋮1⎦⎥⎥⎥⎤=0(6.2)
从特征方程的数学理解来看:
L u = λ u (6.3) Lu=\lambda u \tag{6.3} Lu=λu(6.3)
在由Graph确定的 n 维空间中,越小的特征值 λ i \lambda_i λi 表明:拉普拉斯矩阵 L L L 其所对应的基, u i u_i ui 上的分量、“信息”越少,那么当然就是可以忽略的部分了。
注:原博客将小的特征值理解为低频成份,本人认为这样理解不太妥当。因为对于图像和语音信号来说,低频成份是有用的信息,高频成份是可以忽略的细节信息。也就是说,低频成份承载的信息多,高频成份承载的信息少。
但是原博客的“小特征值对于的特征向量承载的信息少”这一结论,我认为是没有问题的。
参考博客:图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新
- 8.深度学习中GCN的演变
最典型的 Graph Convolution 公式如下:
g θ ∗ x = U g θ U T x = U [ g ^ ( λ 1 ) ⋱ g ^ ( λ N ) ] U T x (7.1) g_{\theta} * x =U g_{\theta} U^Tx=U \begin{bmatrix} \widehat{g}(\lambda_1) \\ & \ddots & \\ & & \widehat{g}(\lambda_N) \end{bmatrix} U^T x \tag{7.1} gθ∗x=UgθUTx=U⎣⎡g (λ1)⋱g (λN)⎦⎤UTx(7.1)
Deep learning 中的Convolution就是要设计含有trainable共享参数的kernel。而上式中 g θ g_{\theta} gθ 就是可训练的参数 (kernel) 。
上式计算量很大,原因有二:
Spectral networks and locally connected networks on graphs 论文中提出第一代GCN,将图卷积操作定义为:
x k + 1 , j = h ( V ∑ i = 1 f k − 1 F k , i , j V T x k , i ) , ( j = 1 … f k ) (7.2) x_{k+1,j}=h (V\sum_{i=1}^{f_{k-1}} F_{k,i,j}V^T x_{k,i}) ,(j=1…f_k) \tag{7.2} xk+1,j=h(Vi=1∑fk−1Fk,i,jVTxk,i),(j=1…fk)(7.2)
第一代的参数方法存在着一些弊端,主要在于:
如果以单个图为样本,那么每个样本都需要进行 L L L 的特征分解求 U U U 矩阵;
每一次前向传播,都要计算 U U U, d i a g ( θ l ) diag(\theta_l ) diag(θl)和 U T U^T UT 三者的乘积,特别是对于大规模的Graph,计算的代价较高,需要 O ( n 2 ) \mathcal{O}(n^2) O(n2) 的计算复杂度。
由于以上的缺点第二代的卷积核设计应运而生。
Convolutional neural networks on graphs with fast localized spectral filtering 提出对下式:
KaTeX parse error: Undefined control sequence: \notag at position 37: …{\theta} U^Tx \̲n̲o̲t̲a̲g̲ ̲
中的滤波器以特征向量对角矩阵的切比雪夫多项式等效(利用Chebyshev多项式拟合卷积核的方法,来降低计算复杂度),也就是:
g θ = g θ ( Λ ) ≈ ∑ i = 0 K − 1 θ i T k ( Λ ~ ) (7.3) g_{\theta} = g_{\theta}( \Lambda ) \approx \sum_{i=0}^{K-1} \theta_{i} T_k(\widetilde{\Lambda}) \tag{7.3} gθ=gθ(Λ)≈i=0∑K−1θiTk(Λ )(7.3)
其中:
回到对信号x与滤波器 g θ g_{θ} gθ 的卷积的定义,则有下面这个重要的 Graph Convolution 公式:
g θ ∗ x = ∑ k = 0 K θ k T k ( L ~ ) x (7.4) g_{\theta} * x = \sum_{k=0}^{K} \theta_{k} T_k(\widetilde{L})x \tag{7.4} gθ∗x=k=0∑KθkTk(L )x(7.4)
其中:
现在,相比于第一代GCN:
此表达式现在是 K K K-localized,具有局部连接性,因为它是拉普拉斯算子中的 K − t h K^{-th} K−th阶多项式,即它仅取决于离中央节点 ( K t h K^{th} Kth 阶邻域) 最大 K K K 步的节点。
关于为什么以Chebyshev多项式的 K − t h K^{-th} K−th 截断来拟合卷积核会导致 K K K-localized,我现在并不明白。询问了老师,得到的结果是 “就是L的幂次越高,就会引入越多的近邻参与计算。那个一阶切比雪夫,只有当前节点周围的几个节点被考虑进来。如果二阶的话,就会有更多的节点被考虑进来。”
T k ( L ~ ) x T_k(\widetilde{L})x Tk(L )x 的计算复杂度是 O ( ∣ E ∣ ) \mathcal{O}(|E|) O(∣E∣) ,,即与边数 E E E 呈线性关系,整个运算的复杂度是 $\mathcal{O}(K|E|) $,当graph是稀疏图的时候,计算加速尤为明显,这个时候复杂度远低于 O ( n 2 ) \mathcal{O}(n^2) O(n2)
Equation 7.3 到 Equation 7.4 的补充证明参见原博客。
Semi-supervised classification with graph convolutional networks 这篇论文基于前面的工作,正式成为GCN的开山之作,后面很多变种都是基于这篇文章的。
该篇论文贡献有两点:
作者引入了一种一阶近似的ChebNet,在Equation 7.4
g θ ∗ x = ∑ k = 0 K θ k T k ( L ~ ) x (7.4) g_{\theta} * x = \sum_{k=0}^{K} \theta_{k} T_k(\widetilde{L})x \tag{7.4} gθ∗x=k=0∑KθkTk(L )x(7.4)
的基础上,令 K = 1 K=1 K=1, λ m a x = 2 \lambda_{max}=2 λmax=2,则ChebNet卷积公式简化近似为:
g θ ∗ x = θ 0 x − θ 1 D − 1 / 2 A D − 1 / 2 x (7.5) g_{\theta} * x=\theta_0x - \theta_1D^{− 1/2} AD^{− 1/2}x \tag{7.5} gθ∗x=θ0x−θ1D−1/2AD−1/2x(7.5)
为了抑制参数数量防止过拟合,1stChebNet假设 θ = θ 0 ′ = − θ 1 ′ \theta=\theta_0^{\ '}=-\theta_1^{\ '} θ=θ0 ′=−θ1 ′,图卷积的定义就近似为:
g θ ∗ x = θ ( I N + D − 1 / 2 A D − 1 / 2 ) x (7.6) g_{\theta} * x = \theta (I_N+D^{− 1/2} AD^{− 1/2})x \tag{7.6} gθ∗x=θ(IN+D−1/2AD−1/2)x(7.6)
而 I N + D − 1 / 2 A D − 1 / 2 I_N+D^{− 1/2} AD^{− 1/2} IN+D−1/2AD−1/2 是有范围[0,2]的特征值。因此,如果在深度神经网络模型中使用该算子,则反复应用该算子会导致数值不稳定(发散)和梯度爆炸/消失。
为了解决梯度爆炸/消失的问题,引入了 renormalization trick:
I N + D − 1 / 2 A D − 1 / 2 ⟶ D ~ − 1 / 2 A ~ D ~ − 1 / 2 (7.7) I_N+D^{− 1/2} AD^{− 1/2} \longrightarrow \widetilde{D}^{-1/2}\widetilde{A} \widetilde{D}^{-1/2} \tag{7.7} IN+D−1/2AD−1/2⟶D −1/2A D −1/2(7.7)
其中: A ~ = A + I N \widetilde{A}=A+I_N A =A+IN, D ~ i i = ∑ j A ~ i j \widetilde{D}_{ii}=\sum_j\widetilde{A}_{ij} D ii=∑jA ij,即图中加上自环。
再加上一个激活函数,最后就可以得到了论文中的快速卷积公式:
H l + 1 = f ( H l , A ) = σ ( D ~ − 1 / 2 A ~ D ~ − 1 / 2 H ( l ) W ( l ) ) (7.8) H^{l+1} = f(H^l, A) = \sigma(\widetilde{D}^{-1/2}\widetilde{A} \widetilde{D}^{-1/2} H^{(l)} W^{(l)}) \tag{7.8} Hl+1=f(Hl,A)=σ(D −1/2A D −1/2H(l)W(l))(7.8)
将这个定义推广到具有C个输入通道(即每个节点的C维特征向量)的信号 X ∈ R N × C X \in \R ^{N×C} X∈RN×C 和 F 个滤波器或特征映射如下:
Z = D ~ − 1 / 2 A ~ D ~ − 1 / 2 X Θ Z=\widetilde{D}^{-1/2}\widetilde{A} \widetilde{D}^{-1/2} X \Theta Z=D −1/2A D −1/2XΘ
这个滤波操作复杂度是 O ( ∣ E ∣ F C ) \mathcal{O}(|E|FC) O(∣E∣FC) (其中E为边数,C为特征向量维度,F为卷积核数量),并且 A ~ X \widetilde{A}X A X 可以有效地实现为密集矩阵和稀疏矩阵的乘积。(在源代码中使用了稀疏矩阵和稠密矩阵乘法)
搬运博客:图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导-持续更新 中GCN的优点和GCN的不足。