本文为图神经网络的学习笔记,讲解图卷积网络 GCN。欢迎在评论区与我交流👏
前言
传统卷积方式在非欧式的数据空间无法保持“平移不变性”,因此将卷积推广到 Graph 等非欧式数据空间的拓扑图上。
先给出 GCN 的公式:
H ( l + 1 ) = D ^ − 1 / 2 A ^ D ^ − 1 / 2 H l W l H^{(l+1)}=\hat{D}^{-1/2}\hat{A}\hat{D}^{-1/2}H^lW^l H(l+1)=D^−1/2A^D^−1/2HlWl
- 卷积和傅里叶变换关系紧密。数学上的定义是两个函数的卷积等于各自傅里叶变换的乘积的逆傅里叶变换。此时卷积与傅里叶变换产生了联系
- 传统的傅里叶变换可通过类比推广到图上的傅里叶变换。此时傅里叶变换又与 Graph 产生了联系
- 由傅里叶充当桥梁,卷积与 Graph 产生联系
【论文链接】。
拉普拉斯矩阵与 GCN
拉普拉斯矩阵及其变体
拉普拉斯矩阵
简单图 G G G 的节点数为 n n n, D D D 是 G G G 的度矩阵, A A A 是 G G G 的邻接矩阵,则 G G G 的拉普拉斯矩阵可以表示为 L = D − A L=D-A L=D−A。
度矩阵 D D D 定义为:
d i , j : = { d e g ( v i ) if i = j 0 o t h e r w i s e d_{i,j}:=\left\{ \begin{array}{rcl} deg(v_i) & & \text{if }{i=j}\\ 0 & & otherwise\\ \end{array} \right. di,j:={ deg(vi)0if i=jotherwise
L L L 中各元素表示:
L i , j : = { d e g ( v i ) i = j − 1 if i ≠ j and v i 邻接 v j 0 o t h e r w i s e L_{i,j}:=\left\{ \begin{array}{rcl} deg(v_i) & & {i=j}\\ -1 & & \text{if } i\not=j \text{ and } v_i \text{邻接} v_j\\ 0 & & otherwise\\ \end{array} \right. Li,j:=⎩⎨⎧deg(vi)−10i=jif i=j and vi邻接vjotherwise
示意图(拉普拉斯矩阵也称为调和矩阵):
拉普拉斯矩阵变体
对称归一化的拉普拉斯矩阵:
L s y s = D − 1 / 2 L D − 1 / 2 = I − D − 1 / 2 A D − 1 / 2 L^{sys}=D^{-1/2}LD^{-1/2}=I-D^{-1/2}AD^{-1/2} Lsys=D−1/2LD−1/2=I−D−1/2AD−1/2
L i , j s y s : = { 1 i = j − 1 d e g ( v i ) d e g ( v j ) if i ≠ j and v i 邻接 v j 0 o t h e r w i s e L_{i,j}^{sys}:=\left\{ \begin{array}{rcl} 1 & & {i=j}\\ \frac{-1}{\sqrt{deg(v_i)deg(v_j)}} & & \text{if } i\not=j \text{ and } v_i \text{邻接} v_j\\ 0 & & otherwise\\ \end{array} \right. Li,jsys:=⎩⎪⎨⎪⎧1deg(vi)deg(vj) −10i=jif i=j and vi邻接vjotherwise
随机游走归一化的拉普拉斯矩阵:
L r w = D − 1 L = I − D − 1 A L^{rw}=D^{-1}L=I-D^{-1}A Lrw=D−1L=I−D−1A
L i , j r w : = { 1 i = j − 1 d e g ( v i ) if i ≠ j and v i 邻接 v j 0 o t h e r w i s e L_{i,j}^{rw}:=\left\{ \begin{array}{rcl} 1 & & {i=j}\\ \frac{-1}{\sqrt{deg(v_i)}} & & \text{if } i\not=j \text{ and } v_i \text{邻接} v_j\\ 0 & & otherwise\\ \end{array} \right. Li,jrw:=⎩⎪⎨⎪⎧1deg(vi) −10i=jif i=j and vi邻接vjotherwise
拉普拉斯矩阵性质
半正定矩阵:是正定矩阵的推广。对于任意不为 0 的实列向量 X X X,都有 X ’ A X ≥ 0 X’AX\ge0 X’AX≥0,二次型 X ’ A X X’AX X’AX 半正定,则实对称矩阵 A A A 为半正定。
性质:
- 半正定矩阵的行列式非负
- 两个半正定矩阵的和是半正定
- 非负实数与半正定矩阵的数乘矩阵是半正定
拉普拉斯矩阵是半正定对称矩阵
对称矩阵有 n n n 个线性无关的特征向量 ⇒ \rArr ⇒ 拉普拉斯矩阵可以特征分解
半正定矩阵的特征值非负
对称矩阵的特征向量构成的矩阵为正交阵 ⇒ U T U = E \rArr U^TU=E ⇒UTU=E
GCN 为什么要用拉普拉斯矩阵
拉普拉斯矩阵可以谱分解(特征分解),GCN 是从谱域的角度提取拓扑图的空间特征的
拉普拉斯矩阵只在中心元素和一阶相邻元素处有非零元素
传统傅里叶变换公式中基函数是拉普拉斯算子,借助拉普拉斯矩阵,通过类比可以推导出 Graph 上的傅里叶变换公式
算子:一个函数空间到函数空间上的映射 O O O: X → X X\to X X→X。广义上算子可以推广到任何空间,如内积空间
傅立叶变换与 GCN
传统的傅里叶变换
F ( ω ) = F [ f ( t ) ] = ∫ f ( t ) e − i ω t d t F(\omega)=F[f(t)]=\int f(t)e^{-i\omega t}dt F(ω)=F[f(t)]=∫f(t)e−iωtdt
当变换对象为离散变量时,求积分相当于求内积,即 F ( f ( t ) ) = < f ( t ) , e − i ω t > F(f(t))=<f(t),e^{-i\omega t}> F(f(t))=<f(t),e−iωt>。这里的 e − i ω t e^{-i\omega t} e−iωt 为拉普拉斯算子的特征函数,拉普拉斯算子是欧氏空间中的二阶微分算子: ∇ ⃗ 2 f = ∇ ⃗ ⋅ ( ∇ ⃗ f ) \vec{\nabla}^2f=\vec{\nabla}\cdot(\vec{\nabla}f) ∇ 2f=∇ ⋅(∇ f)。
因为从广义的特征方程定义看, A V = λ A AV=\lambda A AV=λA, A A A 本身是一种变换, V V V 是特征向量或特征函数, λ \lambda λ 是特征值。我们对基函数 e − i w t e^{-iwt} e−iwt 求二阶导:
Δ e − i ω t = ϑ 2 ϑ t 2 e − i ω t = − w 2 e − i ω t = k e − i ω t \Delta e^{-i\omega t} = \frac{\vartheta ^2 }{\vartheta t^2}e^{-i\omega t}= -w^2e^{-i\omega t} = ke^{-i\omega t} Δe−iωt=ϑt2ϑ2e−iωt=−w2e−iωt=ke−iωt
可以看出 e − i ω t e^{-i\omega t} e−iωt 是变换 Δ \Delta Δ 的特征函数。
在 Graph 中,拉普拉斯矩阵 L L L 可以谱分解(特征分解),其特征向量组成矩阵 U U U,根据特征方程的定义我们可以得到 L U = λ U LU=\lambda U LU=λU。通过对比可以发现 L L L 相当于 Δ \Delta Δ, U U U 相当于 e − i ω t e^{-i\omega t} e−iωt。因此在 Graph 上的傅里叶变换可以写为:
F [ f ( λ k ) ] = f ^ ( λ k ) = < f , U k > = ∑ i = 1 n f ( i ) ∗ U k ( i ) F[f(\lambda_k)]=\hat{f}(\lambda_k)=<f,U_k>=\sum_{i=1}^nf(i)*U_k(i) F[f(λk)]=f^(λk)=<f,Uk>=i=1∑nf(i)∗Uk(i)
从傅里叶变换的基本思想来看,对 f ( t ) f(t) f(t) 进行傅里叶变换的本质是将 f ( t ) f(t) f(t) 转换为一组正交基下的坐标表示,进行线性变换,而坐标就是傅里叶变换的结果。下图中的 f ^ 1 \hat{f}_1 f^1 就是 f f f 在第一个基上的投影分量的大小:
这与拉普拉斯矩阵特征分解的本质一样。因此可以类比出 Graph 上的傅里叶变换:
f ^ ( λ k ) = ∑ i = 1 n f ( i ) ∗ U k ( i ) \hat{f}(\lambda_k)=\sum_{i=1}^nf(i)*U_k(i) f^(λk)=i=1∑nf(i)∗Uk(i)
f ^ ( λ k ) \hat{f}(\lambda_k) f^(λk) 是在 U k U_k Uk 这个基下的投影。
通过矩阵乘法将 Graph 上的傅里叶变换推广到矩阵形式:
f ( N ) f(N) f(N) 是 Graph 上第 N N N 个节点的特征向量,可得到 Graph 上的傅里叶变换形式:
f ^ ( λ ) = U T f \hat{f}(\lambda)=U^Tf f^(λ)=UTf
因为 U U U 为正交阵,满足 U U T = E UU^T=E UUT=E,因此 Graph 的逆傅里叶变换形式为:
f = U f ^ ( λ ) f=U\hat{f}(\lambda) f=Uf^(λ)
矩阵形式如下:
我们已经通过类比从传统的傅里叶变换推广到了 Graph 上的傅里叶变换。接下来借助傅里叶变换这个桥梁来研究卷积与 Graph。
卷积与 GCN
卷积定理:函数卷积的傅里叶变换是其傅里叶变换的乘积。对于 f ( t ) f(t) f(t) 和 h ( t ) h(t) h(t),两者的卷积是其傅里叶变换的逆变换:
( f ∗ h ) G = F − 1 ( f ^ ( ω ) h ^ ( ω ) ) (f*h)_G=F^{-1}(\hat{f}(\omega)\hat{h}(\omega)) (f∗h)G=F−1(f^(ω)h^(ω))
将上一节得到的 Graph 的傅里叶变换带入得到:
( f h ) G = F − 1 ( ( U T f ) ⊙ ( U T h ) ) = U ( ( U T f ) ⊙ ( U T h ) ) (fh)_G = F^{-1}((U^Tf)\odot(U^Th)) = U((U^Tf)\odot(U^Th)) (fh)G=F−1((UTf)⊙(UTh))=U((UTf)⊙(UTh))
其中 ⊙ \odot ⊙ 是 Hamada 积,表示逐点相乘。
我们一般将 f f f 看作输入的 Graph 的节点特征,将 h h h 视为可训练且参数共享的卷积核来提取拓扑图的空间特征。为了进一步理解卷积核 h h h,将上式改写为:
U ( ( U T f ) ⊙ ( U T h ) ) = U ( ( U T h ) ⊙ ( U T f ) ) = U d i a g [ h ^ ( λ 1 ) , . . . , h ^ ( λ N ) ] U T f U((U^Tf)\odot (U^Th)) = U((U^Th)\odot (U^Tf)) = Udiag[\hat{h}(\lambda _1),...,\hat{h}(\lambda _N) ]U^Tf U((UTf)⊙(UTh))=U((UTh)⊙(UTf))=Udiag[h^(λ1),...,h^(λN)]UTf
证明见【GCN 中的等式证明】。
至此,我们已经推导出来 GCN 的雏形。
GCN 的进阶之路
第一代 GCN
卷积操作核心是可训练且参数共享的卷积核,所以第一代 GCN 直接将上式中的 d i a g [ h ^ ( λ 1 ) , . . . , h ^ ( λ N ) ] diag[\hat{h}(\lambda _1),...,\hat{h}(\lambda _N)] diag[h^(λ1),...,h^(λN)] 中的对角线元素 h ^ ( λ n ) \hat{h}(\lambda_n) h^(λn) 替换为参数 θ \theta θ。先初始化赋值,然后通过反向传播误差来调整参数 θ \theta θ。
所以第一代 GCN 为:
y = σ ( U d i a g [ h ^ ( λ 1 ) , . . . , h ^ ( λ N ) ] U T f ) = σ ( U g θ U T x ) y = \sigma (Udiag[\hat{h}(\lambda _1),...,\hat{h}(\lambda N) ]U^Tf) = \sigma (Ug\theta U^Tx) y=σ(Udiag[h^(λ1),...,h^(λN)]UTf)=σ(UgθUTx)
x x x 是 Graph 中每个节点特征的表示向量, y y y 是每个节点经过 GCN 卷积后的输出。Graph 中的每个节点都要经过卷积核卷积来提取相应的拓扑空间,然后经过激活函数 σ \sigma σ 传播到下一层。
第一代 GCN 的缺点:
- 需要对拉普拉斯矩阵进行特征分解,每次前向传播过程中都要计算矩阵乘法,当 Graph 规模较大时,时间复杂度为 O ( n 2 ) O(n^2) O(n2),十分耗时
- 卷积核的个数为 n n n,当 n n n 很大时,节点特征更新缓慢。
第二代 GCN
由于 Graph 上的傅里叶变换时关于特征值的函数 F ( λ k ) F(\lambda_k) F(λk), g θ g_\theta gθ 可以写作 g θ ( Λ ) g_\theta(\Lambda) gθ(Λ),用 k k k 阶多项式对卷积核进行改进:
g θ ( Λ ) ≈ ∑ k = 0 K θ k Λ k g_\theta(\Lambda ) \approx \sum_{k=0}^K\theta _{k}\Lambda ^k gθ(Λ)≈k=0∑KθkΛk
将其代入到傅里叶变换中有:
( g θ ∗ x ) G ≈ U ∑ k = 0 K θ k Λ k U T x = ∑ k = 0 K θ k ( U Λ k U T ) x = ∑ k = 0 K θ k ( U Λ U T ) k x = ∑ k = 0 K θ k L k x (g_\theta * x)_G \approx U\sum_{k=0}^K\theta_{k}\Lambda ^kU^Tx = \sum_{k=0}^K\theta_{k}(U\Lambda ^kU^T)x = \sum_{k=0}^K\theta_{k}(U\Lambda U^T)^kx = \sum_{k=0}^K\theta_{k}L^kx (gθ∗x)G≈Uk=0∑KθkΛkUTx=k=0∑Kθk(UΛkUT)x=k=0∑Kθk(UΛUT)kx=k=0∑KθkLkx
所以第二代 GCN 形式为:
y = σ ( ∑ k = 0 K θ k L k x ) y=\sigma(\sum_{k=0}^K\theta_{k}L^kx) y=σ(k=0∑KθkLkx)
第二代 GCN 的最终化简结果不需要进行矩阵分解,而是直接对拉普拉斯矩阵进行变换。参数为 θ k \theta_k θk,一般 k < < n k<<n k<<n,因此第二代 GCN 的参数量明显减少,降低了模型的复杂度。对于参数 θ k \theta_k θk,先对其初始化,然后根据误差反向传播来更新参数。但是仍旧需要计算 L k L^k Lk,时间复杂度为 O ( n 2 ) O(n^2) O(n2)。
对于矩阵的 k k k 次方,可以得到与中间节点 k-hop 相连的节点,即 L k L^k Lk 中元素是否为 0 表示 Graph 中的节点经过 k k k 跳是否能到达另一节点,这里 k k k 其实表示卷积核感受野的大小,通过将每个中心节点 k-hop 内的邻接节点聚合来更新中心节点的特征表示,而参数 θ k \theta_k θk 就是第 k-hop 邻接的权重。
用切比雪夫多项式展开近似图卷积核
在第二代 GCN 基础上用 ChebShev 多项式展开对图卷积核进行近似,即令:
{ g θ ≈ ∑ k = 0 K − 1 θ k T k ( Λ ^ ) Λ ^ = 2 λ m a x Λ − I N \begin{cases} g_ {\theta}\approx \sum_{k=0}^{K-1}\theta k T_k(\hat \Lambda ) \\ \hat \Lambda = \frac{2}{\lambda {max}}\Lambda -I_N \end{cases} { gθ≈∑k=0K−1θkTk(Λ^)Λ^=λmax2Λ−IN
切比雪夫多项式的递归定义为:
{ T 0 ( x ) = 1 T 1 ( x ) = x T n + 1 ( x ) = 2 x T n ( x ) − T n − 1 ( x ) \begin{cases} T_0(x) = 1 \\ T_1(x) = x \\ T_{n+1}(x) = 2xT_n(x) -T_{n-1}(x) \end{cases} ⎩⎪⎨⎪⎧T0(x)=1T1(x)=xTn+1(x)=2xTn(x)−Tn−1(x)
用切比雪夫多项式近似图卷积核的好处:
- 卷积核的参数从原先一代 GCN 的 n n n 个减少到 k k k 个,从原先的全局卷积到现在局部卷积,即将距离中心节点 k-hop 的节点作为邻接节点
- 通过迭代定义降低了计算复杂度
则切比雪夫图卷积公式为:
{ y = σ ( ∑ k = 0 K θ k T k ( L ^ ) x ) ) L ^ = 2 λ m a x L − I N \begin{cases} y = \sigma(\sum_{k=0}^{K}\theta _k T_k(\hat L)x))\\ \hat L = \frac{2}{\lambda {max}}L -I_N \end{cases} { y=σ(∑k=0KθkTk(L^)x))L^=λmax2L−IN
构建 TensorFlow 的 ChebNet 模型教程见【切比雪夫多项式近似图卷积核】。
GCN
GCN 是在 ChebNet 基础上继续化简得到的。在 ChebNet 卷积公式中令 k = 1 k=1 k=1,只使用一阶切比雪夫多项式。此时:
y = σ ( ∑ k = 0 1 θ k T k ( L ^ ) x ) ) = σ ( θ 0 T 0 ( L ^ ) x + θ 1 T 1 ( L ^ ) x ) y=\sigma(\sum_{k=0}^{1}\theta_k T_k(\hat L)x)) = \sigma(\theta_0T_0(\hat L)x + \theta_1T_1(\hat L)x) y=σ(k=0∑1θkTk(L^)x))=σ(θ0T0(L^)x+θ1T1(L^)x)
由切比雪夫迭代定义有:
T 0 ( x ) = 1 , T 1 ( x ) = x T_0(x) = 1, T_1(x) = x T0(x)=1,T1(x)=x
所以:
σ ( θ 0 T 0 ( L ^ ) x + θ 1 T 1 ( L ^ ) x ) = σ ( θ 0 x + θ 1 L ^ x ) \sigma(\theta_0T_0(\hat L)x + \theta_1T_1(\hat L)x) = \sigma(\theta_0x + \theta_1\hat Lx) σ(θ0T0(L^)x+θ1T1(L^)x)=σ(θ0x+θ1L^x)
令 λ m a x = 2 \lambda{max}=2 λmax=2,则:
L ^ = L − I N \hat L = L - I_N L^=L−IN
代入后为:
σ ( θ 0 x + θ 1 L ^ x ) = σ ( θ 0 x + θ 1 ( L − I N ) x ) \sigma(\theta_0x + \theta_1\hat Lx) = \sigma(\theta_0x + \theta_1(L - I_N)x) σ(θ0x+θ1L^x)=σ(θ0x+θ1(L−IN)x)
又因为 L L L 是对称归一化的拉普拉斯矩阵,即 L = D − 1 / 2 ( D − A ) D − 1 / 2 L = D^{-1/2}(D-A)D^{-1/2} L=D−1/2(D−A)D−1/2。因此上式:
σ ( θ 0 x + θ 1 ( L − I N ) x \sigma(\theta_0x + \theta_1(L - I_N)x σ(θ0x+θ1(L−IN)x
= σ ( θ 0 x + θ 1 ( D − 1 / 2 ( D − A ) D − 1 / 2 − I N ) x ) = \sigma(\theta_0x + \theta_1(D^{-1/2}(D-A)D^{-1/2} - I_N)x) =σ(θ0x+θ1(D−1/2(D−A)D−1/2−IN)x)
= σ ( θ 0 x + θ 1 ( I N − D 1 / 2 A D − 1 / 2 − I N ) x ) = \sigma(\theta_0x + \theta_1(I_N - D^{1/2}AD^{-1/2} - I_N)x) =σ(θ0x+θ1(IN−D1/2AD−1/2−IN)x)
= σ ( θ 0 x + θ 1 ( − D 1 / 2 A D − 1 / 2 ) x ) = \sigma(\theta_0x + \theta_1(- D^{1/2}AD^{-1/2} )x) =σ(θ0x+θ1(−D1/2AD−1/2)x)
再令 θ = θ 0 = − θ 1 \theta = \theta _0 = -\theta_1 θ=θ0=−θ1:
σ ( θ 0 x + θ 1 ( − D 1 / 2 A D − 1 / 2 ) x ) = σ ( θ ( I N + D − 1 / 2 A D − 1 / 2 ) x ) \sigma(\theta_0x + \theta_1(- D^{1/2}AD^{-1/2})x) = \sigma(\theta(I_N + D^{-1/2}AD^{-1/2})x) σ(θ0x+θ1(−D1/2AD−1/2)x)=σ(θ(IN+D−1/2AD−1/2)x)
若令 A ^ = I N + A \hat A = I_N +A A^=IN+A,则:
σ ( θ ( I N + D − 1 / 2 A D − 1 / 2 ) x ) = σ ( θ D − 1 / 2 A ^ D − 1 / 2 x ) \sigma(\theta(I_N + D^{-1/2}AD^{-1/2})x) = \sigma(\theta D^{-1/2}\hat A D^{-1/2}x) σ(θ(IN+D−1/2AD−1/2)x)=σ(θD−1/2A^D−1/2x)
将其推广到矩阵形式得到 GCN 卷积公式:
H ( l + 1 ) = D ^ − 1 / 2 A ^ D ^ − 1 / 2 H l W l H^{(l+1)} = \hat{D} ^{-1/2}\hat{A} \hat{D} ^{-1/2}H^lW^l H(l+1)=D^−1/2A^D^−1/2HlWl
谱域卷积 VS 空域卷积
谱域卷积
对图的拉普拉斯矩阵进行特征分解,通过在傅里叶空间进行特征分解有助于我们理解潜在的子图结构。ChebyNet,GCN 是使用谱域卷积的典型深度学习架构。
空域卷积
空域卷积作用在节点的邻域上,通过节点的 k-hop 领域聚合得到节点的特征表示。空域卷积相比谱域卷积更加简单高效。GraphSAGE 和 GAT 是空域卷积的典型代表。
有帮助的话点个赞加关注吧 😃
来源:oschina
链接:https://my.oschina.net/u/4321917/blog/4659415